@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2af39ab-356

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 (325) hide show
  1. package/README.md +8 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +62 -145
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +112 -226
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +59 -92
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +90 -171
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +247 -205
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +63 -164
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +264 -292
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +67 -218
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +30 -11
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  21. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +415 -522
  23. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +19 -184
  25. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  26. package/artifacts/contracts/instance/Instance.sol/Instance.json +501 -633
  27. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
  29. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -222
  31. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +70 -284
  33. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +196 -113
  35. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  37. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +18 -220
  39. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  43. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  49. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  54. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +182 -331
  56. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  58. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +141 -366
  60. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +182 -107
  62. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  64. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  66. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +645 -268
  68. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +300 -109
  70. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +124 -206
  72. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +89 -257
  74. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  76. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +369 -167
  78. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +25 -290
  80. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +69 -153
  82. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +12 -177
  84. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +65 -443
  86. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +188 -141
  88. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +108 -249
  90. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +183 -104
  92. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +42 -272
  94. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +179 -104
  96. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  97. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +12 -177
  100. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  101. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  103. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  104. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  105. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +31 -261
  107. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
  109. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
  111. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
  113. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  114. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  115. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  116. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  117. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
  118. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
  121. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
  123. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IService.sol/IService.json +12 -177
  125. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
  129. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  130. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
  131. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
  135. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  136. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
  137. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Service.sol/Service.json +13 -215
  139. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  140. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  141. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  142. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
  145. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  147. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  151. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -269
  153. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +6 -188
  158. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  159. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  160. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  162. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  164. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  165. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  167. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  175. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  178. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  180. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  182. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  184. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  186. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  188. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  190. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  192. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  194. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  196. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  198. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  200. package/contracts/components/Component.sol +88 -83
  201. package/contracts/components/Distribution.sol +16 -31
  202. package/contracts/components/IComponent.sol +40 -16
  203. package/contracts/components/IDistributionComponent.sol +1 -22
  204. package/contracts/components/IPoolComponent.sol +73 -47
  205. package/contracts/components/IProductComponent.sol +3 -2
  206. package/contracts/components/Pool.sol +171 -126
  207. package/contracts/components/Product.sol +38 -23
  208. package/contracts/instance/BundleManager.sol +7 -5
  209. package/contracts/instance/IInstance.sol +10 -3
  210. package/contracts/instance/IInstanceService.sol +2 -1
  211. package/contracts/instance/Instance.sol +25 -11
  212. package/contracts/instance/InstanceReader.sol +4 -3
  213. package/contracts/instance/InstanceService.sol +59 -11
  214. package/contracts/instance/InstanceServiceManager.sol +1 -1
  215. package/contracts/instance/base/KeyValueStore.sol +5 -2
  216. package/contracts/instance/base/Lifecycle.sol +11 -2
  217. package/contracts/instance/module/IBundle.sol +2 -1
  218. package/contracts/instance/module/IComponents.sol +35 -0
  219. package/contracts/instance/module/IDistribution.sol +2 -0
  220. package/contracts/instance/module/IPolicy.sol +30 -3
  221. package/contracts/instance/module/ISetup.sol +23 -7
  222. package/contracts/instance/service/ApplicationService.sol +139 -57
  223. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  224. package/contracts/instance/service/BundleService.sol +76 -38
  225. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  226. package/contracts/instance/service/ClaimService.sol +151 -0
  227. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  228. package/contracts/instance/service/DistributionService.sol +133 -21
  229. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  230. package/contracts/instance/service/IApplicationService.sol +9 -9
  231. package/contracts/instance/service/IBundleService.sol +19 -11
  232. package/contracts/instance/service/IClaimService.sol +61 -0
  233. package/contracts/instance/service/IDistributionService.sol +23 -2
  234. package/contracts/instance/service/IPolicyService.sol +17 -35
  235. package/contracts/instance/service/IPoolService.sol +17 -2
  236. package/contracts/instance/service/PolicyService.sol +61 -175
  237. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  238. package/contracts/instance/service/PoolService.sol +72 -18
  239. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  240. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  241. package/contracts/registry/IRegistryService.sol +7 -7
  242. package/contracts/registry/RegistryService.sol +51 -45
  243. package/contracts/registry/RegistryServiceManager.sol +13 -13
  244. package/contracts/registry/ReleaseManager.sol +10 -19
  245. package/contracts/registry/TokenRegistry.sol +13 -10
  246. package/contracts/shared/ERC165.sol +2 -1
  247. package/contracts/shared/INftOwnable.sol +4 -9
  248. package/contracts/shared/IRegistryLinked.sol +0 -3
  249. package/contracts/shared/IService.sol +2 -0
  250. package/contracts/shared/IVersionable.sol +4 -47
  251. package/contracts/shared/NftOwnable.sol +10 -80
  252. package/contracts/shared/ProxyManager.sol +98 -24
  253. package/contracts/shared/Registerable.sol +3 -10
  254. package/contracts/shared/RegistryLinked.sol +10 -26
  255. package/contracts/shared/Service.sol +10 -12
  256. package/contracts/shared/TokenHandler.sol +11 -5
  257. package/contracts/shared/Versionable.sol +1 -90
  258. package/contracts/types/Blocknumber.sol +1 -0
  259. package/contracts/types/ClaimId.sol +52 -0
  260. package/contracts/types/Fee.sol +1 -0
  261. package/contracts/types/NftId.sol +8 -0
  262. package/contracts/types/ObjectType.sol +5 -4
  263. package/contracts/types/PayoutId.sol +54 -0
  264. package/contracts/types/RoleId.sol +10 -5
  265. package/contracts/types/Seconds.sol +54 -0
  266. package/contracts/types/StateId.sol +1 -0
  267. package/contracts/types/Timestamp.sol +13 -13
  268. package/contracts/types/UFixed.sol +1 -0
  269. package/contracts/types/Version.sol +1 -0
  270. package/package.json +1 -1
  271. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  272. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  273. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  274. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  275. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  276. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  277. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  278. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  279. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  280. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  281. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  282. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  283. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  284. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  285. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  286. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  287. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  288. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  289. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  290. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  291. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  292. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  293. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  294. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  295. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  296. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  297. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  298. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  299. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  301. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  303. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  305. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  307. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  309. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  311. package/contracts/experiment/cloning/Cloner.sol +0 -47
  312. package/contracts/experiment/errors/Require.sol +0 -38
  313. package/contracts/experiment/errors/Revert.sol +0 -44
  314. package/contracts/experiment/inheritance/A.sol +0 -53
  315. package/contracts/experiment/inheritance/B.sol +0 -28
  316. package/contracts/experiment/inheritance/C.sol +0 -34
  317. package/contracts/experiment/inheritance/IA.sol +0 -13
  318. package/contracts/experiment/inheritance/IB.sol +0 -10
  319. package/contracts/experiment/inheritance/IC.sol +0 -12
  320. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  321. package/contracts/experiment/statemachine/ISM.sol +0 -25
  322. package/contracts/experiment/statemachine/SM.sol +0 -57
  323. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  324. package/contracts/experiment/types/TypeA.sol +0 -47
  325. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -42,8 +42,8 @@
