@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e26c262-698

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 (454) hide show
  1. package/README.md +232 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +954 -192
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +192 -168
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +719 -27
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +773 -127
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +556 -33
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +906 -266
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +702 -159
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1415 -1008
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +567 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2129 -1194
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1311 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1279 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1033 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +701 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{InstanceBase.sol/InstanceBase.json → ComponentService.sol/ComponentService.json} +203 -195
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +67 -245
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  51. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → IComponents.sol/IComponents.json} +2 -2
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  57. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  58. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  60. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  61. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  62. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  63. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  64. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  65. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  67. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  69. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  71. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  73. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  75. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  77. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1341 -239
  79. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  81. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  85. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → service/IPolicyService.sol/IPolicyService.json} +263 -191
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -217
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +314 -243
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +657 -0
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +242 -533
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +60 -2
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +373 -61
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +234 -216
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  115. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/Registry.sol/Registry.json +333 -188
  117. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +229 -297
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +312 -132
  123. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  127. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  130. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  132. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +69 -57
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  136. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  137. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/IService.sol/IService.json} +59 -44
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  144. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  150. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  152. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  153. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/Service.sol/Service.json} +155 -151
  154. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  166. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -211
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -174
  173. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  177. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  194. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  202. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  210. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  212. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  216. package/contracts/components/Component.sol +251 -0
  217. package/contracts/components/Distribution.sol +204 -79
  218. package/contracts/components/IComponent.sol +74 -0
  219. package/contracts/components/IDistributionComponent.sol +43 -18
  220. package/contracts/components/IPoolComponent.sol +88 -39
  221. package/contracts/components/IProductComponent.sol +12 -9
  222. package/contracts/components/Pool.sol +216 -163
  223. package/contracts/components/Product.sol +133 -139
  224. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  225. package/contracts/instance/BundleManager.sol +127 -0
  226. package/contracts/instance/Cloneable.sol +51 -0
  227. package/contracts/instance/IInstance.sol +85 -39
  228. package/contracts/instance/IInstanceService.sol +72 -0
  229. package/contracts/instance/Instance.sol +310 -66
  230. package/contracts/instance/InstanceAccessManager.sol +522 -0
  231. package/contracts/instance/InstanceReader.sol +290 -0
  232. package/contracts/instance/InstanceService.sol +495 -0
  233. package/contracts/instance/InstanceServiceManager.sol +54 -0
  234. package/contracts/instance/ObjectManager.sol +82 -0
  235. package/contracts/instance/base/ComponentService.sol +134 -0
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +52 -38
  239. package/contracts/instance/base/Lifecycle.sol +12 -3
  240. package/contracts/instance/module/IAccess.sol +54 -0
  241. package/contracts/instance/module/IBundle.sol +21 -0
  242. package/contracts/instance/module/IComponents.sol +35 -0
  243. package/contracts/instance/module/IDistribution.sol +41 -0
  244. package/contracts/instance/module/IPolicy.sol +72 -0
  245. package/contracts/instance/module/IRisk.sol +11 -0
  246. package/contracts/instance/module/ISetup.sol +33 -0
  247. package/contracts/instance/module/ITreasury.sol +23 -0
  248. package/contracts/instance/service/ApplicationService.sol +350 -0
  249. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  250. package/contracts/instance/service/BundleService.sol +336 -0
  251. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  252. package/contracts/instance/service/ClaimService.sol +151 -0
  253. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  254. package/contracts/instance/service/DistributionService.sol +435 -22
  255. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  256. package/contracts/instance/service/IApplicationService.sol +82 -0
  257. package/contracts/instance/service/IBundleService.sol +62 -0
  258. package/contracts/instance/service/IClaimService.sol +61 -0
  259. package/contracts/instance/service/IDistributionService.sol +87 -1
  260. package/contracts/instance/service/IPolicyService.sol +72 -0
  261. package/contracts/instance/service/IPoolService.sol +22 -24
  262. package/contracts/instance/service/IProductService.sol +9 -76
  263. package/contracts/instance/service/PolicyService.sol +403 -0
  264. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  265. package/contracts/instance/service/PoolService.sol +181 -110
  266. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  267. package/contracts/instance/service/ProductService.sol +163 -432
  268. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  269. package/contracts/registry/ChainNft.sol +47 -24
  270. package/contracts/registry/IRegistry.sol +52 -8
  271. package/contracts/registry/IRegistryService.sol +52 -20
  272. package/contracts/registry/ITransferInterceptor.sol +1 -0
  273. package/contracts/registry/Registry.sol +277 -236
  274. package/contracts/registry/RegistryAccessManager.sol +216 -0
  275. package/contracts/registry/RegistryService.sol +113 -271
  276. package/contracts/registry/RegistryServiceManager.sol +24 -25
  277. package/contracts/registry/ReleaseManager.sol +322 -0
  278. package/contracts/registry/TokenRegistry.sol +116 -0
  279. package/contracts/shared/ERC165.sol +14 -8
  280. package/contracts/shared/INftOwnable.sol +11 -10
  281. package/contracts/shared/IPolicyHolder.sol +26 -0
  282. package/contracts/shared/IRegisterable.sol +4 -6
  283. package/contracts/shared/IRegistryLinked.sol +12 -0
  284. package/contracts/shared/IService.sol +18 -0
  285. package/contracts/shared/IVersionable.sol +4 -47
  286. package/contracts/shared/NftOwnable.sol +67 -83
  287. package/contracts/shared/PolicyHolder.sol +81 -0
  288. package/contracts/shared/ProxyManager.sol +100 -25
  289. package/contracts/shared/Registerable.sol +16 -31
  290. package/contracts/shared/RegistryLinked.sol +48 -0
  291. package/contracts/shared/Service.sol +58 -0
  292. package/contracts/shared/TokenHandler.sol +33 -0
  293. package/contracts/shared/Versionable.sol +4 -92
  294. package/contracts/test/TestRegisterable.sol +1 -1
  295. package/contracts/test/TestRoleId.sol +1 -1
  296. package/contracts/test/TestService.sol +6 -7
  297. package/contracts/types/Blocknumber.sol +1 -0
  298. package/contracts/types/ClaimId.sol +52 -0
  299. package/contracts/types/DistributorType.sol +55 -0
  300. package/contracts/types/Fee.sol +1 -0
  301. package/contracts/types/Key32.sol +8 -3
  302. package/contracts/types/NftId.sol +8 -0
  303. package/contracts/types/NftIdSet.sol +26 -24
  304. package/contracts/types/NumberId.sol +52 -0
  305. package/contracts/types/ObjectType.sol +40 -14
  306. package/contracts/types/PayoutId.sol +54 -0
  307. package/contracts/types/Referral.sol +89 -0
  308. package/contracts/types/RoleId.sol +67 -15
  309. package/contracts/types/Seconds.sol +54 -0
  310. package/contracts/types/StateId.sol +6 -1
  311. package/contracts/types/Timestamp.sol +17 -13
  312. package/contracts/types/UFixed.sol +1 -0
  313. package/contracts/types/Version.sol +5 -1
  314. package/package.json +3 -3
  315. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  316. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -301
  317. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  320. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  322. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  326. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  328. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  330. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  332. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  334. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  337. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  339. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  341. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  343. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  345. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  347. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  349. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  351. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  352. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  353. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  354. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  355. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  356. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  357. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  358. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  359. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  360. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  362. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  363. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  365. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  367. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  369. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  372. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  373. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  374. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  375. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  376. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  378. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  380. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  381. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  382. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  383. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  385. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  386. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  388. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  390. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  391. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  393. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  394. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  395. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  396. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  397. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  399. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  400. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  401. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  402. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  403. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
  404. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  405. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
  406. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  407. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
  408. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  409. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  410. package/contracts/components/BaseComponent.sol +0 -79
  411. package/contracts/components/IBaseComponent.sol +0 -19
  412. package/contracts/experiment/errors/Require.sol +0 -38
  413. package/contracts/experiment/errors/Revert.sol +0 -44
  414. package/contracts/experiment/inheritance/A.sol +0 -53
  415. package/contracts/experiment/inheritance/B.sol +0 -28
  416. package/contracts/experiment/inheritance/C.sol +0 -34
  417. package/contracts/experiment/inheritance/IA.sol +0 -13
  418. package/contracts/experiment/inheritance/IB.sol +0 -10
  419. package/contracts/experiment/inheritance/IC.sol +0 -12
  420. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  421. package/contracts/experiment/statemachine/ISM.sol +0 -25
  422. package/contracts/experiment/statemachine/SM.sol +0 -57
  423. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  424. package/contracts/experiment/types/TypeA.sol +0 -47
  425. package/contracts/experiment/types/TypeB.sol +0 -29
  426. package/contracts/instance/IInstanceLinked.sol +0 -8
  427. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  428. package/contracts/instance/base/IInstanceBase.sol +0 -23
  429. package/contracts/instance/base/IService.sol +0 -15
  430. package/contracts/instance/base/InstanceBase.sol +0 -89
  431. package/contracts/instance/base/ModuleBase.sol +0 -57
  432. package/contracts/instance/base/ServiceBase.sol +0 -44
  433. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  434. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  435. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  436. package/contracts/instance/module/component/IComponent.sol +0 -28
  437. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  438. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  439. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  440. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  441. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  442. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  443. package/contracts/instance/module/risk/IRisk.sol +0 -26
  444. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  445. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  446. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  447. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  448. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  449. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  450. package/contracts/registry/IChainNft.sol +0 -22
  451. package/contracts/test/TestDistribution.sol +0 -22
  452. package/contracts/test/TestPool.sol +0 -27
  453. package/contracts/test/TestProduct.sol +0 -74
  454. package/contracts/types/ReferralId.sol +0 -48
