@etherisc/gif-next 0.0.2-979c9aa-391 → 0.0.2-989147f-853

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 (507) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +819 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +73 -83
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +275 -1359
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +289 -214
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +441 -2539
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -181
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +432 -280
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +427 -471
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +316 -145
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +6 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +93 -14
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -65
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  47. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  48. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  54. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  56. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +735 -0
  57. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  58. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +329 -263
  59. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  60. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  62. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  63. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  64. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  66. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +747 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  70. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +687 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +787 -0
  77. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  78. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +231 -204
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  80. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  81. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  82. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +277 -290
  83. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  84. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +254 -243
  85. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  86. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  87. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  88. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +85 -179
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +779 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  94. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +727 -0
  97. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  98. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  100. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +679 -0
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +283 -131
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +268 -255
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +302 -231
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +238 -0
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +313 -354
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +322 -138
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +846 -0
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +132 -57
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  124. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  125. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  126. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  127. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  132. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IComponent.sol/IComponent.json} +249 -82
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -61
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  164. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → staking/IStakingService.sol/IStakingService.json} +209 -207
  165. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  166. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  167. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  168. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
  169. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  171. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  173. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  175. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  177. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  179. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  181. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  183. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  185. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  187. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  189. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  191. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  192. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  193. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  195. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  197. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  198. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  199. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  201. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
  203. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  205. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  207. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  208. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  209. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  210. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  211. package/contracts/distribution/Distribution.sol +285 -0
  212. package/contracts/distribution/DistributionService.sol +351 -0
  213. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +20 -20
  214. package/contracts/distribution/IDistributionComponent.sol +71 -0
  215. package/contracts/distribution/IDistributionService.sol +87 -0
  216. package/contracts/instance/BundleManager.sol +22 -25
  217. package/contracts/instance/IInstance.sol +56 -41
  218. package/contracts/instance/IInstanceService.sol +51 -16
  219. package/contracts/instance/Instance.sol +149 -196
  220. package/contracts/instance/InstanceAccessManager.sol +406 -167
  221. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  222. package/contracts/instance/InstanceReader.sol +102 -49
  223. package/contracts/instance/InstanceService.sol +214 -207
  224. package/contracts/instance/InstanceServiceManager.sol +15 -15
  225. package/contracts/instance/InstanceStore.sol +211 -0
  226. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +8 -3
  227. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  228. package/contracts/instance/base/ILifecycle.sol +3 -3
  229. package/contracts/instance/base/KeyValueStore.sol +44 -47
  230. package/contracts/instance/base/Lifecycle.sol +28 -7
  231. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +16 -35
  232. package/contracts/instance/module/IAccess.sol +25 -19
  233. package/contracts/instance/module/IBundle.sol +11 -8
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +7 -4
  236. package/contracts/instance/module/IPolicy.sol +50 -17
  237. package/contracts/instance/module/IRisk.sol +1 -1
  238. package/contracts/instance/module/ISetup.sol +9 -22
  239. package/contracts/instance/module/ITreasury.sol +2 -2
  240. package/contracts/pool/BundleService.sol +384 -0
  241. package/contracts/{instance/service → pool}/BundleServiceManager.sol +19 -19
  242. package/contracts/pool/IBundleService.sol +118 -0
  243. package/contracts/pool/IPoolComponent.sol +114 -0
  244. package/contracts/pool/IPoolService.sol +114 -0
  245. package/contracts/pool/Pool.sol +302 -0
  246. package/contracts/pool/PoolService.sol +416 -0
  247. package/contracts/{instance/service → pool}/PoolServiceManager.sol +19 -19
  248. package/contracts/product/ApplicationService.sol +187 -0
  249. package/contracts/product/ApplicationServiceManager.sol +38 -0
  250. package/contracts/product/ClaimService.sol +443 -0
  251. package/contracts/product/ClaimServiceManager.sol +38 -0
  252. package/contracts/product/IApplicationService.sol +62 -0
  253. package/contracts/product/IClaimService.sol +93 -0
  254. package/contracts/product/IPolicyService.sol +80 -0
  255. package/contracts/product/IPricingService.sol +37 -0
  256. package/contracts/product/IProductComponent.sol +41 -0
  257. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  258. package/contracts/product/PolicyService.sol +378 -0
  259. package/contracts/{instance/service → product}/PolicyServiceManager.sol +16 -13
  260. package/contracts/product/PricingService.sol +276 -0
  261. package/contracts/product/PricingServiceManager.sol +42 -0
  262. package/contracts/product/Product.sol +379 -0
  263. package/contracts/product/ProductService.sol +212 -0
  264. package/contracts/{instance/service → product}/ProductServiceManager.sol +16 -13
  265. package/contracts/registry/ChainNft.sol +9 -1
  266. package/contracts/registry/IRegistry.sol +52 -27
  267. package/contracts/registry/IRegistryService.sol +36 -28
  268. package/contracts/registry/ITransferInterceptor.sol +1 -0
  269. package/contracts/registry/Registry.sol +253 -234
  270. package/contracts/registry/RegistryAccessManager.sol +132 -0
  271. package/contracts/registry/RegistryService.sol +81 -208
  272. package/contracts/registry/RegistryServiceManager.sol +34 -42
  273. package/contracts/registry/ReleaseManager.sol +380 -0
  274. package/contracts/registry/TokenRegistry.sol +22 -17
  275. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  276. package/contracts/shared/Component.sol +271 -0
  277. package/contracts/shared/ComponentService.sol +141 -0
  278. package/contracts/shared/ERC165.sol +14 -12
  279. package/contracts/shared/IComponent.sol +90 -0
  280. package/contracts/shared/INftOwnable.sol +12 -11
  281. package/contracts/shared/IPolicyHolder.sol +40 -0
  282. package/contracts/shared/IRegisterable.sol +4 -6
  283. package/contracts/shared/IRegistryLinked.sol +11 -0
  284. package/contracts/shared/IService.sol +7 -4
  285. package/contracts/shared/IVersionable.sol +5 -48
  286. package/contracts/shared/NftOwnable.sol +64 -80
  287. package/contracts/shared/PolicyHolder.sol +94 -0
  288. package/contracts/shared/ProxyManager.sol +126 -25
  289. package/contracts/shared/Registerable.sol +26 -41
  290. package/contracts/shared/RegistryLinked.sol +43 -0
  291. package/contracts/shared/Service.sol +41 -24
  292. package/contracts/shared/TokenHandler.sol +14 -6
  293. package/contracts/shared/Versionable.sol +4 -92
  294. package/contracts/staking/IStakingService.sol +102 -0
  295. package/contracts/staking/StakingService.sol +169 -0
  296. package/contracts/staking/StakingServiceManager.sol +40 -0
  297. package/contracts/type/Amount.sol +109 -0
  298. package/contracts/{types → type}/Blocknumber.sol +1 -0
  299. package/contracts/type/ClaimId.sol +75 -0
  300. package/contracts/{types → type}/DistributorType.sol +2 -2
  301. package/contracts/{types → type}/Fee.sol +17 -8
  302. package/contracts/{types → type}/NftId.sol +8 -0
  303. package/contracts/{types → type}/NftIdSet.sol +1 -1
  304. package/contracts/{types → type}/ObjectType.sol +17 -7
  305. package/contracts/type/PayoutId.sol +82 -0
  306. package/contracts/{types → type}/Referral.sol +4 -0
  307. package/contracts/type/RoleId.sol +139 -0
  308. package/contracts/type/Seconds.sol +54 -0
  309. package/contracts/{types → type}/StateId.sol +7 -2
  310. package/contracts/{types → type}/Timestamp.sol +18 -13
  311. package/contracts/{types → type}/UFixed.sol +1 -0
  312. package/contracts/{types → type}/Version.sol +1 -0
  313. package/package.json +3 -3
  314. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  315. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  316. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -772
  317. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -384
  319. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -275
  323. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  324. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  325. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  326. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -967
  327. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  328. package/artifacts/contracts/components/Product.sol/Product.json +0 -883
  329. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  331. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  333. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  335. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  337. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  339. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  341. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  343. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  345. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  347. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  349. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  352. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  354. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  360. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  362. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  364. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  365. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  366. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  367. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  368. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  369. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  370. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  371. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  372. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  373. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  374. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  375. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  376. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -285
  377. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  378. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  379. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  380. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  381. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -923
  382. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  383. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -440
  384. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  385. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  386. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  387. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -684
  388. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  389. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -428
  390. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  391. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  392. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  393. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -446
  394. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  395. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  396. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  397. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -984
  399. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  400. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -464
  401. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  402. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -718
  403. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  404. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -428
  405. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  406. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -768
  407. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  408. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -420
  409. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  410. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  411. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  412. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  413. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  414. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  415. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  416. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  417. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  418. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  419. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  420. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  421. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  422. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  423. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  424. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  425. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  426. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  427. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  428. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  429. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  430. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  431. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  432. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  433. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  434. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  435. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  436. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  437. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  438. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  439. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  440. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  441. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  442. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  443. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  444. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  445. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  446. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  447. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  448. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  449. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  450. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  451. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  452. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  453. package/contracts/components/BaseComponent.sol +0 -148
  454. package/contracts/components/Distribution.sol +0 -163
  455. package/contracts/components/IBaseComponent.sol +0 -32
  456. package/contracts/components/IDistributionComponent.sol +0 -44
  457. package/contracts/components/IPoolComponent.sol +0 -66
  458. package/contracts/components/IProductComponent.sol +0 -35
  459. package/contracts/components/Pool.sol +0 -271
  460. package/contracts/components/Product.sol +0 -292
  461. package/contracts/experiment/cloning/Cloner.sol +0 -47
  462. package/contracts/experiment/errors/Require.sol +0 -38
  463. package/contracts/experiment/errors/Revert.sol +0 -44
  464. package/contracts/experiment/inheritance/A.sol +0 -53
  465. package/contracts/experiment/inheritance/B.sol +0 -28
  466. package/contracts/experiment/inheritance/C.sol +0 -34
  467. package/contracts/experiment/inheritance/IA.sol +0 -13
  468. package/contracts/experiment/inheritance/IB.sol +0 -10
  469. package/contracts/experiment/inheritance/IC.sol +0 -12
  470. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  471. package/contracts/experiment/statemachine/ISM.sol +0 -25
  472. package/contracts/experiment/statemachine/SM.sol +0 -57
  473. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  474. package/contracts/experiment/types/TypeA.sol +0 -47
  475. package/contracts/experiment/types/TypeB.sol +0 -29
  476. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  477. package/contracts/instance/IInstanceBase.sol +0 -26
  478. package/contracts/instance/InstanceBase.sol +0 -41
  479. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  480. package/contracts/instance/base/IInstanceBase.sol +0 -23
  481. package/contracts/instance/service/BundleService.sol +0 -260
  482. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  483. package/contracts/instance/service/DistributionService.sol +0 -118
  484. package/contracts/instance/service/IBundleService.sol +0 -45
  485. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  486. package/contracts/instance/service/IDistributionService.sol +0 -12
  487. package/contracts/instance/service/IPolicyService.sol +0 -87
  488. package/contracts/instance/service/IPoolService.sol +0 -20
  489. package/contracts/instance/service/PolicyService.sol +0 -508
  490. package/contracts/instance/service/PoolService.sol +0 -124
  491. package/contracts/instance/service/ProductService.sol +0 -173
  492. package/contracts/shared/ContractDeployerLib.sol +0 -72
  493. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  494. package/contracts/test/TestFee.sol +0 -25
  495. package/contracts/test/TestRegisterable.sol +0 -18
  496. package/contracts/test/TestRoleId.sol +0 -14
  497. package/contracts/test/TestService.sol +0 -24
  498. package/contracts/test/TestToken.sol +0 -26
  499. package/contracts/test/TestVersion.sol +0 -44
  500. package/contracts/test/TestVersionable.sol +0 -17
  501. package/contracts/test/Usdc.sol +0 -26
  502. package/contracts/types/ChainId.sol +0 -38
  503. package/contracts/types/NumberId.sol +0 -52
  504. package/contracts/types/RoleId.sol +0 -91
  505. /package/contracts/{types → type}/AddressSet.sol +0 -0
  506. /package/contracts/{types → type}/Key32.sol +0 -0
  507. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -0,0 +1,351 @@
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 "../instance/InstanceAccessManager.sol";
7
+ import {InstanceReader} from "../instance/InstanceReader.sol";
8
+ import {ISetup} from "../instance/module/ISetup.sol";
9
+ import {IPolicy} from "../instance/module/IPolicy.sol";
10
+
11
+ import {Amount, AmountLib} from "../type/Amount.sol";
12
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
13
+ import {Fee, FeeLib} from "../type/Fee.sol";
14
+ import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../type/RoleId.sol";
15
+ import {KEEP_STATE} from "../type/StateId.sol";
16
+ import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, PRICE} from "../type/ObjectType.sol";
17
+ import {Version, VersionLib} from "../type/Version.sol";
18
+ import {RoleId} from "../type/RoleId.sol";
19
+
20
+ import {IVersionable} from "../shared/IVersionable.sol";
21
+ import {Versionable} from "../shared/Versionable.sol";
22
+
23
+ import {IService} from "../shared/IService.sol";
24
+ import {Service} from "../shared/Service.sol";
25
+ import {ComponentService} from "../shared/ComponentService.sol";
26
+ import {InstanceService} from "../instance/InstanceService.sol";
27
+ import {IComponent} from "../shared/IComponent.sol";
28
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
29
+ import {IDistributionService} from "./IDistributionService.sol";
30
+ import {IPricingService} from "../product/IPricingService.sol";
31
+
32
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
33
+ import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
34
+ import {ReferralId, ReferralStatus, ReferralLib} from "../type/Referral.sol";
35
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
36
+ import {Key32} from "../type/Key32.sol";
37
+ import {IDistribution} from "../instance/module/IDistribution.sol";
38
+ import {InstanceStore} from "../instance/InstanceStore.sol";
39
+
40
+
41
+ contract DistributionService is
42
+ ComponentService,
43
+ IDistributionService
44
+ {
45
+ using NftIdLib for NftId;
46
+ using TimestampLib for Timestamp;
47
+ using UFixedLib for UFixed;
48
+ using FeeLib for Fee;
49
+ using ReferralLib for ReferralId;
50
+
51
+ address internal _registryAddress;
52
+
53
+ function _initialize(
54
+ address owner,
55
+ bytes memory data
56
+ )
57
+ internal
58
+ initializer
59
+ virtual override
60
+ {
61
+ (
62
+ address registryAddress,,
63
+ //address managerAddress
64
+ address authority
65
+ ) = abi.decode(data, (address, address, address));
66
+
67
+ initializeService(registryAddress, authority, owner);
68
+ registerInterface(type(IDistributionService).interfaceId);
69
+ }
70
+
71
+ function getDomain() public pure override returns(ObjectType) {
72
+ return DISTRIBUTION();
73
+ }
74
+
75
+ function register(address distributionAddress)
76
+ external
77
+ returns(NftId distributionNftId)
78
+ {
79
+ (
80
+ IComponent component,
81
+ address owner,
82
+ IInstance instance,
83
+ NftId instanceNftId
84
+ ) = _checkComponentForRegistration(
85
+ distributionAddress,
86
+ DISTRIBUTION(),
87
+ DISTRIBUTION_OWNER_ROLE());
88
+
89
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
90
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
91
+ distribution.linkToRegisteredNftId();
92
+ distributionNftId = distributionInfo.nftId;
93
+
94
+ instance.getInstanceStore().createDistributionSetup(distributionNftId, distribution.getSetupInfo());
95
+ // TODO move to distribution?
96
+ bytes4[][] memory selectors = new bytes4[][](2);
97
+ selectors[0] = new bytes4[](1);
98
+ // TODO check if array size should be 1 instead of 2
99
+ selectors[1] = new bytes4[](2);
100
+
101
+ selectors[0][0] = IDistributionComponent.setFees.selector;
102
+ selectors[1][0] = IDistributionComponent.processRenewal.selector;
103
+
104
+ RoleId[] memory roles = new RoleId[](2);
105
+ roles[0] = DISTRIBUTION_OWNER_ROLE();
106
+ roles[1] = PRODUCT_SERVICE_ROLE();
107
+
108
+ getInstanceService().createGifTarget(
109
+ instanceNftId,
110
+ distributionAddress,
111
+ distribution.getName(),
112
+ selectors,
113
+ roles);
114
+ }
115
+
116
+ function setFees(
117
+ Fee memory minDistributionOwnerFee,
118
+ Fee memory distributionFee
119
+ )
120
+ external
121
+ override
122
+ {
123
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
124
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
125
+ }
126
+
127
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
128
+ InstanceReader instanceReader = instance.getInstanceReader();
129
+
130
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
131
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
132
+ distSetupInfo.distributionFee = distributionFee;
133
+
134
+ instance.getInstanceStore().updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
135
+ }
136
+
137
+ function createDistributorType(
138
+ string memory name,
139
+ UFixed minDiscountPercentage,
140
+ UFixed maxDiscountPercentage,
141
+ UFixed commissionPercentage,
142
+ uint32 maxReferralCount,
143
+ uint32 maxReferralLifetime,
144
+ bool allowSelfReferrals,
145
+ bool allowRenewals,
146
+ bytes memory data
147
+ )
148
+ external
149
+ returns (DistributorType distributorType)
150
+ {
151
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
152
+
153
+ {
154
+ ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
155
+ UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
156
+ UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
157
+ if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
158
+ revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
159
+ }
160
+ }
161
+
162
+ distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
163
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
164
+ name,
165
+ minDiscountPercentage,
166
+ maxDiscountPercentage,
167
+ commissionPercentage,
168
+ maxReferralCount,
169
+ maxReferralLifetime,
170
+ allowSelfReferrals,
171
+ allowRenewals,
172
+ data);
173
+
174
+ instance.getInstanceStore().createDistributorType(distributorType, info);
175
+ }
176
+
177
+
178
+ function createDistributor(
179
+ address distributor,
180
+ DistributorType distributorType,
181
+ bytes memory data
182
+ )
183
+ external
184
+ virtual
185
+ returns (NftId distributorNftId)
186
+ {
187
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
188
+
189
+ distributorNftId = getRegistryService().registerDistributor(
190
+ IRegistry.ObjectInfo(
191
+ zeroNftId(),
192
+ distributionNftId,
193
+ DISTRIBUTOR(),
194
+ true, // intercepting property for bundles is defined on pool
195
+ address(0),
196
+ distributor,
197
+ ""
198
+ ));
199
+
200
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
201
+ distributorType,
202
+ true, // active
203
+ data,
204
+ AmountLib.zero(),
205
+ 0);
206
+
207
+ instance.getInstanceStore().createDistributor(distributorNftId, info);
208
+ }
209
+
210
+ // function updateDistributorType(
211
+ // NftId distributorNftId,
212
+ // DistributorType distributorType,
213
+ // bytes memory data
214
+ // )
215
+ // external
216
+ // virtual
217
+ // {
218
+ // (, IInstance instance) = _getAndVerifyCallingDistribution();
219
+ // InstanceReader instanceReader = instance.getInstanceReader();
220
+ // IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
221
+ // distributorInfo.distributorType = distributorType;
222
+ // distributorInfo.data = data;
223
+ // instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
224
+ // }
225
+
226
+
227
+ function createReferral(
228
+ NftId distributorNftId,
229
+ string memory code,
230
+ UFixed discountPercentage,
231
+ uint32 maxReferrals,
232
+ Timestamp expiryAt,
233
+ bytes memory data
234
+ )
235
+ external
236
+ virtual
237
+ returns (ReferralId referralId)
238
+ {
239
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
240
+
241
+ if (bytes(code).length == 0) {
242
+ revert ErrorIDistributionServiceInvalidReferral(code);
243
+ }
244
+ if (expiryAt.eqz()) {
245
+ revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
246
+ }
247
+
248
+ InstanceReader instanceReader = instance.getInstanceReader();
249
+ DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
250
+ IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
251
+
252
+ if (distributorTypeData.maxReferralCount < maxReferrals) {
253
+ revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
254
+ }
255
+ if (distributorTypeData.minDiscountPercentage > discountPercentage) {
256
+ revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
257
+ }
258
+ if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
259
+ revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
260
+ }
261
+ if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
262
+ revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
263
+ }
264
+
265
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
266
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
267
+ distributorNftId,
268
+ code,
269
+ discountPercentage,
270
+ maxReferrals,
271
+ 0, // used referrals
272
+ expiryAt,
273
+ data
274
+ );
275
+
276
+ instance.getInstanceStore().createReferral(referralId, info);
277
+ return referralId;
278
+ }
279
+
280
+ function processSale(
281
+ NftId distributionNftId, // assume always of distribution type
282
+ ReferralId referralId,
283
+ IPolicy.Premium memory premium,
284
+ Amount transferredDistributionFeeAmount
285
+ )
286
+ external
287
+ virtual
288
+ restricted
289
+ {
290
+ bool isReferral = ! referralId.eqz();
291
+ bool referralValid = referralIsValid(distributionNftId, referralId);
292
+
293
+ if (isReferral && ! referralValid) {
294
+ revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
295
+ }
296
+
297
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
298
+ InstanceReader reader = instance.getInstanceReader();
299
+ InstanceStore store = instance.getInstanceStore();
300
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
301
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
302
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
303
+
304
+ Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
305
+ Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
306
+
307
+ if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
308
+ revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
309
+ }
310
+
311
+
312
+ if (distributionOwnerFee.gtz()) {
313
+ setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
314
+ store.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
315
+ }
316
+
317
+ if (isReferral) {
318
+ referralInfo.usedReferrals += 1;
319
+ store.updateReferral(referralId, referralInfo, KEEP_STATE());
320
+
321
+ if (commissionAmount.gtz()) {
322
+ distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
323
+ distributorInfo.numPoliciesSold += 1;
324
+ store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
325
+ }
326
+ }
327
+ }
328
+
329
+ // TODO: zero should return false
330
+ function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
331
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
332
+ IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
333
+
334
+ if (info.distributorNftId.eqz()) {
335
+ return false;
336
+ }
337
+
338
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
339
+ isValid = isValid && info.usedReferrals < info.maxReferrals;
340
+ }
341
+
342
+ function _getInstanceForDistribution(NftId distributionNftId)
343
+ internal
344
+ view
345
+ returns(IInstance instance)
346
+ {
347
+ NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
348
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
349
+ return IInstance(instanceAddress);
350
+ }
351
+ }
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../../shared/IVersionable.sol";
5
- import {ProxyManager} from "../../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
6
  import {DistributionService} from "./DistributionService.sol";