42
42
  "type": "function"
43
43
  }
44
44
  ],
45
- "bytecode": "0x60fb610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea264697066735822122074bb6f75f2cab9692d05e41844bf40283045a9440c662c37a97b2502d38207ed64736f6c63430008140033",
46
- "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea264697066735822122074bb6f75f2cab9692d05e41844bf40283045a9440c662c37a97b2502d38207ed64736f6c63430008140033",
45
+ "bytecode": "0x60fb610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220cdee50fe6c9714f8463d3a3d707ceac1b02f5c17b070c998ecfbac805f95cace64736f6c63430008140033",
46
+ "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220cdee50fe6c9714f8463d3a3d707ceac1b02f5c17b070c998ecfbac805f95cace64736f6c63430008140033",
47
47
  "linkReferences": {},
48
48
  "deployedLinkReferences": {}
49
49
  }
@@ -6,6 +6,7 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
6
6
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
7
7
 
8
8
  import {IComponent} from "./IComponent.sol";
9
+ import {IComponents} from "../instance/module/IComponents.sol";
9
10
  import {IProductService} from "../instance/service/IProductService.sol";
10
11
  import {IInstanceService} from "../instance/IInstanceService.sol";
11
12
  import {IInstance} from "../instance/IInstance.sol";
@@ -18,6 +19,7 @@ import {VersionPart} from "../types/Version.sol";
18
19
  import {Registerable} from "../shared/Registerable.sol";
