@etherisc/gif-next 0.0.2-91f98cf-477 → 0.0.2-93de5de-423

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