7
- import {Registry} from "../../registry/Registry.sol";
8
- import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../type/ObjectType.sol";
10
10
 
11
11
  contract DistributionServiceManager is ProxyManager {
12
12
 
@@ -14,22 +14,25 @@ contract DistributionServiceManager is ProxyManager {
14
14
 
15
15
  /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
16
  constructor(
17
- address registryAddress
18
- )
19
- ProxyManager()
17
+ address authority,
18
+ address registryAddress,
19
+ bytes32 salt
20
+ )
21
+ ProxyManager(registryAddress)
20
22
  {
21
- DistributionService distSrv = new DistributionService();
22
- bytes memory data = abi.encode(registryAddress, address(this));
23
- IVersionable versionable = deploy(
23
+ DistributionService distSrv = new DistributionService{salt: salt}();
24
+ bytes memory data = abi.encode(registryAddress, address(this), authority);
25
+ IVersionable versionable = deployDetermenistic(
24
26
  address(distSrv),
25
- data);
27
+ data,
28
+ salt);
26
29
 
27
30
  _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
31
+
32
+ // TODO `thi` must have a role or own nft to register service
33
+ //Registry registry = Registry(registryAddress);
34
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
35
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
36
  //registryService.registerService(_distributionService);
34
37
 
35
38
  // TODO no nft to link yet
@@ -37,9 +40,6 @@ contract DistributionServiceManager is ProxyManager {
37
40
  //_linkToNftOwnable(
38
41
  // address(registryAddress),
39
42
  // address(_distributionService));
40
-
41
- // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -0,0 +1,71 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Fee} from "../type/Fee.sol";
5
+ import {IComponent} from "../shared/IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {ReferralId, ReferralStatus} from "../type/Referral.sol";
8
+ import {NftId} from "../type/NftId.sol";
9
+ import {DistributorType} from "../type/DistributorType.sol";
10
+ import {UFixed} from "../type/UFixed.sol";
11
+ import {Timestamp} from "../type/Timestamp.sol";
12
+
13
+ interface IDistributionComponent is IComponent {
14
+
15
+ event LogDistributorUpdated(address to, address caller);
16
+
17
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
18
+
19
+ function setFees(
20
+ Fee memory minDistributionOwnerFee,
21
+ Fee memory distributionFee
22
+ ) external;
23
+
24
+ function createDistributorType(
25
+ string memory name,
26
+ UFixed minDiscountPercentage,
27
+ UFixed maxDiscountPercentage,
28
+ UFixed commissionPercentage,
29
+ uint32 maxReferralCount,
30
+ uint32 maxReferralLifetime,
31
+ bool allowSelfReferrals,
32
+ bool allowRenewals,
33
+ bytes memory data
34
+ ) external returns (DistributorType distributorType);
35
+
36
+ function createDistributor(
37
+ address distributor,
38
+ DistributorType distributorType,
39
+ bytes memory data
40
+ ) external returns(NftId distributorNftId);
41
+
42
+ function updateDistributorType(
43
+ NftId distributorNftId,
44
+ DistributorType distributorType,
45
+ bytes memory data
46
+ ) external;
47
+
48
+ function calculateRenewalFeeAmount(
49
+ ReferralId referralId,
50
+ uint256 netPremiumAmount
51
+ ) external view returns (uint256 feeAmount);
52
+
53
+ /// @dev callback from product service when a policy is renews for a specific referralId
54
+ function processRenewal(
55
+ ReferralId referralId,
56
+ uint256 feeAmount
57
+ ) external;
58
+
59
+ function getDiscountPercentage(
60
+ string memory referralCode
61
+ ) external view returns (UFixed discountPercentage, ReferralStatus status);
62
+
63
+ function getDistributionFee() external view returns (Fee memory distibutionFee);
64
+
65
+ function getReferralId(
66
+ string memory referralCode
67
+ ) external returns (ReferralId referralId);
68
+
69
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
70
+ function isVerifying() external view returns (bool verifying);
71
+ }
@@ -0,0 +1,87 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {NftId} from "../type/NftId.sol";
6
+ import {Fee} from "../type/Fee.sol";
7
+ import {IPolicy} from "../instance/module/IPolicy.sol";
8
+ import {IService} from "../shared/IService.sol";
9
+ import {UFixed} from "../type/UFixed.sol";
10
+ import {DistributorType} from "../type/DistributorType.sol";
11
+ import {ReferralId} from "../type/Referral.sol";
12
+ import {Timestamp} from "../type/Timestamp.sol";
13
+
14
+
15
+ interface IDistributionService is IService {
16
+ error ErrorDistributionServiceCallerNotRegistered(address caller);
17
+ error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
18
+ error ErrorIDistributionServiceCallerNotDistributor(address caller);
19
+ error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
20
+ error ErrorIDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
21
+ error ErrorIDistributionServiceDiscountTooLow(uint256 minDiscountPercentage, uint256 discountPercentage);
22
+ error ErrorIDistributionServiceDiscountTooHigh(uint256 maxDiscountPercentage, uint256 discountPercentage);
23
+ error ErrorIDistributionServiceExpiryTooLong(uint256 maxReferralLifetime, uint256 expiryAt);
24
+ error ErrorIDistributionServiceInvalidReferral(string code);
25
+ error ErrorIDistributionServiceExpirationInvalid(Timestamp expiryAt);
26
+ error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
27
+ error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
28
+ error ErrorIDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
29
+ error ErrorIDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
30
+ error ErrorDistributionServiceInvalidFeeTransferred(Amount transferredDistributionFeeAmount, Amount expectedDistributionFeeAmount);
31
+
32
+ function setFees(
33
+ Fee memory minDistributionOwnerFee,
34
+ Fee memory distributionFee
35
+ ) external;
36
+
37
+ function createDistributorType(
38
+ string memory name,
39
+ UFixed minDiscountPercentage,
40
+ UFixed maxDiscountPercentage,
41
+ UFixed commissionPercentage,
42
+ uint32 maxReferralCount,
43
+ uint32 maxReferralLifetime,
44
+ bool allowSelfReferrals,
45
+ bool allowRenewals,
46
+ bytes memory data
47
+ )
48
+ external
49
+ returns (DistributorType distributorType);
50
+
51
+ function createDistributor(
52
+ address distributor,
53
+ DistributorType distributorType,
54
+ bytes memory data
55
+ ) external returns (NftId distributorNftId);
56
+
57
+ // TODO re-enable and reorganize (service contract too large)
58
+ // function updateDistributorType(
59
+ // NftId distributorNftId,
60
+ // DistributorType distributorType,
61
+ // bytes memory data
62
+ // ) external;
63
+
64
+ function createReferral(
65
+ NftId distributorNftId,
66
+ string memory code,
67
+ UFixed discountPercentage,
68
+ uint32 maxReferrals,
69
+ Timestamp expiryAt,
70
+ bytes memory data
71
+ )
72
+ external
73
+ returns (ReferralId referralId);
74
+
75
+ /// @dev callback from product service when selling a policy for a specific referralId
76
+ function processSale(
77
+ NftId distributionNftId,
78
+ ReferralId referralId,
79
+ IPolicy.Premium memory premium,
80
+ Amount transferredDistributionFeeAmount
81
+ ) external;
82
+
83
+ function referralIsValid(
84
+ NftId distributorNftId,
85
+ ReferralId referralId
86
+ ) external view returns (bool isValid);
87
+ }