19
20
  import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
21
  import {IAccess} from "../instance/module/IAccess.sol";
22
+ import {VersionPart} from "../types/Version.sol";
21
23
 
22
24
  // TODO discuss to inherit from oz accessmanaged
23
25
  // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
@@ -28,40 +30,21 @@ abstract contract Component is
28
30
  AccessManagedUpgradeable
29
31
  {
30
32
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
31
- bytes32 public constant CONTRACT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
33
+ bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
32
34
 
33
35
  struct ComponentStorage {
34
- IInstance _instance; // instance for this component
35
- InstanceReader _instanceReader; // instance reader for this component
36
36
  string _name; // unique (per instance) component name
37
37
  IERC20Metadata _token; // token for this component
38
+ IInstance _instance; // instance for this component
38
39
  address _wallet; // wallet for this component (default = component contract itself)
40
+ InstanceReader _instanceReader; // instance reader for this component
39
41
  bool _isNftInterceptor; // declares if component is involved in nft transfers
40
- IInstanceService _instanceService; // instance service for this component
41
-
42
42
  NftId _productNftId; // only relevant for components that are linked to a aproduct
43
- IProductService _productService; // product service for component, might not be relevant for some component types (eg oracles)
44
- }
45
-
46
-
47
- modifier onlyChainNft() {
48
- if(msg.sender != getRegistry().getChainNftAddress()) {
49
- revert ErrorComponentNotChainNft(msg.sender);
50
- }
51
- _;
52
- }
53
-
54
-
55
- modifier onlyProductService() {
56
- if(msg.sender != address(_getComponentStorage()._productService)) {
57
- revert ErrorComponentNotProductService(msg.sender);
58
- }
59
- _;
60
43
  }
61
44
 
62
45
  function _getComponentStorage() private pure returns (ComponentStorage storage $) {
63
46
  assembly {
64
- $.slot := CONTRACT_LOCATION_V1
47
+ $.slot := COMPONENT_LOCATION_V1
65
48
  }
66
49
  }
67
50
 
@@ -73,78 +56,44 @@ abstract contract Component is
73
56
  ObjectType componentType,
74
57
  bool isInterceptor,
75
58
  address initialOwner,
76
- bytes memory data
59
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
77
60
  )
78
61
  public
79
62
  virtual
80
63
  onlyInitializing()
81
64
  {
82
- ComponentStorage storage $ = _getComponentStorage();
83
- initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
84
-
85
- // set unique name of component
86
- $._name = name;
87
- $._isNftInterceptor = isInterceptor;
65
+ initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, registryData);
88
66
 
89
67
  // set and check linked instance
90
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
91
- $._instance = IInstance(instanceInfo.objectAddress);
68
+ ComponentStorage storage $ = _getComponentStorage();
69
+ $._instance = IInstance(
70
+ getRegistry().getObjectInfo(instanceNftId).objectAddress);
71
+
92
72
  if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
