@etherisc/gif-next 0.0.2-f824182-503 → 0.0.2-f831797-539

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/README.md +411 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +644 -35
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1301 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +271 -236
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +851 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +936 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +712 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1143 -133
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +950 -157
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +783 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1599 -798
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +2341 -875
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1284 -0
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1046 -0
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  43. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +532 -0
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  54. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  56. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  58. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  60. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  62. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  63. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  64. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  66. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  68. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  70. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  72. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  74. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  76. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1724 -0
  78. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +801 -0
  80. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  84. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  86. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1013 -0
  88. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  90. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +428 -0
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +384 -0
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +816 -0
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +653 -0
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  104. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  106. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +578 -29
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +890 -0
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  114. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/Registry.sol/Registry.json +651 -68
  116. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  118. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1177 -0
  120. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  122. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  123. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  126. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  127. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  130. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  131. package/artifacts/contracts/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +46 -74
  132. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +68 -66
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +188 -0
  136. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  137. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +18 -19
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IService.sol/IService.json +269 -0
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  144. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
  150. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  152. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  153. package/artifacts/contracts/shared/Service.sol/Service.json +425 -0
  154. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  166. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestService.sol/TestService.json +521 -0
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  174. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  175. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  176. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  178. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +78 -4
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +97 -4
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  216. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  220. package/contracts/components/Component.sol +215 -51
  221. package/contracts/components/Distribution.sol +280 -0
  222. package/contracts/components/IComponent.sol +74 -0
  223. package/contracts/components/IDistributionComponent.sol +71 -0
  224. package/contracts/components/IPoolComponent.sol +113 -0
  225. package/contracts/components/IProductComponent.sol +40 -0
  226. package/contracts/components/Pool.sol +277 -30
  227. package/contracts/components/Product.sol +252 -48
  228. package/contracts/instance/BundleManager.sol +127 -0
  229. package/contracts/instance/Cloneable.sol +46 -0
  230. package/contracts/instance/IInstance.sol +92 -24
  231. package/contracts/instance/IInstanceService.sol +60 -0
  232. package/contracts/instance/Instance.sol +274 -51
  233. package/contracts/instance/InstanceAccessManager.sol +297 -0
  234. package/contracts/instance/InstanceReader.sol +294 -0
  235. package/contracts/instance/InstanceService.sol +489 -0
  236. package/contracts/instance/InstanceServiceManager.sol +54 -0
  237. package/contracts/instance/ObjectManager.sol +84 -0
  238. package/contracts/instance/base/ComponentService.sol +134 -0
  239. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  240. package/contracts/instance/base/ILifecycle.sol +30 -0
  241. package/contracts/instance/base/KeyValueStore.sol +175 -0
  242. package/contracts/instance/base/Lifecycle.sol +109 -0
  243. package/contracts/instance/module/IAccess.sol +47 -0
  244. package/contracts/instance/module/IBundle.sol +21 -0
  245. package/contracts/instance/module/IComponents.sol +35 -0
  246. package/contracts/instance/module/IDistribution.sol +41 -0
  247. package/contracts/instance/module/IPolicy.sol +72 -0
  248. package/contracts/instance/module/IRisk.sol +11 -0
  249. package/contracts/instance/module/ISetup.sol +33 -0
  250. package/contracts/instance/module/ITreasury.sol +23 -0
  251. package/contracts/instance/service/ApplicationService.sol +350 -0
  252. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  253. package/contracts/instance/service/BundleService.sol +336 -0
  254. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  255. package/contracts/instance/service/ClaimService.sol +151 -0
  256. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  257. package/contracts/instance/service/DistributionService.sol +450 -0
  258. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  259. package/contracts/instance/service/IApplicationService.sol +82 -0
  260. package/contracts/instance/service/IBundleService.sol +62 -0
  261. package/contracts/instance/service/IClaimService.sol +61 -0
  262. package/contracts/instance/service/IDistributionService.sol +98 -0
  263. package/contracts/instance/service/IPolicyService.sol +72 -0
  264. package/contracts/instance/service/IPoolService.sol +35 -0
  265. package/contracts/instance/service/IProductService.sol +40 -0
  266. package/contracts/instance/service/PolicyService.sol +403 -0
  267. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  268. package/contracts/instance/service/PoolService.sol +163 -0
  269. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  270. package/contracts/instance/service/ProductService.sol +233 -0
  271. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  272. package/contracts/registry/ChainNft.sol +129 -62
  273. package/contracts/registry/IRegistry.sol +73 -41
  274. package/contracts/registry/IRegistryService.sol +67 -0
  275. package/contracts/registry/ITransferInterceptor.sol +6 -0
  276. package/contracts/registry/Registry.sol +408 -126
  277. package/contracts/registry/RegistryAccessManager.sol +216 -0
  278. package/contracts/registry/RegistryService.sol +283 -0
  279. package/contracts/registry/RegistryServiceManager.sol +62 -0
  280. package/contracts/registry/ReleaseManager.sol +322 -0
  281. package/contracts/registry/TokenRegistry.sol +116 -0
  282. package/contracts/shared/ContractDeployerLib.sol +72 -0
  283. package/contracts/shared/ERC165.sol +27 -0
  284. package/contracts/shared/INftOwnable.sol +23 -0
  285. package/contracts/shared/IPolicyHolder.sol +26 -0
  286. package/contracts/shared/IRegisterable.sol +15 -0
  287. package/contracts/shared/IRegistryLinked.sol +12 -0
  288. package/contracts/shared/IService.sol +18 -0
  289. package/contracts/shared/IVersionable.sol +53 -0
  290. package/contracts/shared/NftOwnable.sol +120 -0
  291. package/contracts/shared/PolicyHolder.sol +81 -0
  292. package/contracts/shared/ProxyManager.sol +169 -0
  293. package/contracts/shared/Registerable.sol +74 -0
  294. package/contracts/shared/RegistryLinked.sol +48 -0
  295. package/contracts/shared/Service.sol +58 -0
  296. package/contracts/shared/TokenHandler.sol +33 -0
  297. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  298. package/contracts/shared/Versionable.sol +59 -0
  299. package/contracts/test/TestFee.sol +25 -0
  300. package/contracts/test/TestRegisterable.sol +18 -0
  301. package/contracts/test/TestRoleId.sol +14 -0
  302. package/contracts/test/TestService.sol +25 -0
  303. package/contracts/test/TestToken.sol +26 -0
  304. package/contracts/test/TestVersion.sol +44 -0
  305. package/contracts/test/TestVersionable.sol +17 -0
  306. package/contracts/test/Usdc.sol +26 -0
  307. package/contracts/types/AddressSet.sol +58 -0
  308. package/contracts/types/Blocknumber.sol +1 -0
  309. package/contracts/types/ClaimId.sol +52 -0
  310. package/contracts/types/DistributorType.sol +55 -0
  311. package/contracts/types/Fee.sol +45 -20
  312. package/contracts/types/Key32.sol +50 -0
  313. package/contracts/types/NftId.sol +30 -1
  314. package/contracts/types/NftIdSet.sol +62 -0
  315. package/contracts/types/NumberId.sol +52 -0
  316. package/contracts/types/ObjectType.sol +65 -15
  317. package/contracts/types/PayoutId.sol +54 -0
  318. package/contracts/types/Referral.sol +89 -0
  319. package/contracts/types/RiskId.sol +43 -0
  320. package/contracts/types/RoleId.sol +95 -0
  321. package/contracts/types/Seconds.sol +54 -0
  322. package/contracts/types/StateId.sol +19 -4
  323. package/contracts/types/Timestamp.sol +31 -6
  324. package/contracts/types/UFixed.sol +151 -31
  325. package/contracts/types/Version.sol +108 -0
  326. package/package.json +14 -5
  327. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  328. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  329. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  330. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  331. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  332. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  333. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  335. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  337. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  339. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  341. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  343. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  345. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  347. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  349. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  351. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  353. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  355. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  357. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  359. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  360. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  361. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  362. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  363. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  364. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  365. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  366. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  367. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  368. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  370. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  372. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  373. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  374. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  375. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  376. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  378. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  379. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  381. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  383. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  385. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  386. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  387. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  388. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  389. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  390. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  391. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  394. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  395. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  396. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  397. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  398. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  399. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  400. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  401. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  402. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  403. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  404. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  405. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  406. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  407. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  408. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  409. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  410. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  411. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  412. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  413. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  414. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  415. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  416. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  417. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  418. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  419. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  420. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  421. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  422. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  423. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  424. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  425. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  426. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  427. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  428. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  429. package/contracts/components/IPool.sol +0 -15
  430. package/contracts/components/IProduct.sol +0 -16
  431. package/contracts/experiment/errors/Require.sol +0 -38
  432. package/contracts/experiment/errors/Revert.sol +0 -44
  433. package/contracts/experiment/inheritance/A.sol +0 -53
  434. package/contracts/experiment/inheritance/B.sol +0 -28
  435. package/contracts/experiment/inheritance/C.sol +0 -34
  436. package/contracts/experiment/inheritance/IA.sol +0 -13
  437. package/contracts/experiment/inheritance/IB.sol +0 -10
  438. package/contracts/experiment/inheritance/IC.sol +0 -12
  439. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  440. package/contracts/experiment/statemachine/ISM.sol +0 -25
  441. package/contracts/experiment/statemachine/README.md +0 -112
  442. package/contracts/experiment/statemachine/SM.sol +0 -57
  443. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  444. package/contracts/experiment/types/TypeA.sol +0 -47
  445. package/contracts/experiment/types/TypeB.sol +0 -29
  446. package/contracts/instance/access/Access.sol +0 -165
  447. package/contracts/instance/access/IAccess.sol +0 -63
  448. package/contracts/instance/component/ComponentModule.sol +0 -274
  449. package/contracts/instance/component/IComponent.sol +0 -74
  450. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  451. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  452. package/contracts/instance/policy/IPolicy.sol +0 -50
  453. package/contracts/instance/policy/PolicyModule.sol +0 -114
  454. package/contracts/instance/pool/IPoolModule.sol +0 -23
  455. package/contracts/instance/pool/PoolModule.sol +0 -81
  456. package/contracts/instance/product/IProductService.sol +0 -36
  457. package/contracts/instance/product/ProductService.sol +0 -136
  458. package/contracts/instance/treasury/ITreasury.sol +0 -91
  459. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  460. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  461. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,450 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../instance/IInstance.sol";