@@ -0,0 +1,251 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
7
+
8
+ import {IComponent} from "./IComponent.sol";
9
+ import {IComponents} from "../instance/module/IComponents.sol";
10
+ import {IProductService} from "../instance/service/IProductService.sol";
11
+ import {IInstanceService} from "../instance/IInstanceService.sol";
12
+ import {IInstance} from "../instance/IInstance.sol";
13
+ import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
14
+ import {InstanceReader} from "../instance/InstanceReader.sol";
15
+ import {IRegistry} from "../registry/IRegistry.sol";
16
+ import {NftId} from "../types/NftId.sol";
17
+ import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
18
+ import {VersionPart} from "../types/Version.sol";
19
+ import {Registerable} from "../shared/Registerable.sol";
20
+ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
21
+ import {IAccess} from "../instance/module/IAccess.sol";
22
+ import {VersionPart} from "../types/Version.sol";
23
+
24
+ // TODO discuss to inherit from oz accessmanaged
25
+ // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
26
+ // same pattern as for Service which is also upgradeable
27
+ abstract contract Component is
28
+ Registerable,
29
+ IComponent,
30
+ AccessManagedUpgradeable
31
+ {
32
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
33
+ bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
34
+
35
+ struct ComponentStorage {
36
+ string _name; // unique (per instance) component name
37
+ IERC20Metadata _token; // token for this component
38
+ IInstance _instance; // instance for this component
39
+ address _wallet; // wallet for this component (default = component contract itself)
40
+ InstanceReader _instanceReader; // instance reader for this component
41
+ bool _isNftInterceptor; // declares if component is involved in nft transfers
42
+ NftId _productNftId; // only relevant for components that are linked to a aproduct
43
+ }
44
+
45
+ function _getComponentStorage() private pure returns (ComponentStorage storage $) {
46
+ assembly {
47
+ $.slot := COMPONENT_LOCATION_V1
48
+ }
49
+ }
50
+
51
+ modifier onlyChainNft() {
52
+ if(msg.sender != getRegistry().getChainNftAddress()) {
53
+ revert ErrorComponentNotChainNft(msg.sender);
54
+ }
55
+ _;
56
+ }
57
+
58
+ function initializeComponent(
59
+ address registry,
60
+ NftId instanceNftId,
61
+ string memory name,
62
+ address token,
63
+ ObjectType componentType,
64
+ bool isInterceptor,
65
+ address initialOwner,
66
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
67
+ )
68
+ public
69
+ virtual
70
+ onlyInitializing()
71
+ {
72
+ initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, registryData);
73
+
74
+ // set and check linked instance
75
+ ComponentStorage storage $ = _getComponentStorage();
76
+ $._instance = IInstance(
77
+ getRegistry().getObjectInfo(instanceNftId).objectAddress);
78
+
79
+ if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
80
+ revert ErrorComponentNotInstance(instanceNftId);
81
+ }
82
+
83
+ // initialize AccessManagedUpgradeable
84
+ __AccessManaged_init($._instance.authority());
85
+
86
+ // set component state
87
+ $._name = name;
88
+ $._isNftInterceptor = isInterceptor;
89
+ $._instanceReader = $._instance.getInstanceReader();
90
+ $._wallet = address(this);
91
+ $._token = IERC20Metadata(token);
92
+
93
+ registerInterface(type(IComponent).interfaceId);
94
+ }
95
+
96
+ function lock() external onlyOwner override {
97
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
98
+ }
99
+
100
+ function unlock() external onlyOwner override {
101
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
102
+ }
103
+
104
+ function setWallet(address newWallet)
105
+ external
106
+ override
107
+ onlyOwner
108
+ {
109
+ ComponentStorage storage $ = _getComponentStorage();
110
+
111
+ address currentWallet = $._wallet;
112
+ uint256 currentBalance = $._token.balanceOf(currentWallet);
113
+
114
+ // checks
115
+ if (newWallet == address(0)) {
116
+ revert ErrorComponentWalletAddressZero();
117
+ }
118
+
119
+ if (newWallet == currentWallet) {
120
+ revert ErrorComponentWalletAddressIsSameAsCurrent();
121
+ }
122
+
123
+ if (currentBalance > 0) {
124
+ if (currentWallet == address(this)) {
125
+ // move tokens from component smart contract to external wallet
126
+ } else {
127
+ // move tokens from external wallet to component smart contract or another external wallet
128
+ uint256 allowance = $._token.allowance(currentWallet, address(this));
129
+ if (allowance < currentBalance) {
130
+ revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
131
+ }
132
+ }
133
+ }
134
+
135
+ // effects
136
+ $._wallet = newWallet;
137
+ emit LogComponentWalletAddressChanged(currentWallet, newWallet);
138
+
139
+ // interactions
140
+ if (currentBalance > 0) {
141
+ // transfer tokens from current wallet to new wallet
142
+ if (currentWallet == address(this)) {
143
+ // transferFrom requires self allowance too
144
+ $._token.approve(address(this), currentBalance);
145
+ }
146
+
147
+ SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
148
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
149
+ }
150
+ }
151
+
152
+ function setProductNftId(NftId productNftId)
153
+ external
154
+ override
155
+ {
156
+ ComponentStorage storage $ = _getComponentStorage();
157
+
158
+ // verify caller is product service
159
+ if(msg.sender != _getServiceAddress(PRODUCT())) {
160
+ revert ErrorComponentNotProductService(msg.sender);
161
+ }
162
+
163
+ // verify component is not yet linked to a product
164
+ if($._productNftId.gtz()) {
165
+ revert ErrorComponentProductNftAlreadySet();
166
+ }
167
+
168
+ $._productNftId = productNftId;
169
+ }
170
+
171
+ function nftMint(address to, uint256 tokenId)
172
+ external
173
+ virtual
174
+ onlyChainNft
175
+ {}
176
+
177
+ /// @dev callback function for nft transfers
178
+ /// may only be called by chain nft contract.
179
+ /// do not override this function to implement business logic for handling transfers
180
+ /// override internal function _nftTransferFrom instead
181
+ function nftTransferFrom(address from, address to, uint256 tokenId)
182
+ external
183
+ virtual
184
+ onlyChainNft
185
+ {
186
+ _nftTransferFrom(from, to, tokenId);
187
+ }
188
+
189
+ function getWallet() public view override returns (address walletAddress)
190
+ {
191
+ return _getComponentStorage()._wallet;
192
+ }
193
+
194
+ function getToken() public view override returns (IERC20Metadata token) {
195
+ return _getComponentStorage()._token;
196
+ }
197
+
198
+ function isNftInterceptor() public view override returns(bool isInterceptor) {
199
+ return _getComponentStorage()._isNftInterceptor;
200
+ }
201
+
202
+ function getInstance() public view override returns (IInstance instance) {
203
+ return _getComponentStorage()._instance;
204
+ }
205
+
206
+ function getName() public view override returns(string memory name) {
207
+ return _getComponentStorage()._name;
208
+ }
209
+
210
+ function getProductNftId() public view override returns (NftId productNftId) {
211
+ return _getComponentStorage()._productNftId;
212
+ }
213
+
214
+ function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
215
+ info = _getInstanceReader().getComponentInfo(getNftId());
216
+
217
+ // fallback to initial info (wallet is always != address(0))
218
+ if(info.wallet == address(0)) {
219
+ info = _getInitialInfo();
220
+ }
221
+ }
222
+
223
+ /// @dev defines initial component specification
224
+ /// overwrite this function according to your use case
225
+ function _getInitialInfo()
226
+ internal
227
+ view
228
+ virtual
229
+ returns (IComponents.ComponentInfo memory info)
230
+ { }
231
+
232
+
233
+ /// @dev internal function for nft transfers.
234
+ /// handling logic that deals with nft transfers need to overwrite this function
235
+ function _nftTransferFrom(address from, address to, uint256 tokenId)
236
+ internal
237
+ virtual
238
+ { }
239
+
240
+ /// @dev returns reader for linked instance
241
+ function _getInstanceReader() internal view returns (InstanceReader reader) {
242
+ return _getComponentStorage()._instanceReader;
243
+ }
244
+
245
+ /// @dev returns the service address for the specified domain
246
+ /// gets address via lookup from registry using the major version form the linked instance
247
+ function _getServiceAddress(ObjectType domain) internal view returns (address service) {
248
+ VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
249
+ return getRegistry().getServiceAddress(domain, majorVersion);
250
+ }
251
+ }
@@ -4,77 +4,212 @@ pragma solidity ^0.8.19;
4
4
  import {DISTRIBUTION} from "../types/ObjectType.sol";
