@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-ff282a4-523

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 (431) hide show
  1. package/README.md +359 -8
  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 +780 -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 +4 -0
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +284 -523
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +616 -0
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +529 -601
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1348 -0
  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 +4 -0
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1574 -0
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +979 -0
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +656 -0
  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/base/Cloneable.sol/Cloneable.json +190 -0
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +478 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  37. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +581 -0
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  46. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  52. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  54. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  58. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +735 -0
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  70. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  71. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  85. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +493 -0
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +651 -0
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +510 -0
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/product/IProductService.sol/IProductService.json +442 -0
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  104. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  105. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +784 -0
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +604 -71
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +919 -0
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +702 -72
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1211 -0
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +620 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  130. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  131. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  132. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  133. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  134. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  138. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +636 -0
  140. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
  142. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +175 -0
  146. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  147. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
  148. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  149. package/artifacts/contracts/shared/IService.sol/IService.json +327 -0
  150. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  152. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  153. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
  154. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  155. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  156. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  157. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
  158. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +339 -0
  160. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  161. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  162. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Service.sol/Service.json +488 -0
  164. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  165. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +114 -0
  166. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  167. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  168. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  169. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  170. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  171. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +309 -0
  172. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  173. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +545 -0
  174. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  175. package/artifacts/contracts/staking/Staking.sol/Staking.json +497 -0
  176. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  177. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +623 -0
  178. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  179. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +797 -0
  180. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  181. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +632 -0
  182. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  183. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  184. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  185. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  186. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  187. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +174 -0
  188. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  190. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  191. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  192. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  193. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  194. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  195. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  196. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  198. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  200. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +92 -0
  202. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  204. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  206. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +156 -0
  210. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  211. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  212. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +92 -0
  214. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  215. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +280 -0
  216. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/type/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/distribution/Distribution.sol +285 -0
  225. package/contracts/distribution/DistributionService.sol +349 -0
  226. package/contracts/distribution/DistributionServiceManager.sol +51 -0
  227. package/contracts/distribution/IDistributionComponent.sol +71 -0
  228. package/contracts/distribution/IDistributionService.sol +87 -0
  229. package/contracts/instance/BundleManager.sol +126 -0
  230. package/contracts/instance/IInstance.sol +72 -15
  231. package/contracts/instance/IInstanceService.sol +73 -0
  232. package/contracts/instance/Instance.sol +210 -44
  233. package/contracts/instance/InstanceAccessManager.sol +543 -0
  234. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  235. package/contracts/instance/InstanceReader.sol +368 -0
  236. package/contracts/instance/InstanceService.sol +308 -0
  237. package/contracts/instance/InstanceServiceManager.sol +54 -0
  238. package/contracts/instance/InstanceStore.sol +211 -0
  239. package/contracts/instance/base/Cloneable.sol +51 -0
  240. package/contracts/instance/base/IKeyValueStore.sol +53 -0
  241. package/contracts/instance/base/ILifecycle.sol +30 -0
  242. package/contracts/instance/base/KeyValueStore.sol +169 -0
  243. package/contracts/instance/base/Lifecycle.sol +121 -0
  244. package/contracts/instance/base/ObjectManager.sol +82 -0
  245. package/contracts/instance/module/IAccess.sol +54 -0
  246. package/contracts/instance/module/IBundle.sol +23 -0
  247. package/contracts/instance/module/IComponents.sol +41 -0
  248. package/contracts/instance/module/IDistribution.sol +42 -0
  249. package/contracts/instance/module/IPolicy.sol +78 -0
  250. package/contracts/instance/module/IRisk.sol +11 -0
  251. package/contracts/instance/module/ISetup.sol +33 -0
  252. package/contracts/instance/module/ITreasury.sol +23 -0
  253. package/contracts/pool/BundleService.sol +382 -0
  254. package/contracts/pool/BundleServiceManager.sol +51 -0
  255. package/contracts/pool/IBundleService.sol +118 -0
  256. package/contracts/pool/IPoolComponent.sol +114 -0
  257. package/contracts/pool/IPoolService.sol +114 -0
  258. package/contracts/pool/Pool.sol +302 -0
  259. package/contracts/pool/PoolService.sol +403 -0
  260. package/contracts/pool/PoolServiceManager.sol +51 -0
  261. package/contracts/product/ApplicationService.sol +186 -0
  262. package/contracts/product/ApplicationServiceManager.sol +35 -0
  263. package/contracts/product/ClaimService.sol +442 -0
  264. package/contracts/product/ClaimServiceManager.sol +35 -0
  265. package/contracts/product/IApplicationService.sol +62 -0
  266. package/contracts/product/IClaimService.sol +93 -0
  267. package/contracts/product/IPolicyService.sol +80 -0
  268. package/contracts/product/IPricingService.sol +37 -0
  269. package/contracts/product/IProductComponent.sol +41 -0
  270. package/contracts/product/IProductService.sol +40 -0
  271. package/contracts/product/PolicyService.sol +376 -0
  272. package/contracts/product/PolicyServiceManager.sol +54 -0
  273. package/contracts/product/PricingService.sol +275 -0
  274. package/contracts/product/PricingServiceManager.sol +51 -0
  275. package/contracts/product/Product.sol +379 -0
  276. package/contracts/product/ProductService.sol +210 -0
  277. package/contracts/product/ProductServiceManager.sol +54 -0
  278. package/contracts/registry/ChainNft.sol +216 -0
  279. package/contracts/registry/IRegistry.sol +95 -51
  280. package/contracts/registry/IRegistryService.sol +69 -0
  281. package/contracts/registry/ITransferInterceptor.sol +7 -0
  282. package/contracts/registry/Registry.sol +436 -128
  283. package/contracts/registry/RegistryAccessManager.sol +207 -0
  284. package/contracts/registry/RegistryService.sol +304 -0
  285. package/contracts/registry/RegistryServiceManager.sol +60 -0
  286. package/contracts/registry/ReleaseManager.sol +360 -0
  287. package/contracts/registry/TokenRegistry.sol +116 -0
  288. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  289. package/contracts/shared/Component.sol +271 -0
  290. package/contracts/shared/ComponentService.sol +150 -0
  291. package/contracts/shared/ERC165.sol +27 -0
  292. package/contracts/shared/IComponent.sol +90 -0
  293. package/contracts/shared/INftOwnable.sol +23 -0
  294. package/contracts/shared/IPolicyHolder.sol +40 -0
  295. package/contracts/shared/IRegisterable.sol +15 -0
  296. package/contracts/shared/IRegistryLinked.sol +11 -0
  297. package/contracts/shared/IService.sol +18 -0
  298. package/contracts/shared/IVersionable.sol +53 -0
  299. package/contracts/shared/NftOwnable.sol +118 -0
  300. package/contracts/shared/PolicyHolder.sol +94 -0
  301. package/contracts/shared/ProxyManager.sol +169 -0
  302. package/contracts/shared/Registerable.sol +75 -0
  303. package/contracts/shared/RegistryLinked.sol +43 -0
  304. package/contracts/shared/Service.sol +72 -0
  305. package/contracts/shared/TokenHandler.sol +35 -0
  306. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  307. package/contracts/shared/Versionable.sol +59 -0
  308. package/contracts/staking/IStaking.sol +15 -0
  309. package/contracts/staking/IStakingService.sol +105 -0
  310. package/contracts/staking/Staking.sol +64 -0
  311. package/contracts/staking/StakingManager.sol +44 -0
  312. package/contracts/staking/StakingService.sol +204 -0
  313. package/contracts/staking/StakingServiceManager.sol +41 -0
  314. package/contracts/type/AddressSet.sol +58 -0
  315. package/contracts/type/Amount.sol +109 -0
  316. package/contracts/type/Blocknumber.sol +119 -0
  317. package/contracts/type/ClaimId.sol +75 -0
  318. package/contracts/type/DistributorType.sol +55 -0
  319. package/contracts/type/Fee.sol +65 -0
  320. package/contracts/type/Key32.sol +50 -0
  321. package/contracts/type/NftId.sol +80 -0
  322. package/contracts/type/NftIdSet.sol +62 -0
  323. package/contracts/type/ObjectType.sol +166 -0
  324. package/contracts/type/PayoutId.sol +82 -0
  325. package/contracts/type/Referral.sol +89 -0
  326. package/contracts/type/RiskId.sol +43 -0
  327. package/contracts/type/RoleId.sol +132 -0
  328. package/contracts/type/Seconds.sol +54 -0
  329. package/contracts/type/StateId.sol +110 -0
  330. package/contracts/type/Timestamp.sol +132 -0
  331. package/contracts/type/UFixed.sol +326 -0
  332. package/contracts/type/Version.sol +108 -0
  333. package/package.json +21 -6
  334. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  335. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  336. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  337. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  338. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  339. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  340. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  341. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  342. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  343. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -195
  344. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  345. package/artifacts/contracts/components/Product.sol/Product.json +0 -213
  346. package/artifacts/contracts/experiment/A.sol/A.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/A.sol/A.json +0 -128
  348. package/artifacts/contracts/experiment/A.sol/AShared.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/A.sol/AShared.json +0 -42
  350. package/artifacts/contracts/experiment/B.sol/B.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/B.sol/B.json +0 -76
  352. package/artifacts/contracts/experiment/C.sol/C.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/C.sol/C.json +0 -89
  354. package/artifacts/contracts/experiment/IA.sol/IA.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/IA.sol/IA.json +0 -128
  356. package/artifacts/contracts/experiment/IA.sol/ISharedA.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/IA.sol/ISharedA.json +0 -37
  358. package/artifacts/contracts/experiment/IB.sol/IB.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/IB.sol/IB.json +0 -50
  360. package/artifacts/contracts/experiment/IC.sol/IC.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/IC.sol/IC.json +0 -63
  362. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  364. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  368. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  370. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  372. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  373. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  374. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  375. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  381. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  382. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  383. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  384. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  385. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  386. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  388. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  389. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  391. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  393. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  394. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  395. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  397. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  398. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  399. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  401. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  402. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  403. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  404. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  405. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  406. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  407. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  408. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  409. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  410. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  411. package/contracts/components/Component.sol +0 -62
  412. package/contracts/components/IPool.sol +0 -9
  413. package/contracts/components/IProduct.sol +0 -11
  414. package/contracts/components/Pool.sol +0 -29
  415. package/contracts/components/Product.sol +0 -65
  416. package/contracts/experiment/A.sol +0 -56
  417. package/contracts/experiment/B.sol +0 -23
  418. package/contracts/experiment/C.sol +0 -28
  419. package/contracts/experiment/IA.sol +0 -18
  420. package/contracts/experiment/IB.sol +0 -9
  421. package/contracts/experiment/IC.sol +0 -11
  422. package/contracts/instance/access/Access.sol +0 -218
  423. package/contracts/instance/access/IAccess.sol +0 -83
  424. package/contracts/instance/component/ComponentModule.sol +0 -259
  425. package/contracts/instance/component/IComponent.sol +0 -94
  426. package/contracts/instance/policy/IPolicy.sol +0 -66
  427. package/contracts/instance/policy/PolicyModule.sol +0 -106
  428. package/contracts/instance/pool/IPoolModule.sol +0 -40
  429. package/contracts/instance/pool/PoolModule.sol +0 -83
  430. package/contracts/instance/product/IProductService.sol +0 -45
  431. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,49 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "VersionPartLib",