6
+ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
7
+ import {InstanceReader} from "../../instance/InstanceReader.sol";
8
+ import {ISetup} from "../../instance/module/ISetup.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
10
+
11
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
+ import {Fee, FeeLib} from "../../types/Fee.sol";
13
+ import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
14
+ import {KEEP_STATE} from "../../types/StateId.sol";
15
+ import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
16
+ import {Version, VersionLib} from "../../types/Version.sol";
17
+
18
+ import {IVersionable} from "../../shared/IVersionable.sol";
19
+ import {Versionable} from "../../shared/Versionable.sol";
20
+
21
+ import {IService} from "../../shared/IService.sol";
22
+ import {Service} from "../../shared/Service.sol";
23
+ import {ComponentService} from "../base/ComponentService.sol";
24
+ import {InstanceService} from "../InstanceService.sol";
25
+ import {IComponent} from "../../components/IComponent.sol";
26
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
27
+ import {IDistributionService} from "./IDistributionService.sol";
28
+
29
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
30
+ import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
31
+ import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
32
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
33
+ import {Key32} from "../../types/Key32.sol";
34
+ import {IDistribution} from "../module/IDistribution.sol";
35
+
36
+
37
+ contract DistributionService is
38
+ ComponentService,
39
+ IDistributionService
40
+ {
41
+ using NftIdLib for NftId;
42
+ using TimestampLib for Timestamp;
43
+ using UFixedLib for UFixed;
44
+ using FeeLib for Fee;
45
+ using ReferralLib for ReferralId;
46
+
47
+ address internal _registryAddress;
48
+
49
+ function _initialize(
50
+ address owner,
51
+ bytes memory data
52
+ )
53
+ internal
54
+ initializer
55
+ virtual override
56
+ {
57
+ address initialOwner;
58
+ address registryAddress;
59
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
60
+ // TODO while DistributionService is not deployed in DistributionServiceManager constructor
61
+ // owner is DistributionServiceManager deployer
62
+ initializeService(registryAddress, owner);
63
+ registerInterface(type(IDistributionService).interfaceId);
64
+ }
65
+
66
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
67
+ return DISTRIBUTION();
68
+ }
69
+
70
+ function register(address distributionAddress)
71
+ external
72
+ returns(NftId distributionNftId)
73
+ {
74
+ (
75
+ IComponent component,
76
+ address owner,
77
+ IInstance instance,
78
+ NftId instanceNftId
79
+ ) = _checkComponentForRegistration(
80
+ distributionAddress,
81
+ DISTRIBUTION(),
82
+ DISTRIBUTION_OWNER_ROLE());
83
+
84
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
85
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
86
+ distribution.linkToRegisteredNftId();
87
+ distributionNftId = distributionInfo.nftId;
88
+
89
+ instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
90
+ getInstanceService().createGifTarget(instanceNftId, distributionAddress, distribution.getName());
91
+ getInstanceService().grantDistributionDefaultPermissions(instanceNftId, distributionAddress, distribution.getName());
92
+ }
93
+
94
+ function setFees(
95
+ Fee memory minDistributionOwnerFee,
96
+ Fee memory distributionFee
97
+ )
98
+ external
99
+ override
100
+ {
101
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
102
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
103
+ }
104
+
105
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
106
+ InstanceReader instanceReader = instance.getInstanceReader();
107
+ NftId distributionNftId = info.nftId;
108
+
109
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
110
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
111
+ distSetupInfo.distributionFee = distributionFee;
112
+
113
+ instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
114
+ }
115
+
116
+ function createDistributorType(
117
+ string memory name,
118
+ UFixed minDiscountPercentage,
119
+ UFixed maxDiscountPercentage,
120
+ UFixed commissionPercentage,
121
+ uint32 maxReferralCount,
122
+ uint32 maxReferralLifetime,
123
+ bool allowSelfReferrals,
124
+ bool allowRenewals,
125
+ bytes memory data
126
+ )
127
+ external
128
+ returns (DistributorType distributorType)
129
+ {
130
+ (,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
131
+
132
+ {
133
+ ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
134
+ UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
135
+ UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
136
+ if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
137
+ revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
138
+ }
139
+ }
140
+
141
+ distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
142
+ Key32 key32 = distributorType.toKey32();
143
+
144
+ if(!instance.exists(key32)) {
145
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
146
+ name,
147
+ minDiscountPercentage,
148
+ maxDiscountPercentage,
149
+ commissionPercentage,
150
+ maxReferralCount,
151
+ maxReferralLifetime,
152
+ allowSelfReferrals,
153
+ allowRenewals,
154
+ data);
155
+
156
+ instance.createDistributorType(key32, info);
157
+ }
158
+ }
159
+
160
+ function createDistributor(
161
+ address distributor,
162
+ DistributorType distributorType,
163
+ bytes memory data
164
+ ) external returns (NftId distributorNftId)
165
+ {
166
+ (, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
167
+
168
+ distributorNftId = getRegistryService().registerDistributor(
169
+ IRegistry.ObjectInfo(
170
+ zeroNftId(),
171
+ distributionNftId,
172
+ DISTRIBUTOR(),
173
+ true, // intercepting property for bundles is defined on pool
174
+ address(0),
175
+ distributor,
176
+ ""
177
+ ));
178
+
179
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
180
+ distributorType,
181
+ true, // active
182
+ data,
183
+ 0,
184
+ 0);
185
+
186
+ instance.createDistributor(distributorNftId, info);
187
+ }
188
+
189
+ function updateDistributorType(
190
+ NftId distributorNftId,
191
+ DistributorType distributorType,
192
+ bytes memory data
193
+ ) external virtual
194
+ {
195
+ (,, IInstance instance) = _getAndVerifyCallingDistribution();
196
+ InstanceReader instanceReader = instance.getInstanceReader();
197
+ IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
198
+ distributorInfo.distributorType = distributorType;
199
+ distributorInfo.data = data;
200
+ instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
201
+ }
202
+
203
+
204
+ function createReferral(
205
+ NftId distributorNftId,
206
+ string memory code,
207
+ UFixed discountPercentage,
208
+ uint32 maxReferrals,
209
+ Timestamp expiryAt,
210
+ bytes memory data
211
+ )
212
+ external
213
+ virtual
214
+ returns (ReferralId referralId)
215
+ {
216
+ (,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
217
+
218
+ if (bytes(code).length == 0) {
219
+ revert ErrorIDistributionServiceInvalidReferral(code);
220
+ }
221
+ if (expiryAt.eqz()) {
222
+ revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
223
+ }
224
+
225
+ InstanceReader instanceReader = instance.getInstanceReader();
226
+ IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
227
+ DistributorType distributorType = distributorInfo.distributorType;
228
+ IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
229
+
230
+ if (distributorTypeData.maxReferralCount < maxReferrals) {
231
+ revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
232
+ }
233
+ if (distributorTypeData.minDiscountPercentage > discountPercentage) {
234
+ revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
235
+ }
236
+ if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
237
+ revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
238
+ }
239
+ if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
240
+ revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
241
+ }
242
+
243
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
244
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
245
+ distributorNftId,
246
+ code,
247
+ discountPercentage,
248
+ maxReferrals,
249
+ 0, // used referrals
250
+ expiryAt,
251
+ data
252
+ );
253
+
254
+ instance.createReferral(referralId.toKey32(), info);
255
+ return referralId;
256
+ }
257
+
258
+ function processSale(
259
+ NftId distributionNftId,
260
+ ReferralId referralId,
261
+ IPolicy.Premium memory premium,
262
+ uint256 transferredDistributionFeeAmount
263
+ )
264
+ external
265
+ virtual
266
+ {
267
+ bool isReferral = ! referralId.eqz();
268
+ bool referralValid = referralIsValid(distributionNftId, referralId);
269
+
270
+ if (isReferral && ! referralValid) {
271
+ revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
272
+ }
273
+
274
+ (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
275
+ InstanceReader reader = instance.getInstanceReader();
276
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
277
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
278
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
279
+
280
+ uint256 distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
281
+ uint256 commissionAmount = premium.commissionAmount;
282
+
283
+ if (transferredDistributionFeeAmount != distributionOwnerFee + commissionAmount) {
284
+ revert ErrorIDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
285
+ }
286
+
287
+
288
+ if (distributionOwnerFee > 0) {
289
+ setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
290
+ instance.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
291
+ }
292
+
293
+ if (isReferral) {
294
+ referralInfo.usedReferrals += 1;
295
+ instance.updateReferral(referralId.toKey32(), referralInfo, KEEP_STATE());
296
+
297
+ if (commissionAmount > 0) {
298
+ distributorInfo.sumCommisions += commissionAmount;
299
+ distributorInfo.numPoliciesSold += 1;
300
+ instance.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
301
+ }
302
+ }
303
+ }
304
+
305
+ function calculateFeeAmount(
306
+ NftId distributionNftId,
307
+ ReferralId referralId,
308
+ IPolicy.Premium memory premium
309
+ )
310
+ external
311
+ virtual
312
+ view
313
+ returns (IPolicy.Premium memory finalPremium)
314
+ {
315
+ (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
316
+ InstanceReader reader = instance.getInstanceReader();
317
+
318
+ // first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
319
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
320
+ Fee memory distributionFee = setupInfo.distributionFee;
321
+ Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
322
+ uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
323
+ premium.distributionFeeVarAmount = distributionFeeVarAmount;
324
+ premium.fullPremiumAmount += distributionFeeVarAmount;
325
+
326
+ // if the referral is not valid, then the distribution owner gets everything
327
+ if (! referralIsValid(distributionNftId, referralId)) {
328
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
329
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
330
+ premium.premiumAmount = premium.fullPremiumAmount;
331
+ return premium;
332
+ }
333
+
334
+ // if the referral is valid, the the commission and discount are calculated based in the full premium
335
+ // the remaing amount goes to the distribution owner
336
+ {
337
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
338
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
339
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
340
+
341
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
342
+ premium.commissionAmount = commissionAmount;
343
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
344
+ premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
345
+ premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
346
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
347
+ }
348
+
349
+ // sanity check to validate the fee calculation
350
+ if (premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee) {
351
+ revert ErrorIDistributionServiceFeeCalculationMismatch(
352
+ premium.distributionFeeFixAmount,
353
+ premium.distributionFeeVarAmount,
354
+ premium.distributionOwnerFeeFixAmount,
355
+ premium.distributionOwnerFeeVarAmount,
356
+ premium.commissionAmount,
357
+ premium.discountAmount
358
+ );
359
+ }
360
+ if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
361
+ revert ErrorIDistributionServiceFeeCalculationMismatch(
362
+ premium.distributionFeeFixAmount,
363
+ premium.distributionFeeVarAmount,
364
+ premium.distributionOwnerFeeFixAmount,
365
+ premium.distributionOwnerFeeVarAmount,
366
+ premium.commissionAmount,
367
+ premium.discountAmount
368
+ );
369
+ }
370
+
371
+ return premium;
372
+ }
373
+
374
+ // TODO: zero should return false
375
+ function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
376
+ (address distributionAddress, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
377
+ IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
378
+
379
+ if (info.distributorNftId.eqz()) {
380
+ return false;
381
+ }
382
+
383
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
384
+ isValid = isValid && info.usedReferrals < info.maxReferrals;
385
+ }
386
+
387
+ function _getAndVerifyCallingDistribution()
388
+ internal
389
+ view
390
+ returns(
391
+ address distributionAddress,
392
+ NftId distributionNftId,
393
+ IInstance instance
394
+ )
395
+ {
396
+ ObjectType objectType;
397
+ (
398
+ distributionAddress,
399
+ distributionNftId,
400
+ objectType,
401
+ instance
402
+ ) = _getAndVerifyCaller();
403
+
404
+ if(objectType != DISTRIBUTION()) {
405
+ revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
406
+ }
407
+ }
408
+
409
+ function _getAndVerifyDistribution(NftId distributionNftId)
410
+ internal
411
+ view
412
+ returns(
413
+ address distributionAddress,
414
+ IInstance instance
415
+ )
416
+ {
417
+ IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
418
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
419
+ if (parentInfo.objectType != INSTANCE()) {
420
+ revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
421
+ }
422
+ instance = IInstance(parentInfo.objectAddress);
423
+ }
424
+
425
+ function _getAndVerifyCaller()
426
+ internal
427
+ view
428
+ returns(
429
+ address objectAddress,
430
+ NftId objectNftId,
431
+ ObjectType objectType,
432
+ IInstance instance
433
+ )
434
+ {
435
+ objectAddress = msg.sender;
436
+ objectNftId = getRegistry().getNftId(objectAddress);
437
+ if ( objectNftId.eqz()) {
438
+ revert ErrorIServiceCallerUnknown(objectAddress);
439
+ }
440
+ IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
441
+ objectType = info.objectType;
442
+
443
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
444
+ if (parentInfo.objectType != INSTANCE()) {
445
+ revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
446
+ }
447
+ instance = IInstance(parentInfo.objectAddress);
448
+ }
449
+
450
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {DistributionService} from "./DistributionService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
10
+
11
+ contract DistributionServiceManager is ProxyManager {
12
+
13
+ DistributionService private _distributionService;
14
+
15
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ DistributionService distSrv = new DistributionService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(distSrv),
25
+ data);
26
+
27
+ _distributionService = DistributionService(address(versionable));
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
+ //registryService.registerService(_distributionService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_distributionService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getDistributionService()
44
+ external
45
+ view
46
+ returns (DistributionService distributionService)
47
+ {
48
+ return _distributionService;
49
+ }
50
+
51
+ }
@@ -0,0 +1,82 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IPolicy} from "../module/IPolicy.sol";
5
+ import {IRisk} from "../module/IRisk.sol";
6
+ import {IService} from "../../shared/IService.sol";
7
+
8
+ import {NftId} from "../../types/NftId.sol";
9
+ import {ReferralId} from "../../types/Referral.sol";
10
+ import {RiskId} from "../../types/RiskId.sol";
11
+ import {Seconds} from "../../types/Seconds.sol";
12
+ import {StateId} from "../../types/StateId.sol";
13
+ import {Timestamp} from "../../types/Timestamp.sol";
14
+ import {UFixed} from "../../types/UFixed.sol";
15
+ import {Fee} from "../../types/Fee.sol";
16
+
17
+ /// @dev gif service responsible for creating applications
18
+ /// only product components may call transaction functions
19
+ interface IApplicationService is IService {
20
+
21
+ error IApplicationServicePolicyNotApplied(NftId applicationNftId);
22
+ error IApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
23
+
24
+ /// @dev creates a new application based on the specified attributes
25
+ /// may only be called by a product component
26
+ function create(
27
+ address applicationOwner,
28
+ RiskId riskId,
29
+ uint256 sumInsuredAmount,
30
+ Seconds lifetime,
31
+ NftId bundleNftId,
32
+ ReferralId referralId,
33
+ bytes memory applicationData
34
+ ) external returns (NftId applicationNftId);
35
+
36
+ /// @dev updates application attributes
37
+ /// may only be called while the application is in applied state
38
+ /// may only be called by the referenced product related to applicationNftId
39
+ function adjust(
40
+ NftId applicationNftId,
41
+ RiskId riskId,
42
+ NftId bundleNftId,
43
+ ReferralId referralId,
44
+ uint256 sumInsuredAmount,
45
+ uint256 lifetime,
46
+ bytes memory applicationData
47
+ ) external;
48
+
49
+ /// @dev creates a new application that extends the provided policy
50
+ /// lifetime will seamlessly extend referenced policy, for closed policies
51
+ /// lifetime will start at underwriting time
52
+ /// product will need to limit the time window for renewal as underwriting
53
+ /// will lock the collateral at underwriting time which might be earlier than activation time
54
+ /// policyNftId needs to refer to an underwritten (or active or closed) policy
55
+ /// may only be called by the referenced product related to policyNftId
56
+ function renew(
57
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
58
+ NftId bundleNftId // will likely need a newer bundle for underwriting
59
+ ) external returns (NftId applicationNftId);
60
+
61
+ /// @dev revokes the application represented by {policyNftId}
62
+ /// an application can only be revoked in applied state
63
+ /// only the application holder may revoke an application
64
+ function revoke(NftId policyNftId) external;
65
+
66
+ /// @dev calculates the premium amount for the specified attributes
67
+ /// also returns the various fee components involved with creating a policy
68
+ function calculatePremium(
69
+ NftId productNftId,
70
+ RiskId riskId,
71
+ uint256 sumInsuredAmount,
72
+ Seconds lifetime,
73
+ bytes memory applicationData,
74
+ NftId bundleNftId,
75
+ ReferralId referralId
76
+ )
77
+ external
78
+ view
79
+ returns (
80
+ IPolicy.Premium memory premium
81
+ );
82
+ }
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {IService} from "../../shared/IService.sol";
7
+ import {IBundle} from "../module/IBundle.sol";
8
+ import {IInstance} from "../../instance/IInstance.sol";
9
+ import {Seconds} from "../../types/Seconds.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+
12
+ interface IBundleService is IService {
13
+
14
+ event LogBundleServiceBundleActivated(NftId bundleNftId);
15
+ event LogBundleServiceBundleLocked(NftId bundleNftId);
16
+ event LogBundleServiceBundleClosed(NftId bundleNftId);
17
+
18
+ error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
19
+ error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state);
20
+ error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
21
+
22
+ function create(
23
+ address owner,
24
+ Fee memory fee,
25
+ uint256 amount,
26
+ Seconds lifetime,
27
+ bytes calldata filter
28
+ ) external returns(NftId bundleNftId);
29
+
30
+
31
+ function setFee(
32
+ NftId bundleNftId,
33
+ Fee memory fee
34
+ ) external;
35
+
36
+
37
+ function lockCollateral(
38
+ IInstance instanceNftId,
39
+ NftId policyNftId,
40
+ NftId bundleNftId,
41
+ uint256 collateralAmount,
42
+ uint256 netPremium
43
+ )
44
+ external
45
+ returns (
46
+ IBundle.BundleInfo memory bundleInfo
47
+ );
48
+
49
+ function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
50
+
51
+ function closePolicy(IInstance instance, NftId policyNftId, NftId bundleNftId, uint256 collateralAmount) external;
52
+
53
+ // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
54
+
55
+ // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
56
+
57
+ function lock(NftId bundleNftId) external;
58
+
59
+ function unlock(NftId bundleNftId) external;
60
+
61
+ function close(NftId bundleNftId) external;
62
+ }