93
- revert ErrorComponentNotInstance(instanceNftId, instanceInfo.objectAddress);
73
+ revert ErrorComponentNotInstance(instanceNftId);
94
74
  }
95
75
 
96
76
  // initialize AccessManagedUpgradeable
97
77
  __AccessManaged_init($._instance.authority());
98
78
 
99
- // set linked services
100
- VersionPart gifVersion = $._instance.getMajorVersion();
101
- $._instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), gifVersion));
79
+ // set component state
80
+ $._name = name;
81
+ $._isNftInterceptor = isInterceptor;
102
82
  $._instanceReader = $._instance.getInstanceReader();
103
- $._productService = IProductService(getRegistry().getServiceAddress(PRODUCT(), gifVersion));
104
-
105
- // set wallet and token
106
83
  $._wallet = address(this);
107
84
  $._token = IERC20Metadata(token);
108
85
 
109
86
  registerInterface(type(IComponent).interfaceId);
110
87
  }
111
88
 
112
- /// @dev callback function for nft transfers. may only be called by chain nft contract.
113
- /// default implementation is empty. overriding functions MUST add onlyChainNft modifier
114
- function nftTransferFrom(address from, address to, uint256 tokenId)
115
- external
116
- virtual override
117
- onlyChainNft()
118
- { }
119
-
120
- // TODO discuss replacement with modifier restricted from accessmanaged
121
89
  function lock() external onlyOwner override {
122
- _getComponentStorage()._instanceService.setTargetLocked(getName(), true);
90
+ IInstanceService(_getServiceAddress(INSTANCE())).setTargetLocked(getName(), true);
123
91
  }
124
92
 
125
93
  function unlock() external onlyOwner override {
126
- _getComponentStorage()._instanceService.setTargetLocked(getName(), false);
94
+ IInstanceService(_getServiceAddress(INSTANCE())).setTargetLocked(getName(), false);
127
95
  }
128
96
 
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
97
  function setWallet(address newWallet)
149
98
  external
150
99
  override
@@ -159,8 +108,9 @@ abstract contract Component is
159
108
  if (newWallet == address(0)) {
160
109
  revert ErrorComponentWalletAddressZero();
161
110
  }
111
+
162
112
  if (newWallet == currentWallet) {
163
- revert ErrorComponentWalletAddressIsSameAsCurrent(newWallet);
113
+ revert ErrorComponentWalletAddressIsSameAsCurrent();
164
114
  }
165
115
 
166
116
  if (currentBalance > 0) {
@@ -177,7 +127,7 @@ abstract contract Component is
177
127
 
178
128
  // effects
179
129
  $._wallet = newWallet;
180
- emit LogComponentWalletAddressChanged(newWallet);
130
+ emit LogComponentWalletAddressChanged(currentWallet, newWallet);
181
131
 
182
132
  // interactions
183
133
  if (currentBalance > 0) {
@@ -192,11 +142,41 @@ abstract contract Component is
192
142
  }
193
143
  }
194
144
 
195
- function getWallet()
196
- public
197
- view
145
+ function setProductNftId(NftId productNftId)
146
+ external
198
147
  override
199
- returns (address walletAddress)
148
+ {
149
+ ComponentStorage storage $ = _getComponentStorage();
150
+
151
+ // verify caller is product service
152
+ if(msg.sender != _getServiceAddress(PRODUCT())) {
153
+ revert ErrorComponentNotProductService(msg.sender);
154
+ }
155
+
156
+ // verify component is not yet linked to a product
157
+ if($._productNftId.gtz()) {
158
+ revert ErrorComponentProductNftAlreadySet();
159
+ }
160
+
161
+ $._productNftId = productNftId;
162
+ }
163
+
164
+ /// @dev callback function for nft transfers
165
+ /// may only be called by chain nft contract.
166
+ /// do not override this function to implement business logic for handling transfers
167
+ /// override internal function _nftTransferFrom instead
168
+ function nftTransferFrom(address from, address to, uint256 tokenId)
169
+ external
170
+ virtual override
171
+ {
172
+ if(msg.sender != getRegistry().getChainNftAddress()) {
173
+ revert ErrorComponentNotChainNft(msg.sender);
174
+ }
175
+
176
+ _nftTransferFrom(from, to, tokenId);
177
+ }
178
+
179
+ function getWallet() public view override returns (address walletAddress)
200
180
  {
201
181
  return _getComponentStorage()._wallet;
202
182
  }