5
5
  import {IDistributionService} from "../instance/service/IDistributionService.sol";
6
6
  import {IProductService} from "../instance/service/IProductService.sol";
7
- import {NftId} from "../types/NftId.sol";
8
- import {ReferralId} from "../types/ReferralId.sol";
7
+ import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
8
+ import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
- import {BaseComponent} from "./BaseComponent.sol";
10
+ import {Component} from "./Component.sol";
11
+ import {IDistribution} from "../instance/module/IDistribution.sol";
11
12
  import {IDistributionComponent} from "./IDistributionComponent.sol";
12
13
  import {IRegistry} from "../registry/IRegistry.sol";
13
14
  import {IRegisterable} from "../shared/IRegisterable.sol";
15
+ import {ISetup} from "../instance/module/ISetup.sol";
14
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 "../types/UFixed.sol";
20
+ import {DistributorType} from "../types/DistributorType.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
22
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
15
23
 
16
- contract Distribution is
17
- BaseComponent,
24
+
25
+ abstract contract Distribution is
26
+ Component,
18
27
  IDistributionComponent
19
28
  {
29
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
30
+ bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
20
31
 
21
- Fee internal _initialDistributionFee;
22
- bool internal _isVerifying;
23
-
24
- IDistributionService private _distributionService;
25
- IProductService private _productService;
26
-
27
- modifier onlyProductService() {
28
- require(
29
- msg.sender == address(_productService),
30
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
31
- _;
32
+ struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
34
+ Fee _distributionFee;
35
+ TokenHandler _tokenHandler;
36
+ IDistributionService _distributionService;
37
+ mapping(address distributor => NftId distributorNftId) _distributorNftId;
32
38
  }
33
39
 
34
- constructor(
40
+ function initializeDistribution(
35
41
  address registry,
36
42
  NftId instanceNftId,
37
- // TODO refactor into tokenNftId
43
+ string memory name,
38
44
  address token,
39
- bool verifying,
45
+ Fee memory minDistributionOwnerFee,
40
46
  Fee memory distributionFee,
41
- address initialOwner
47
+ address initialOwner,
48
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
42
49
  )
43
- BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
50
+ public
51
+ virtual
52
+ onlyInitializing()
44
53
  {
45
- _isVerifying = verifying;
46
- _initialDistributionFee = distributionFee;
54
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
47
55
 
48
- _distributionService = _instance.getDistributionService();
49
- _productService = _instance.getProductService();
56
+ DistributionStorage storage $ = _getDistributionStorage();
57
+ // TODO add validation
58
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
59
+ $._distributionFee = distributionFee;
60
+ $._tokenHandler = new TokenHandler(token);
61
+ $._distributionService = getInstance().getDistributionService();
50
62
 
51
- _registerInterface(type(IDistributionComponent).interfaceId);
63
+ registerInterface(type(IDistributionComponent).interfaceId);
52
64
  }
53
65
 
54
-
55
66
  function setFees(
67
+ Fee memory minDistributionOwnerFee,
56
68
  Fee memory distributionFee
57
69
  )
58
70
  external
59
71
  override
72
+ onlyOwner
73
+ restricted()
60
74
  {
61
- _distributionService.setFees(distributionFee);
75
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
62
76
  }
63
77
 
64
- function calculateFeeAmount(
65
- ReferralId referralId,
66
- uint256 netPremiumAmount
78
+ function getDistributionFee() external view returns (Fee memory distributionFee) {
79
+ DistributionStorage storage $ = _getDistributionStorage();
80
+ return $._distributionFee;
81
+ }
82
+
83
+ function createDistributorType(
84
+ string memory name,
85
+ UFixed minDiscountPercentage,
86
+ UFixed maxDiscountPercentage,
87
+ UFixed commissionPercentage,
88
+ uint32 maxReferralCount,
89
+ uint32 maxReferralLifetime,
90
+ bool allowSelfReferrals,
91
+ bool allowRenewals,
92
+ bytes memory data
93
+ )
94
+ public
95
+ returns (DistributorType distributorType)
96
+ {
97
+ DistributionStorage storage $ = _getDistributionStorage();
98
+ distributorType = $._distributionService.createDistributorType(
99
+ name,
100
+ minDiscountPercentage,
101
+ maxDiscountPercentage,
102
+ commissionPercentage,
103
+ maxReferralCount,
104
+ maxReferralLifetime,
105
+ allowSelfReferrals,
106
+ allowRenewals,
107
+ data);
108
+ }
109
+
110
+ function createDistributor(
111
+ address distributor,
112
+ DistributorType distributorType,
113
+ bytes memory data
114
+ )
115
+ public
116
+ returns(NftId distributorNftId)
117
+ {
118
+ DistributionStorage storage $ = _getDistributionStorage();
119
+ require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
120
+
121
+ distributorNftId = $._distributionService.createDistributor(
122
+ distributor,
123
+ distributorType,
124
+ data);
125
+
126
+ $._distributorNftId[distributor] = distributorNftId;
127
+ }
128
+
129
+ function updateDistributorType(
130
+ NftId distributorNftId,
131
+ DistributorType distributorType,
132
+ bytes memory data
133
+ )
134
+ public
135
+ // TODO figure out what we need for authz
136
+ // and add it
137
+ {
138
+ DistributionStorage storage $ = _getDistributionStorage();
139
+ $._distributionService.updateDistributorType(
140
+ distributorNftId,
141
+ distributorType,
142
+ data);
143
+ }
144
+
145
+ /**
146
+ * @dev lets distributors create referral codes.
147
+ * referral codes need to be unique
148
+ */
149
+ function _createReferral(
150
+ NftId distributorNftId,
151
+ string memory code,
152
+ UFixed discountPercentage,
153
+ uint32 maxReferrals,
154
+ Timestamp expiryAt,
155
+ bytes memory data
67
156
  )
157
+ internal
158
+ returns (ReferralId referralId)
159
+ {
160
+ DistributionStorage storage $ = _getDistributionStorage();
161
+ referralId = $._distributionService.createReferral(
162
+ distributorNftId,
163
+ code,
164
+ discountPercentage,
165
+ maxReferrals,
166
+ expiryAt,
167
+ data);
168
+ }
169
+
170
+ function isDistributor(address candidate)
171
+ public
172
+ view
173
+ returns (bool)
174
+ {
175
+ DistributionStorage storage $ = _getDistributionStorage();
176
+ return $._distributorNftId[candidate].gtz();
177
+ }
178
+
179
+ function getDistributorNftId(address distributor)
180
+ public
181
+ view
182
+ returns (NftId distributorNftId)
183
+ {
184
+ DistributionStorage storage $ = _getDistributionStorage();
185
+ return $._distributorNftId[distributor];
186
+ }
187
+
188
+ function getDiscountPercentage(string memory referralCode)
68
189
  external
69
190
  view
70
- virtual override
71
- returns (uint256 feeAmount)
191
+ returns (
192
+ UFixed discountPercentage,
193
+ ReferralStatus status
194
+ )
72
195
  {
73
- Fee memory fee = getDistributionFee();
74
- (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
196
+ ReferralId referralId = getReferralId(referralCode);
197
+ return _getInstanceReader().getDiscountPercentage(referralId);
75
198
  }
76
199
 
77
200
 
201
+ function getReferralId(
202
+ string memory referralCode
203
+ )
204
+ public
205
+ view
206
+ returns (ReferralId referralId)
207
+ {
208
+ return ReferralLib.toReferralId(
209
+ getNftId(),
210
+ referralCode);
211
+ }
212
+
78
213
  function calculateRenewalFeeAmount(
79
214
  ReferralId referralId,
80
215
  uint256 netPremiumAmount
@@ -88,68 +223,58 @@ contract Distribution is
88
223
  return 0 * netPremiumAmount;
89
224
  }
90
225
 
91
- function processSale(
92
- ReferralId referralId,
93
- uint256 feeAmount
94
- )
95
- external
96
- onlyProductService
97
- virtual override
98
- {
99
- // default is no action
100
- }
101
-
102
226
  function processRenewal(
103
227
  ReferralId referralId,
104
228
  uint256 feeAmount
105
229
  )
106
230
  external
107
- onlyProductService
231
+ onlyOwner
232
+ restricted()
108
233
  virtual override
109
234
  {
110
235
  // default is no action
111
236
  }
112
237
 
113
- function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
114
- // default is invalid
115
- return false;
116
- }
238
+ function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
239
+ InstanceReader reader = getInstance().getInstanceReader();
240
+ setupInfo = reader.getDistributionSetupInfo(getNftId());
117
241
 
118
- /// @dev default distribution fee, ie when not using any valid referralId
119
- function getDistributionFee() public view returns (Fee memory distributionFee) {
120
- NftId productNftId = _instance.getProductNftId(getNftId());
121
- if (_instance.hasTreasuryInfo(productNftId)) {
122
- return _instance.getTreasuryInfo(productNftId).distributionFee;
123
- } else {
124
- return _initialDistributionFee;
242
+ // fallback to initial setup info (wallet is always != address(0))
243
+ if(setupInfo.wallet == address(0)) {
244
+ setupInfo = _getInitialSetupInfo();
125
245
  }
126
246
  }
127
247
 
248
+ function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
249
+ DistributionStorage storage $ = _getDistributionStorage();
250
+ return ISetup.DistributionSetupInfo(
251
+ zeroNftId(),
252
+ $._tokenHandler,
253
+ $._minDistributionOwnerFee,
254
+ $._distributionFee,
255
+ address(this),
256
+ 0
257
+ );
258
+ }
259
+
260
+
261
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
262
+ // keep track of distributor nft owner
263
+ emit LogDistributorUpdated(to, msg.sender);
264
+ DistributionStorage storage $ = _getDistributionStorage();
265
+ $._distributorNftId[from] = zeroNftId();
266
+ $._distributorNftId[to] = toNftId(tokenId);
267
+ }
268
+
128
269
 
129
270
  /// @dev returns true iff the component needs to be called when selling/renewing policis
130
271
  function isVerifying() external view returns (bool verifying) {
131
- return _isVerifying;
272
+ return true;
132
273
  }
133
274
 
134
- // from IRegisterable
135
-
136
- function getInitialInfo()
137
- public
138
- view
139
- override (IRegisterable, Registerable)
140
- returns(IRegistry.ObjectInfo memory, bytes memory)
141
- {
142
- (
143
- IRegistry.ObjectInfo memory info,
144
- bytes memory data
145
- ) = super.getInitialInfo();
146
-
147
- return (
148
- info,
149
- abi.encode(
150
- _initialDistributionFee,
151
- _isVerifying
152
- )
153
- );
275
+ function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
276
+ assembly {
277
+ $.slot := DISTRIBUTION_STORAGE_LOCATION_V1
278
+ }
154
279
  }
155
280
  }
@@ -0,0 +1,74 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {IInstance} from "../instance/IInstance.sol";
8
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
+ import {IProductService} from "../instance/service/IProductService.sol";
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
11
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
12
+ import {NftId} from "../types/NftId.sol";
13
+ import {ObjectType} from "../types/ObjectType.sol";
14
+
15
+ /// @dev component base class
16
+ /// component examples are product, distribution, pool and oracle
17
+ interface IComponent is
18
+ IRegisterable,
19
+ ITransferInterceptor
20
+ {
21
+ error ErrorComponentNotChainNft(address caller);
22
+ error ErrorComponentNotProductService(address caller);
23
+ error ErrorComponentNotInstance(NftId instanceNftId);
24
+ error ErrorComponentProductNftAlreadySet();
25
+
26
+ error ErrorComponentWalletAddressZero();
27
+ error ErrorComponentWalletAddressIsSameAsCurrent();
28
+ error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
29
+
30
+ event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
31
+ event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
32
+
33
+ /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
34
+ /// only component owner (nft holder) is authorizes to call this function
35
+ function lock() external;
36
+
37
+ /// @dev unlocks component to (re-)enable functions that may change state related to this component
38
+ /// only component owner (nft holder) is authorizes to call this function
39
+ function unlock() external;
40
+
41
+ /// @dev sets the wallet address for the component
42
+ /// if the current wallet has tokens, these will be transferred
43
+ /// if the new wallet address is externally owned, an approval from the
44
+ /// owner of the external wallet for the component to move all tokens must exist
45
+ function setWallet(address walletAddress) external;
46
+
47
+ /// @dev only product service may set product nft id during registration of product setup
48
+ function setProductNftId(NftId productNftId) external;
49
+
50
+ /// @dev returns the name of this component
51
+ /// to successfully register the component with an instance the name MUST be unique in the linked instance
52
+ function getName() external view returns (string memory name);
53
+
54
+ /// @dev defines which ERC20 token is used by this component
55
+ function getToken() external view returns (IERC20Metadata token);
56
+
57
+ /// @dev defines the instance to which this component is linked to
58
+ function getInstance() external view returns (IInstance instance);
59
+
60
+ /// @dev defines the wallet address used to hold the ERC20 tokens related to this component
61
+ /// the default address is the component token address
62
+ function getWallet() external view returns (address walletAddress);
63
+
64
+ /// @dev defines the product to which this component is linked to
65
+ /// this is only relevant for pool and distribution components
66
+ function getProductNftId() external view returns (NftId productNftId);
67
+
68
+ function isNftInterceptor() external view returns(bool isInterceptor);
69
+
70
+ /// @dev returns component infos for this pool
71
+ /// when registered with an instance the info is obtained from the data stored in the instance
72
+ /// when not registered the function returns the info from the component contract
73
+ function getComponentInfo() external view returns (IComponents.ComponentInfo memory info);
74
+ }