@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f4f2d93-430

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