@@ -213,10 +193,6 @@ abstract contract Component is
213
193
  return _getComponentStorage()._instance;
214
194
  }
215
195
 
216
- function getInstanceReader() public view returns (InstanceReader reader) {
217
- return _getComponentStorage()._instanceReader;
218
- }
219
-
220
196
  function getName() public view override returns(string memory name) {
221
197
  return _getComponentStorage()._name;
222
198
  }
@@ -225,12 +201,41 @@ abstract contract Component is
225
201
  return _getComponentStorage()._productNftId;
226
202
  }
227
203
 
228
- function getInstanceService() public view returns (IInstanceService) {
229
- return _getComponentStorage()._instanceService;
204
+ function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
205
+ info = _getInstanceReader().getComponentInfo(getNftId());
206
+
207
+ // fallback to initial info (wallet is always != address(0))
208
+ if(info.wallet == address(0)) {
209
+ info = _getInitialInfo();
210
+ }
230
211
  }
231
212
 
232
- function getProductService() public view returns (IProductService) {
233
- return _getComponentStorage()._productService;
213
+ /// @dev defines initial component specification
214
+ /// overwrite this function according to your use case
215
+ function _getInitialInfo()
216
+ internal
217
+ view
218
+ virtual
219
+ returns (IComponents.ComponentInfo memory info)
220
+ { }
221
+
222
+
223
+ /// @dev internal function for nft transfers.
224
+ /// handling logic that deals with nft transfers need to overwrite this function
225
+ function _nftTransferFrom(address from, address to, uint256 tokenId)
226
+ internal
227
+ virtual
228
+ { }
229
+
230
+ /// @dev returns reader for linked instance
231
+ function _getInstanceReader() internal view returns (InstanceReader reader) {
232
+ return _getComponentStorage()._instanceReader;
234
233
  }
235
234
 
235
+ /// @dev returns the service address for the specified domain
236
+ /// gets address via lookup from registry using the major version form the linked instance
237
+ function _getServiceAddress(ObjectType domain) internal view returns (address service) {
238
+ VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
239
+ return getRegistry().getServiceAddress(domain, majorVersion);
240
+ }
236
241
  }
@@ -8,6 +8,7 @@ import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
8
8
  import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
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";
@@ -17,7 +18,7 @@ import {TokenHandler} from "../shared/TokenHandler.sol";
17
18
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
19
  import {UFixed} from "../types/UFixed.sol";
19
20
  import {DistributorType} from "../types/DistributorType.sol";
20
- import {Timestamp} from "../types/Timestamp.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
21
22
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
22
23
 
23
24
 
@@ -29,6 +30,7 @@ abstract contract Distribution is
29
30
  bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
30
31
 
31
32
  struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
32
34
  Fee _distributionFee;
33
35
  TokenHandler _tokenHandler;
34
36
  IDistributionService _distributionService;
@@ -40,18 +42,20 @@ abstract contract Distribution is
40
42
  NftId instanceNftId,
41
43
  string memory name,
42
44
  address token,
45
+ Fee memory minDistributionOwnerFee,
43
46
  Fee memory distributionFee,
44
47
  address initialOwner,
45
- bytes memory data
48
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
46
49
  )
47
50
  public
48
51
  virtual
49
52
  onlyInitializing()
