@etherisc/gif-next 0.0.2-e9148e0-933 → 0.0.2-e922e07-736

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 (352) hide show
  1. package/README.md +136 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +774 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +879 -236
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +164 -159
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +689 -30
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +838 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +524 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +950 -281
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +568 -188
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1912 -421
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +194 -165
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +901 -1127
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +126 -159
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +420 -305
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +297 -112
  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/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +189 -177
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  48. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  54. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  56. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  58. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  60. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  62. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  64. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  66. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1221 -213
  68. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +436 -79
  70. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  72. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  74. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
  76. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  78. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  80. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +37 -251
  82. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
  84. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  86. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  88. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +209 -321
  90. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +296 -95
  92. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +218 -499
  94. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +299 -98
  96. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  98. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +242 -131
  100. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  101. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +158 -215
  102. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  103. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/Registry.sol/Registry.json +256 -226
  105. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  106. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  107. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +202 -318
  109. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -141
  111. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  112. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  113. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  115. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  120. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  121. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  124. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  125. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  126. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  132. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  133. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  138. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  140. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  142. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  143. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  145. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  152. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  154. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  158. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  159. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  160. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  163. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  164. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  166. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  169. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  171. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  173. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  176. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  178. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  180. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  182. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  184. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  186. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  189. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  193. package/contracts/components/Component.sol +221 -0
  194. package/contracts/components/Distribution.sol +200 -79
  195. package/contracts/components/IComponent.sol +68 -0
  196. package/contracts/components/IDistributionComponent.sol +44 -17
  197. package/contracts/components/IPoolComponent.sol +126 -37
  198. package/contracts/components/IProductComponent.sol +10 -5
  199. package/contracts/components/Pool.sol +288 -152
  200. package/contracts/components/Product.sol +124 -119
  201. package/contracts/instance/BundleManager.sol +125 -0
  202. package/contracts/instance/Cloneable.sol +46 -0
  203. package/contracts/instance/IInstance.sol +56 -5
  204. package/contracts/instance/IInstanceService.sol +33 -4
  205. package/contracts/instance/Instance.sol +109 -261
  206. package/contracts/instance/InstanceAccessManager.sol +87 -78
  207. package/contracts/instance/InstanceReader.sol +12 -25
  208. package/contracts/instance/InstanceService.sol +401 -104
  209. package/contracts/instance/InstanceServiceManager.sol +6 -9
  210. package/contracts/instance/ObjectManager.sol +84 -0
  211. package/contracts/instance/base/ComponentService.sol +134 -0
  212. package/contracts/instance/module/IAccess.sol +27 -18
  213. package/contracts/instance/module/IBundle.sol +2 -1
  214. package/contracts/instance/module/IDistribution.sol +2 -0
  215. package/contracts/instance/module/IPolicy.sol +30 -3
  216. package/contracts/instance/module/ISetup.sol +12 -10
  217. package/contracts/instance/service/ApplicationService.sol +349 -0
  218. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  219. package/contracts/instance/service/BundleService.sol +299 -0
  220. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  221. package/contracts/instance/service/ClaimService.sol +151 -0
  222. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  223. package/contracts/instance/service/DistributionService.sol +390 -28
  224. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  225. package/contracts/instance/service/IApplicationService.sol +82 -0
  226. package/contracts/instance/service/IBundleService.sol +55 -0
  227. package/contracts/instance/service/IClaimService.sol +61 -0
  228. package/contracts/instance/service/IDistributionService.sol +86 -0
  229. package/contracts/instance/service/IPolicyService.sol +72 -0
  230. package/contracts/instance/service/IPoolService.sol +6 -23
  231. package/contracts/instance/service/IProductService.sol +6 -73
  232. package/contracts/instance/service/PolicyService.sol +394 -0
  233. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  234. package/contracts/instance/service/PoolService.sol +38 -123
  235. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  236. package/contracts/instance/service/ProductService.sol +133 -448
  237. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  238. package/contracts/registry/ChainNft.sol +1 -1
  239. package/contracts/registry/IRegistry.sol +39 -19
  240. package/contracts/registry/IRegistryService.sol +30 -13
  241. package/contracts/registry/Registry.sol +236 -216
  242. package/contracts/registry/RegistryAccessManager.sol +216 -0
  243. package/contracts/registry/RegistryService.sol +96 -171
  244. package/contracts/registry/RegistryServiceManager.sol +21 -39
  245. package/contracts/registry/ReleaseManager.sol +322 -0
  246. package/contracts/registry/TokenRegistry.sol +22 -17
  247. package/contracts/shared/ERC165.sol +14 -12
  248. package/contracts/shared/INftOwnable.sol +11 -10
  249. package/contracts/shared/IPolicyHolder.sol +26 -0
  250. package/contracts/shared/IRegisterable.sol +4 -6
  251. package/contracts/shared/IRegistryLinked.sol +12 -0
  252. package/contracts/shared/IService.sol +4 -1
  253. package/contracts/shared/IVersionable.sol +4 -47
  254. package/contracts/shared/NftOwnable.sol +66 -80
  255. package/contracts/shared/PolicyHolder.sol +81 -0
  256. package/contracts/shared/ProxyManager.sol +100 -25
  257. package/contracts/shared/Registerable.sol +16 -32
  258. package/contracts/shared/RegistryLinked.sol +48 -0
  259. package/contracts/shared/Service.sol +25 -22
  260. package/contracts/shared/Versionable.sol +4 -92
  261. package/contracts/test/TestRegisterable.sol +1 -1
  262. package/contracts/test/TestService.sol +4 -3
  263. package/contracts/types/ClaimId.sol +52 -0
  264. package/contracts/types/DistributorType.sol +2 -2
  265. package/contracts/types/NftIdSet.sol +26 -24
  266. package/contracts/types/ObjectType.sol +9 -5
  267. package/contracts/types/PayoutId.sol +54 -0
  268. package/contracts/types/Referral.sol +4 -0
  269. package/contracts/types/RoleId.sol +19 -14
  270. package/contracts/types/Seconds.sol +54 -0
  271. package/contracts/types/Timestamp.sol +12 -13
  272. package/package.json +3 -3
  273. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  274. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  275. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  276. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  277. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  278. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  279. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  280. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  281. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  282. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  283. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  284. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  285. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  286. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  287. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  288. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  289. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  290. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  291. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  292. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  293. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  294. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  295. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  296. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  297. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  298. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  299. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  302. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  304. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  306. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  308. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  310. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  312. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  314. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  316. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  317. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  318. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  319. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  320. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  321. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  322. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  323. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  324. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  326. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  327. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  328. package/contracts/components/BaseComponent.sol +0 -91
  329. package/contracts/components/IBaseComponent.sol +0 -25
  330. package/contracts/experiment/cloning/Cloner.sol +0 -47
  331. package/contracts/experiment/errors/Require.sol +0 -38
  332. package/contracts/experiment/errors/Revert.sol +0 -44
  333. package/contracts/experiment/inheritance/A.sol +0 -53
  334. package/contracts/experiment/inheritance/B.sol +0 -28
  335. package/contracts/experiment/inheritance/C.sol +0 -34
  336. package/contracts/experiment/inheritance/IA.sol +0 -13
  337. package/contracts/experiment/inheritance/IB.sol +0 -10
  338. package/contracts/experiment/inheritance/IC.sol +0 -12
  339. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  340. package/contracts/experiment/statemachine/ISM.sol +0 -25
  341. package/contracts/experiment/statemachine/SM.sol +0 -57
  342. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  343. package/contracts/experiment/types/TypeA.sol +0 -47
  344. package/contracts/experiment/types/TypeB.sol +0 -29
  345. package/contracts/instance/AccessManagedSimple.sol +0 -115
  346. package/contracts/instance/AccessManagerSimple.sol +0 -692
  347. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  348. package/contracts/instance/base/ComponentServiceBase.sol +0 -124
  349. package/contracts/instance/base/IInstanceBase.sol +0 -23
  350. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  351. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  352. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,17 +2,17 @@
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";
11
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
+ import {Fee, FeeLib} from "../../types/Fee.sol";
13
13
  import {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
17
 
18
18
  import {IVersionable} from "../../shared/IVersionable.sol";
@@ -20,22 +20,29 @@ import {Versionable} from "../../shared/Versionable.sol";
20
20
 
21
21
  import {IService} from "../../shared/IService.sol";
22
22
  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";
23
+ import {ComponentService} from "../base/ComponentService.sol";
26
24
  import {InstanceService} from "../InstanceService.sol";
27
- import {Instance} from "../Instance.sol";
28
- import {INftOwnable} from "../../shared/INftOwnable.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";
29
35
 
30
- string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
31
36
 
32
37
  contract DistributionService is
33
- ComponentServiceBase,
38
+ ComponentService,
34
39
  IDistributionService
35
40
  {
36
41
  using NftIdLib for NftId;
37
-
38
- string public constant NAME = "DistributionService";
42
+ using TimestampLib for Timestamp;
43
+ using UFixedLib for UFixed;
44
+ using FeeLib for Fee;
45
+ using ReferralLib for ReferralId;
39
46
 
40
47
  address internal _registryAddress;
41
48
 
@@ -47,42 +54,397 @@ contract DistributionService is
47
54
  initializer
48
55
  virtual override
49
56
  {
50
- address initialOwner = address(0);
51
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
57
+ address initialOwner;
58
+ address registryAddress;
59
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
52
60
  // TODO while DistributionService is not deployed in DistributionServiceManager constructor
53
61
  // owner is DistributionServiceManager deployer
54
- _initializeService(_registryAddress, owner);
62
+ initializeService(registryAddress, owner);
63
+ registerInterface(type(IDistributionService).interfaceId);
64
+ }
55
65
 
56
- _registerInterface(type(IService).interfaceId);
57
- _registerInterface(type(IDistributionService).interfaceId);
66
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
67
+ return DISTRIBUTION();
58
68
  }
59
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());
60
83
 