4
+ "sourceName": "contracts/type/Version.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "VersionPart",
10
+ "name": "a",
11
+ "type": "uint8"
12
+ }
13
+ ],
14
+ "name": "toInt",
15
+ "outputs": [
16
+ {
17
+ "internalType": "uint256",
18
+ "name": "",
19
+ "type": "uint256"
20
+ }
21
+ ],
22
+ "stateMutability": "pure",
23
+ "type": "function"
24
+ },
25
+ {
26
+ "inputs": [
27
+ {
28
+ "internalType": "uint256",
29
+ "name": "a",
30
+ "type": "uint256"
31
+ }
32
+ ],
33
+ "name": "toVersionPart",
34
+ "outputs": [
35
+ {
36
+ "internalType": "VersionPart",
37
+ "name": "",
38
+ "type": "uint8"
39
+ }
40
+ ],
41
+ "stateMutability": "pure",
42
+ "type": "function"
43
+ }
44
+ ],
45
+ "bytecode": "0x60fb610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220d4e44d0551a02092949fff97b216e1f9b3b93142e68e155f5815f857f381e5e264736f6c63430008140033",
46
+ "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220d4e44d0551a02092949fff97b216e1f9b3b93142e68e155f5815f857f381e5e264736f6c63430008140033",
47
+ "linkReferences": {},
48
+ "deployedLinkReferences": {}
49
+ }
@@ -0,0 +1,285 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {DISTRIBUTION} from "../type/ObjectType.sol";
5
+ import {IDistributionService} from "./IDistributionService.sol";
6
+ import {IProductService} from "../product/IProductService.sol";
7
+ import {NftId, zeroNftId, NftIdLib, toNftId} from "../type/NftId.sol";
8
+ import {ReferralId, ReferralStatus, ReferralLib} from "../type/Referral.sol";
9
+ import {Fee, FeeLib} from "../type/Fee.sol";
10
+ import {Component} from "../shared/Component.sol";
11
+ import {IDistribution} from "../instance/module/IDistribution.sol";
12
+ import {IDistributionComponent} from "./IDistributionComponent.sol";
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+ import {IRegisterable} from "../shared/IRegisterable.sol";
15
+ import {ISetup} from "../instance/module/ISetup.sol";
16
+ import {Registerable} from "../shared/Registerable.sol";
17
+ import {TokenHandler} from "../shared/TokenHandler.sol";
18
+ import {InstanceReader} from "../instance/InstanceReader.sol";
19
+ import {UFixed} from "../type/UFixed.sol";
20
+ import {DistributorType} from "../type/DistributorType.sol";
21
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
22
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
23
+
24
+
25
+ abstract contract Distribution is
26
+ Component,
27
+ IDistributionComponent
28
+ {
29
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
30
+ bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
31
+
32
+ struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
34
+ Fee _distributionFee;
35
+ TokenHandler _tokenHandler;
36
+ IDistributionService _distributionService;
37
+ mapping(address distributor => NftId distributorNftId) _distributorNftId;
38
+ }
39
+
40
+ error ErrorDistributionAlreadyDistributor(address distributor, NftId distributorNftId);
41
+
42
+ function initializeDistribution(
43
+ address registry,
44
+ NftId instanceNftId,
45
+ string memory name,
46
+ address token,
47
+ Fee memory minDistributionOwnerFee,
48
+ Fee memory distributionFee,
49
+ address initialOwner,
50
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
51
+ )
52
+ public
53
+ virtual
54
+ onlyInitializing()
55
+ {
56
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
57
+
58
+ DistributionStorage storage $ = _getDistributionStorage();
59
+ // TODO add validation
60
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
61
+ $._distributionFee = distributionFee;
62
+ $._tokenHandler = new TokenHandler(token);
63
+ $._distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
64
+
65
+ registerInterface(type(IDistributionComponent).interfaceId);
66
+ }
67
+
68
+ function setFees(
69
+ Fee memory minDistributionOwnerFee,
70
+ Fee memory distributionFee
71
+ )
72
+ external
73
+ override
74
+ onlyOwner
75
+ restricted()
76
+ {
77
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
78
+ }
79
+
80
+ function getDistributionFee() external view returns (Fee memory distributionFee) {
81
+ DistributionStorage storage $ = _getDistributionStorage();
82
+ return $._distributionFee;
83
+ }
84
+
85
+ function createDistributorType(
86
+ string memory name,
87
+ UFixed minDiscountPercentage,
88
+ UFixed maxDiscountPercentage,
89
+ UFixed commissionPercentage,
90
+ uint32 maxReferralCount,
91
+ uint32 maxReferralLifetime,
92
+ bool allowSelfReferrals,
93
+ bool allowRenewals,
94
+ bytes memory data
95
+ )
96
+ public
97
+ returns (DistributorType distributorType)
98
+ {
99
+ DistributionStorage storage $ = _getDistributionStorage();
100
+ distributorType = $._distributionService.createDistributorType(
101
+ name,
102
+ minDiscountPercentage,
103
+ maxDiscountPercentage,
104
+ commissionPercentage,
105
+ maxReferralCount,
106
+ maxReferralLifetime,
107
+ allowSelfReferrals,
108
+ allowRenewals,
109
+ data);
110
+ }
111
+
112
+ function createDistributor(
113
+ address distributor,
114
+ DistributorType distributorType,
115
+ bytes memory data
116
+ )
117
+ public
118
+ returns(NftId distributorNftId)
119
+ {
120
+ DistributionStorage storage $ = _getDistributionStorage();
121
+ if($._distributorNftId[distributor].gtz()) {
122
+ revert ErrorDistributionAlreadyDistributor(distributor, $._distributorNftId[distributor]);
123
+ }
124
+
125
+ distributorNftId = $._distributionService.createDistributor(
126
+ distributor,
127
+ distributorType,
128
+ data);
129
+
130
+ $._distributorNftId[distributor] = distributorNftId;
131
+ }
132
+
133
+ function updateDistributorType(
134
+ NftId distributorNftId,
135
+ DistributorType distributorType,
136
+ bytes memory data
137
+ )
138
+ public
139
+ // TODO figure out what we need for authz
140
+ // and add it
141
+ {
142
+ DistributionStorage storage $ = _getDistributionStorage();
143
+ // TODO re-enable once implemented
144
+ // $._distributionService.updateDistributorType(
145
+ // distributorNftId,
146
+ // distributorType,
147
+ // data);
148
+ }
149
+
150
+ /**
151
+ * @dev lets distributors create referral codes.
152
+ * referral codes need to be unique
153
+ */
154
+ function _createReferral(
155
+ NftId distributorNftId,
156
+ string memory code,
157
+ UFixed discountPercentage,
158
+ uint32 maxReferrals,
159
+ Timestamp expiryAt,
160
+ bytes memory data
161
+ )
162
+ internal
163
+ returns (ReferralId referralId)
164
+ {
165
+ DistributionStorage storage $ = _getDistributionStorage();
166
+ referralId = $._distributionService.createReferral(
167
+ distributorNftId,
168
+ code,
169
+ discountPercentage,
170
+ maxReferrals,
171
+ expiryAt,
172
+ data);
173
+ }
174
+
175
+ function isDistributor(address candidate)
176
+ public
177
+ view
178
+ returns (bool)
179
+ {
180
+ DistributionStorage storage $ = _getDistributionStorage();
181
+ return $._distributorNftId[candidate].gtz();
182
+ }
183
+
184
+ function getDistributorNftId(address distributor)
185
+ public
186
+ view
187
+ returns (NftId distributorNftId)
188
+ {
189
+ DistributionStorage storage $ = _getDistributionStorage();
190
+ return $._distributorNftId[distributor];
191
+ }
192
+
193
+ function getDiscountPercentage(string memory referralCode)
194
+ external
195
+ view
196
+ returns (
197
+ UFixed discountPercentage,
198
+ ReferralStatus status
199
+ )
200
+ {
201
+ ReferralId referralId = getReferralId(referralCode);
202
+ return _getInstanceReader().getDiscountPercentage(referralId);
203
+ }
204
+
205
+
206
+ function getReferralId(
207
+ string memory referralCode
208
+ )
209
+ public
210
+ view
211
+ returns (ReferralId referralId)
212
+ {
213
+ return ReferralLib.toReferralId(
214
+ getNftId(),
215
+ referralCode);
216
+ }
217
+
218
+ function calculateRenewalFeeAmount(
219
+ ReferralId referralId,
220
+ uint256 netPremiumAmount
221
+ )
222
+ external
223
+ view
224
+ virtual override
225
+ returns (uint256 feeAmount)
226
+ {
227
+ // default is no fees
228
+ return 0 * netPremiumAmount;
229
+ }
230
+
231
+ function processRenewal(
232
+ ReferralId referralId,
233
+ uint256 feeAmount
234
+ )
235
+ external
236
+ onlyOwner
237
+ restricted()
238
+ virtual override
239
+ {
240
+ // default is no action
241
+ }
242
+
243
+ function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
244
+ InstanceReader reader = getInstance().getInstanceReader();
245
+ setupInfo = reader.getDistributionSetupInfo(getNftId());
246
+
247
+ // fallback to initial setup info (wallet is always != address(0))
248
+ if(setupInfo.wallet == address(0)) {
249
+ setupInfo = _getInitialSetupInfo();
250
+ }
251
+ }
252
+
253
+ function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
254
+ DistributionStorage storage $ = _getDistributionStorage();
255
+ return ISetup.DistributionSetupInfo(
256
+ zeroNftId(),
257
+ $._tokenHandler,
258
+ $._minDistributionOwnerFee,
259
+ $._distributionFee,
260
+ address(this),
261
+ 0
262
+ );
263
+ }
264
+
265
+
266
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
267
+ // keep track of distributor nft owner
268
+ emit LogDistributorUpdated(to, msg.sender);
269
+ DistributionStorage storage $ = _getDistributionStorage();
270
+ $._distributorNftId[from] = zeroNftId();
271
+ $._distributorNftId[to] = toNftId(tokenId);
272
+ }
273
+
274
+
275
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
276
+ function isVerifying() external view returns (bool verifying) {
277
+ return true;
278
+ }
279
+
280
+ function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
281
+ assembly {
282
+ $.slot := DISTRIBUTION_STORAGE_LOCATION_V1
283
+ }
284
+ }
285
+ }
@@ -0,0 +1,349 @@
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
+ address initialOwner;
62
+ address registryAddress;
63
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
64
+ // TODO while DistributionService is not deployed in DistributionServiceManager constructor
65
+ // owner is DistributionServiceManager deployer
66
+ initializeService(registryAddress, address(0), owner);
67
+ registerInterface(type(IDistributionService).interfaceId);
68
+ }
69
+
70
+ function getDomain() public pure override returns(ObjectType) {
71
+ return DISTRIBUTION();
72
+ }
73
+
74
+ function register(address distributionAddress)
75
+ external
76
+ returns(NftId distributionNftId)
77
+ {
78
+ (
79
+ IComponent component,
80
+ address owner,
81
+ IInstance instance,
82
+ NftId instanceNftId
83
+ ) = _checkComponentForRegistration(
84
+ distributionAddress,
85
+ DISTRIBUTION(),
86
+ DISTRIBUTION_OWNER_ROLE());
87
+
88
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
89
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
90
+ distribution.linkToRegisteredNftId();
91
+ distributionNftId = distributionInfo.nftId;
92
+
93
+ instance.getInstanceStore().createDistributionSetup(distributionNftId, distribution.getSetupInfo());
94
+ // TODO move to distribution?
95
+ bytes4[][] memory selectors = new bytes4[][](2);
96
+ selectors[0] = new bytes4[](1);
97
+ // TODO check if array size should be 1 instead of 2
98
+ selectors[1] = new bytes4[](2);
99
+
100
+ selectors[0][0] = IDistributionComponent.setFees.selector;
101
+ selectors[1][0] = IDistributionComponent.processRenewal.selector;
102
+
103
+ RoleId[] memory roles = new RoleId[](2);
104
+ roles[0] = DISTRIBUTION_OWNER_ROLE();
105
+ roles[1] = PRODUCT_SERVICE_ROLE();
106
+
107
+ getInstanceService().createGifTarget(
108
+ instanceNftId,
109
+ distributionAddress,
110
+ distribution.getName(),
111
+ selectors,
112
+ roles);
113
+ }
114
+
115
+ function setFees(
116
+ Fee memory minDistributionOwnerFee,
117
+ Fee memory distributionFee
118
+ )
119
+ external
120
+ override
121
+ {
122
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
123
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
124
+ }
125
+
126
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
127
+ InstanceReader instanceReader = instance.getInstanceReader();
128
+
129
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
130
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
131
+ distSetupInfo.distributionFee = distributionFee;
132
+
133
+ instance.getInstanceStore().updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
134
+ }
135
+
136
+ function createDistributorType(
137
+ string memory name,
138
+ UFixed minDiscountPercentage,
139
+ UFixed maxDiscountPercentage,
140
+ UFixed commissionPercentage,
141
+ uint32 maxReferralCount,
142
+ uint32 maxReferralLifetime,
143
+ bool allowSelfReferrals,
144
+ bool allowRenewals,
145
+ bytes memory data
146
+ )
147
+ external
148
+ returns (DistributorType distributorType)
149
+ {
150
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
151
+
152
+ {
153
+ ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
154
+ UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
155
+ UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
156
+ if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
157
+ revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
158
+ }
159
+ }
160
+
161
+ distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
162
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
163
+ name,
164
+ minDiscountPercentage,
165
+ maxDiscountPercentage,
166
+ commissionPercentage,
167
+ maxReferralCount,
168
+ maxReferralLifetime,
169
+ allowSelfReferrals,
170
+ allowRenewals,
171
+ data);
172
+
173
+ instance.getInstanceStore().createDistributorType(distributorType, info);
174
+ }
175
+
176
+
177
+ function createDistributor(
178
+ address distributor,
179
+ DistributorType distributorType,
180
+ bytes memory data
181
+ )
182
+ external
183
+ virtual
184
+ returns (NftId distributorNftId)
185
+ {
186
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
187
+
188
+ distributorNftId = getRegistryService().registerDistributor(
189
+ IRegistry.ObjectInfo(
190
+ zeroNftId(),
191
+ distributionNftId,
192
+ DISTRIBUTOR(),
193
+ true, // intercepting property for bundles is defined on pool
194
+ address(0),
195
+ distributor,
196
+ ""
197
+ ));
198
+
199
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
200
+ distributorType,
201
+ true, // active
202
+ data,
203
+ AmountLib.zero(),
204
+ 0);
205
+
206
+ instance.getInstanceStore().createDistributor(distributorNftId, info);
207
+ }
208
+
209
+ // function updateDistributorType(
210
+ // NftId distributorNftId,
211
+ // DistributorType distributorType,
212
+ // bytes memory data
213
+ // )
214
+ // external
215
+ // virtual
216
+ // {
217
+ // (, IInstance instance) = _getAndVerifyCallingDistribution();
218
+ // InstanceReader instanceReader = instance.getInstanceReader();
219
+ // IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
220
+ // distributorInfo.distributorType = distributorType;
221
+ // distributorInfo.data = data;
222
+ // instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
223
+ // }
224
+
225
+
226
+ function createReferral(
227
+ NftId distributorNftId,
228
+ string memory code,
229
+ UFixed discountPercentage,
230
+ uint32 maxReferrals,
231
+ Timestamp expiryAt,
232
+ bytes memory data
233
+ )
234
+ external
235
+ virtual
236
+ returns (ReferralId referralId)
237
+ {
238
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
239
+
240
+ if (bytes(code).length == 0) {
241
+ revert ErrorIDistributionServiceInvalidReferral(code);
242
+ }
243
+ if (expiryAt.eqz()) {
244
+ revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
245
+ }
246
+
247
+ InstanceReader instanceReader = instance.getInstanceReader();
248
+ DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
249
+ IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
250
+
251
+ if (distributorTypeData.maxReferralCount < maxReferrals) {
252
+ revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
253
+ }
254
+ if (distributorTypeData.minDiscountPercentage > discountPercentage) {
255
+ revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
256
+ }
257
+ if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
258
+ revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
259
+ }
260
+ if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
261
+ revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
262
+ }
263
+
264
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
265
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
266
+ distributorNftId,
267
+ code,
268
+ discountPercentage,
269
+ maxReferrals,
270
+ 0, // used referrals
271
+ expiryAt,
272
+ data
273
+ );
274
+
275
+ instance.getInstanceStore().createReferral(referralId, info);
276
+ return referralId;
277
+ }
278
+
279
+ function processSale(
280
+ NftId distributionNftId, // assume always of distribution type
281
+ ReferralId referralId,
282
+ IPolicy.Premium memory premium,
283
+ Amount transferredDistributionFeeAmount
284
+ )
285
+ external
286
+ virtual
287
+ {
288
+ bool isReferral = ! referralId.eqz();
289
+ bool referralValid = referralIsValid(distributionNftId, referralId);
290
+
291
+ if (isReferral && ! referralValid) {
292
+ revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
293
+ }
294
+
295
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
296
+ InstanceReader reader = instance.getInstanceReader();
297
+ InstanceStore store = instance.getInstanceStore();
298
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
299
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
300
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
301
+
302
+ Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
303
+ Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
304
+
305
+ if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
306
+ revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
307
+ }
308
+
309
+
310
+ if (distributionOwnerFee.gtz()) {
311
+ setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
312
+ store.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
313
+ }
314
+
315
+ if (isReferral) {
316
+ referralInfo.usedReferrals += 1;
317
+ store.updateReferral(referralId, referralInfo, KEEP_STATE());
318
+
319
+ if (commissionAmount.gtz()) {
320
+ distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
321
+ distributorInfo.numPoliciesSold += 1;
322
+ store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
323
+ }
324
+ }
325
+ }
326
+
327
+ // TODO: zero should return false
328
+ function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
329
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
330
+ IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
331
+
332
+ if (info.distributorNftId.eqz()) {
333
+ return false;
334
+ }
335
+
336
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
337
+ isValid = isValid && info.usedReferrals < info.maxReferrals;
338
+ }
339
+
340
+ function _getInstanceForDistribution(NftId distributionNftId)
341
+ internal
342
+ view
343
+ returns(IInstance instance)
344
+ {
345
+ NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
346
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
347
+ return IInstance(instanceAddress);
348
+ }
349
+ }