50
53
  {
51
- initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
54
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
52
55
 
53
56
  DistributionStorage storage $ = _getDistributionStorage();
54
57
  // TODO add validation
58
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
55
59
  $._distributionFee = distributionFee;
56
60
  $._tokenHandler = new TokenHandler(token);
57
61
  $._distributionService = getInstance().getDistributionService();
@@ -60,6 +64,7 @@ abstract contract Distribution is
60
64
  }
61
65
 
62
66
  function setFees(
67
+ Fee memory minDistributionOwnerFee,
63
68
  Fee memory distributionFee
64
69
  )
65
70
  external
@@ -67,7 +72,7 @@ abstract contract Distribution is
67
72
  onlyOwner
68
73
  restricted()
69
74
  {
70
- _getDistributionStorage()._distributionService.setFees(distributionFee);
75
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
71
76
  }
72
77
 
73
78
  function getDistributionFee() external view returns (Fee memory distributionFee) {
@@ -141,7 +146,7 @@ abstract contract Distribution is
141
146
  * @dev lets distributors create referral codes.
142
147
  * referral codes need to be unique
143
148
  */
144
- function createReferral(
149
+ function _createReferral(
145
150
  NftId distributorNftId,
146
151
  string memory code,
147
152
  UFixed discountPercentage,
@@ -149,7 +154,7 @@ abstract contract Distribution is
149
154
  Timestamp expiryAt,
150
155
  bytes memory data
151
156
  )
152
- public // TODO: internal
157
+ internal
153
158
  returns (ReferralId referralId)
154
159
  {
155
160
  DistributionStorage storage $ = _getDistributionStorage();
@@ -162,23 +167,6 @@ abstract contract Distribution is
162
167
  data);
163
168
  }
164
169
 
165
- function calculateFeeAmount(
166
- ReferralId referralId,
167
- uint256 netPremiumAmount
168
- )
169
- external
170
- view
171
- virtual override
172
- returns (uint256 feeAmount)
173
- {
174
- // TODO: this is only if referralId is not valid
175
- ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
176
- Fee memory fee = setupInfo.distributionFee;
177
- (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
178
- // TODO: use this?
179
- // return _distributionService.calculateFeeAmount(referralId, premiumAmount);
180
- }
181
-
182
170
  function isDistributor(address candidate)
183
171
  public
184
172
  view
@@ -206,7 +194,7 @@ abstract contract Distribution is
206
194
  )
207
195
  {
208
196
  ReferralId referralId = getReferralId(referralCode);
209
- return getInstanceReader().getDiscountPercentage(referralId);
197
+ return _getInstanceReader().getDiscountPercentage(referralId);
210
198
  }
211
199
 
212
200
 
@@ -260,11 +248,6 @@ abstract contract Distribution is
260
248
  // default is no action
261
249
  }
262
250
 
263
- function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
264
- // default is invalid
265
- return false;
266
- }
267
-
268
251
  function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
269
252
  InstanceReader reader = getInstance().getInstanceReader();
270
253
  setupInfo = reader.getDistributionSetupInfo(getNftId());
@@ -280,13 +263,15 @@ abstract contract Distribution is
280
263
  return ISetup.DistributionSetupInfo(
281
264
  zeroNftId(),
282
265
  $._tokenHandler,
266
+ $._minDistributionOwnerFee,
283
267
  $._distributionFee,
284
- address(this)
268
+ address(this),
269
+ 0
285
270
  );
286
271
  }
287
272
 
288
273
 