61
- function getName() public pure override(IService, Service) returns(string memory name) {
62
- return NAME;
63
- }
84
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
85
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
86
+ distribution.linkToRegisteredNftId();
87
+ distributionNftId = distributionInfo.nftId;
64
88
 
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);
89
+ instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
90
+ getInstanceService().createGifTarget(instanceNftId, distributionAddress, distribution.getName());
91
+ getInstanceService().grantDistributionDefaultPermissions(instanceNftId, distributionAddress, distribution.getName());
71
92
  }
72
93
 
73
94
  function setFees(
95
+ Fee memory minDistributionOwnerFee,
74
96
  Fee memory distributionFee
75
97
  )
76
98
  external
77
99
  override
78
100
  {
101
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
102
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
103
+ }
104
+
79
105
  (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
80
106
  InstanceReader instanceReader = instance.getInstanceReader();
81
107
  NftId distributionNftId = info.nftId;
82
108
 
83
109
  ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
110
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
84
111
  distSetupInfo.distributionFee = distributionFee;
85
112
 
86
113
  instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
87
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
+
88
450
  }
@@ -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,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,55 @@
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
+ error ErrorIBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
14
+
15
+ function createBundle(
16
+ address owner,
17
+ Fee memory fee,
18
+ uint256 amount,
19
+ Seconds lifetime,
20
+ bytes calldata filter
21
+ ) external returns(NftId bundleNftId);
22
+
23
+ function setBundleFee(
24
+ NftId bundleNftId,
25
+ Fee memory fee
26
+ ) external;
27
+
28
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state) external;
29
+
30
+ function lockCollateral(
31
+ IInstance instanceNftId,
32
+ NftId policyNftId,
33
+ NftId bundleNftId,
34
+ uint256 collateralAmount,
35
+ uint256 netPremium
36
+ )
37
+ external
38
+ returns (
39
+ IBundle.BundleInfo memory bundleInfo
40
+ );
41
+
42
+ function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
43
+
44
+ function closePolicy(IInstance instance, NftId policyNftId, NftId bundleNftId, uint256 collateralAmount) external;
45
+
46
+ // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
47
+
48
+ // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
49
+
50
+ function lockBundle(NftId bundleNftId) external;
51
+
52
+ function unlockBundle(NftId bundleNftId) external;
53
+
54
+ // function closeBundle(NftId bundleNftId) external;
55
+ }