289
- function nftTransferFrom(address from, address to, uint256 tokenId) external virtual override (Component, ITransferInterceptor) {
274
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
290
275
  // keep track of distributor nft owner
291
276
  emit LogDistributorUpdated(to, msg.sender);
292
277
  DistributionStorage storage $ = _getDistributionStorage();
@@ -3,48 +3,72 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {IRegisterable} from "../shared/IRegisterable.sol";
6
+ import {IComponents} from "../instance/module/IComponents.sol";
7
7
  import {IInstance} from "../instance/IInstance.sol";
8
8
  import {IInstanceService} from "../instance/IInstanceService.sol";
9
9
  import {IProductService} from "../instance/service/IProductService.sol";
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
10
11
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
12
  import {NftId} from "../types/NftId.sol";
13
+ import {ObjectType} from "../types/ObjectType.sol";
12
14
 
15
+ /// @dev component base class
16
+ /// component examples are product, distribution, pool and oracle
13
17
  interface IComponent is
14
18
  IRegisterable,
15
19
  ITransferInterceptor
16
20
  {
17
-
18
21
  error ErrorComponentNotChainNft(address caller);
19
22
  error ErrorComponentNotProductService(address caller);
20
- error ErrorComponentNotInstance(NftId instanceNftId, address instance);
23
+ error ErrorComponentNotInstance(NftId instanceNftId);
21
24
  error ErrorComponentProductNftAlreadySet();
25
+
22
26
  error ErrorComponentWalletAddressZero();
23
- error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
27
+ error ErrorComponentWalletAddressIsSameAsCurrent();
24
28
  error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
25
- error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
26
29
 
27
- event LogComponentWalletAddressChanged(address newWallet);
30
+ event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
28
31
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
29
32
 
30
- function getName() external view returns (string memory name);
31
-
32
- // TODO remove and replace with accessmanaged target locking mechanism
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
33
35
  function lock() external;
34
- function unlock() external;
35
36
 
36
- function getToken() external view returns (IERC20Metadata token);
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;
37
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
38
45
  function setWallet(address walletAddress) external;
39
- function getWallet() external view returns (address walletAddress);
40
46
 
41
- function isNftInterceptor() external view returns(bool isInterceptor);
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);
42
56
 
57
+ /// @dev defines the instance to which this component is linked to
43
58
  function getInstance() external view returns (IInstance instance);
44
59
 
45
- function setProductNftId(NftId productNftId) external;
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
46
66
  function getProductNftId() external view returns (NftId productNftId);
47
67
 
48
- function getInstanceService() external view returns (IInstanceService);
49
- function getProductService() external view returns (IProductService);
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);
50
74
  }
@@ -17,6 +17,7 @@ interface IDistributionComponent is IComponent {
17
17
  function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
18
18
 
19
19
  function setFees(
20
+ Fee memory minDistributionOwnerFee,
20
21
  Fee memory distributionFee
21
22
  ) external;
22
23
 
@@ -44,25 +45,6 @@ interface IDistributionComponent is IComponent {
44
45
  bytes memory data
45
46
  ) external;
46
47
 
47
- /**
48
- * @dev lets distributors create referral codes.
49
- * referral codes need to be unique
50
- * distributor is identified via msg.sender.
51
- */
52
- function createReferral(
53
- NftId distributorNftId,
54
- string memory code,
55
- UFixed discountPercentage,
56
- uint32 maxReferrals,
57
- Timestamp expiryAt,
58
- bytes memory data
59
- ) external returns (ReferralId referralId);
60
-
61
- function calculateFeeAmount(
62
- ReferralId referralId,
63
- uint256 netPremiumAmount
64
- ) external view returns (uint256 feeAmount);
65
-
66
48
  function calculateRenewalFeeAmount(
67
49
  ReferralId referralId,
68
50
  uint256 netPremiumAmount
@@ -92,9 +74,6 @@ interface IDistributionComponent is IComponent {
92
74
  string memory referralCode
93
75
  ) external returns (ReferralId referralId);
94
76
 
95
- /// @dev returns true iff the referral id is valid
96
- function referralIsValid(ReferralId referralId) external view returns (bool isValid);
97
-
98
77
  /// @dev returns true iff the component needs to be called when selling/renewing policis
99
78
  function isVerifying() external view returns (bool verifying);
100
79
  }