@etherisc/gif-next 0.0.2-be8b468-276 → 0.0.2-bfb44e0-483

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 (293) hide show
  1. package/README.md +136 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +897 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +972 -209
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +191 -152
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +752 -6
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +676 -31
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +661 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +875 -299
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +695 -180
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2056 -113
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +214 -20
  47. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  48. package/artifacts/contracts/instance/Instance.sol/Instance.json +559 -752
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +179 -76
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +550 -77
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +194 -32
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  58. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  59. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  60. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/base/ComponentService.sol/ComponentService.json} +321 -9
  61. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  69. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1117 -0
  77. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1318 -0
  79. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +586 -0
  81. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +576 -41
  83. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +198 -24
  85. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +223 -51
  87. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +798 -0
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +229 -19
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +784 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +34 -83
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +44 -246
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1378 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +642 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +957 -0
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +574 -0
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1007 -0
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +574 -0
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +208 -224
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +240 -94
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +222 -330
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +221 -107
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +181 -105
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +150 -29
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +37 -0
  133. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +18 -5
  137. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +69 -0
  139. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  140. package/artifacts/contracts/shared/IService.sol/IService.json +32 -19
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +156 -11
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +269 -0
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +156 -6
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -11
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +105 -0
  153. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  154. package/artifacts/contracts/shared/Service.sol/Service.json +178 -19
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -2
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +152 -11
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  165. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestService.sol/TestService.json +196 -37
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -8
  171. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  172. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  173. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  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/Key32.sol/Key32Lib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  184. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  187. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  189. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  191. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  193. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  199. package/contracts/components/Component.sol +236 -0
  200. package/contracts/components/Distribution.sol +198 -66
  201. package/contracts/components/IComponent.sol +50 -0
  202. package/contracts/components/IDistributionComponent.sol +58 -4
  203. package/contracts/components/IPoolComponent.sol +54 -29
  204. package/contracts/components/IProductComponent.sol +7 -3
  205. package/contracts/components/Pool.sol +153 -157
  206. package/contracts/components/Product.sol +109 -128
  207. package/contracts/instance/BundleManager.sol +125 -0
  208. package/contracts/instance/Cloneable.sol +46 -0
  209. package/contracts/instance/IInstance.sol +63 -10
  210. package/contracts/instance/IInstanceService.sol +33 -4
  211. package/contracts/instance/Instance.sol +104 -266
  212. package/contracts/instance/InstanceAccessManager.sol +87 -78
  213. package/contracts/instance/InstanceReader.sol +29 -26
  214. package/contracts/instance/InstanceService.sol +361 -90
  215. package/contracts/instance/InstanceServiceManager.sol +10 -12
  216. package/contracts/instance/ObjectManager.sol +84 -0
  217. package/contracts/instance/base/ComponentService.sol +134 -0
  218. package/contracts/instance/module/IAccess.sol +27 -18
  219. package/contracts/instance/module/IBundle.sol +1 -0
  220. package/contracts/instance/module/ISetup.sol +7 -3
  221. package/contracts/instance/service/ApplicationService.sol +268 -0
  222. package/contracts/instance/service/BundleService.sol +298 -0
  223. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  224. package/contracts/instance/service/DistributionService.sol +214 -36
  225. package/contracts/instance/service/DistributionServiceManager.sol +10 -12
  226. package/contracts/instance/service/IApplicationService.sol +82 -0
  227. package/contracts/instance/service/IBundleService.sol +54 -0
  228. package/contracts/instance/service/IDistributionService.sol +53 -0
  229. package/contracts/instance/service/IPolicyService.sol +88 -0
  230. package/contracts/instance/service/IPoolService.sol +6 -23
  231. package/contracts/instance/service/IProductService.sol +6 -73
  232. package/contracts/instance/service/PolicyService.sol +524 -0
  233. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  234. package/contracts/instance/service/PoolService.sol +109 -0
  235. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  236. package/contracts/instance/service/ProductService.sol +233 -0
  237. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  238. package/contracts/registry/ChainNft.sol +1 -1
  239. package/contracts/registry/IRegistry.sol +38 -33
  240. package/contracts/registry/IRegistryService.sol +45 -13
  241. package/contracts/registry/Registry.sol +223 -250
  242. package/contracts/registry/RegistryAccessManager.sol +216 -0
  243. package/contracts/registry/RegistryService.sol +86 -224
  244. package/contracts/registry/RegistryServiceManager.sol +18 -36
  245. package/contracts/registry/ReleaseManager.sol +332 -0
  246. package/contracts/registry/TokenRegistry.sol +11 -9
  247. package/contracts/shared/ERC165.sol +12 -11
  248. package/contracts/shared/INftOwnable.sol +12 -6
  249. package/contracts/shared/IPolicyHolder.sol +26 -0
  250. package/contracts/shared/IRegisterable.sol +4 -6
  251. package/contracts/shared/IRegistryLinked.sol +15 -0
  252. package/contracts/shared/IService.sol +2 -1
  253. package/contracts/shared/IVersionable.sol +2 -2
  254. package/contracts/shared/NftOwnable.sol +114 -60
  255. package/contracts/shared/PolicyHolder.sol +81 -0
  256. package/contracts/shared/ProxyManager.sol +6 -5
  257. package/contracts/shared/Registerable.sol +15 -24
  258. package/contracts/shared/RegistryLinked.sol +64 -0
  259. package/contracts/shared/Service.sol +19 -13
  260. package/contracts/shared/Versionable.sol +3 -2
  261. package/contracts/test/TestRegisterable.sol +1 -1
  262. package/contracts/test/TestService.sol +4 -3
  263. package/contracts/types/DistributorType.sol +2 -2
  264. package/contracts/types/NftIdSet.sol +26 -24
  265. package/contracts/types/ObjectType.sol +6 -2
  266. package/contracts/types/RoleId.sol +10 -8
  267. package/package.json +3 -3
  268. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  269. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  270. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  271. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  272. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  273. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  274. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  275. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  276. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  277. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  278. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  279. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  280. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  281. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  282. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  283. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  284. package/contracts/components/BaseComponent.sol +0 -91
  285. package/contracts/components/IBaseComponent.sol +0 -25
  286. package/contracts/instance/AccessManagedSimple.sol +0 -115
  287. package/contracts/instance/AccessManagerSimple.sol +0 -692
  288. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  289. package/contracts/instance/base/ComponentServiceBase.sol +0 -39
  290. package/contracts/instance/base/IInstanceBase.sol +0 -23
  291. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  292. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  293. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,236 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
7
+
8
+ import {IComponent} from "./IComponent.sol";
9
+ import {IProductService} from "../instance/service/IProductService.sol";
10
+ import {IInstanceService} from "../instance/IInstanceService.sol";
11
+ import {IInstance} from "../instance/IInstance.sol";
12
+ import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
13
+ import {InstanceReader} from "../instance/InstanceReader.sol";
14
+ import {IRegistry} from "../registry/IRegistry.sol";
15
+ import {NftId} from "../types/NftId.sol";
16
+ import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
17
+ import {VersionPart} from "../types/Version.sol";
18
+ import {Registerable} from "../shared/Registerable.sol";
19
+ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
+ import {IAccess} from "../instance/module/IAccess.sol";
21
+
22
+ // TODO discuss to inherit from oz accessmanaged
23
+ // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
24
+ // same pattern as for Service which is also upgradeable
25
+ abstract contract Component is
26
+ Registerable,
27
+ IComponent,
28
+ AccessManagedUpgradeable
29
+ {
30
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
31
+ bytes32 public constant CONTRACT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
32
+
33
+ struct ComponentStorage {
34
+ IInstance _instance; // instance for this component
35
+ InstanceReader _instanceReader; // instance reader for this component
36
+ string _name; // unique (per instance) component name
37
+ IERC20Metadata _token; // token for this component
38
+ address _wallet; // wallet for this component (default = component contract itself)
39
+ bool _isNftInterceptor; // declares if component is involved in nft transfers
40
+ IInstanceService _instanceService; // instance service for this component
41
+
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
+ }
61
+
62
+ function _getComponentStorage() private pure returns (ComponentStorage storage $) {
63
+ assembly {
64
+ $.slot := CONTRACT_LOCATION_V1
65
+ }
66
+ }
67
+
68
+ function initializeComponent(
69
+ address registry,
70
+ NftId instanceNftId,
71
+ string memory name,
72
+ address token,
73
+ ObjectType componentType,
74
+ bool isInterceptor,
75
+ address initialOwner,
76
+ bytes memory data
77
+ )
78
+ public
79
+ virtual
80
+ onlyInitializing()
81
+ {
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;
88
+
89
+ // set and check linked instance
90
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
91
+ $._instance = IInstance(instanceInfo.objectAddress);
92
+ if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
93
+ revert ErrorComponentNotInstance(instanceNftId, instanceInfo.objectAddress);
94
+ }
95
+
96
+ // initialize AccessManagedUpgradeable
97
+ __AccessManaged_init($._instance.authority());
98
+
99
+ // set linked services
100
+ VersionPart gifVersion = $._instance.getMajorVersion();
101
+ $._instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), gifVersion));
102
+ $._instanceReader = $._instance.getInstanceReader();
103
+ $._productService = IProductService(getRegistry().getServiceAddress(PRODUCT(), gifVersion));
104
+
105
+ // set wallet and token
106
+ $._wallet = address(this);
107
+ $._token = IERC20Metadata(token);
108
+
109
+ registerInterface(type(IComponent).interfaceId);
110
+ }
111
+
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
+ function lock() external onlyOwner override {
122
+ _getComponentStorage()._instanceService.setTargetLocked(getName(), true);
123
+ }
124
+
125
+ function unlock() external onlyOwner override {
126
+ _getComponentStorage()._instanceService.setTargetLocked(getName(), false);
127
+ }
128
+
129
+ // only product service may set product nft id during registration of product setup
130
+ function setProductNftId(NftId productNftId)
131
+ external
132
+ override
133
+ onlyProductService()
134
+ {
135
+ ComponentStorage storage $ = _getComponentStorage();
136
+
137
+ if($._productNftId.gtz()) {
138
+ revert ErrorComponentProductNftAlreadySet();
139
+ }
140
+
141
+ $._productNftId = productNftId;
142
+ }
143
+
144
+ /// @dev Sets the wallet address for the component.
145
+ /// if the current wallet has tokens, these will be transferred.
146
+ /// if the new wallet address is externally owned, an approval from the
147
+ /// owner of the external wallet for the component to move all tokens must exist.
148
+ function setWallet(address newWallet)
149
+ external
150
+ override
151
+ onlyOwner
152
+ {
153
+ ComponentStorage storage $ = _getComponentStorage();
154
+
155
+ address currentWallet = $._wallet;
156
+ uint256 currentBalance = $._token.balanceOf(currentWallet);
157
+
158
+ // checks
159
+ if (newWallet == address(0)) {
160
+ revert ErrorComponentWalletAddressZero();
161
+ }
162
+ if (newWallet == currentWallet) {
163
+ revert ErrorComponentWalletAddressIsSameAsCurrent(newWallet);
164
+ }
165
+
166
+ if (currentBalance > 0) {
167
+ if (currentWallet == address(this)) {
168
+ // move tokens from component smart contract to external wallet
169
+ } else {
170
+ // move tokens from external wallet to component smart contract or another external wallet
171
+ uint256 allowance = $._token.allowance(currentWallet, address(this));
172
+ if (allowance < currentBalance) {
173
+ revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
174
+ }
175
+ }
176
+ }
177
+
178
+ // effects
179
+ $._wallet = newWallet;
180
+ emit LogComponentWalletAddressChanged(newWallet);
181
+
182
+ // interactions
183
+ if (currentBalance > 0) {
184
+ // transfer tokens from current wallet to new wallet
185
+ if (currentWallet == address(this)) {
186
+ // transferFrom requires self allowance too
187
+ $._token.approve(address(this), currentBalance);
188
+ }
189
+
190
+ SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
191
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
192
+ }
193
+ }
194
+
195
+ function getWallet()
196
+ public
197
+ view
198
+ override
199
+ returns (address walletAddress)
200
+ {
201
+ return _getComponentStorage()._wallet;
202
+ }
203
+
204
+ function getToken() public view override returns (IERC20Metadata token) {
205
+ return _getComponentStorage()._token;
206
+ }
207
+
208
+ function isNftInterceptor() public view override returns(bool isInterceptor) {
209
+ return _getComponentStorage()._isNftInterceptor;
210
+ }
211
+
212
+ function getInstance() public view override returns (IInstance instance) {
213
+ return _getComponentStorage()._instance;
214
+ }
215
+
216
+ function getInstanceReader() public view returns (InstanceReader reader) {
217
+ return _getComponentStorage()._instanceReader;
218
+ }
219
+
220
+ function getName() public view override returns(string memory name) {
221
+ return _getComponentStorage()._name;
222
+ }
223
+
224
+ function getProductNftId() public view override returns (NftId productNftId) {
225
+ return _getComponentStorage()._productNftId;
226
+ }
227
+
228
+ function getInstanceService() public view returns (IInstanceService) {
229
+ return _getComponentStorage()._instanceService;
230
+ }
231
+
232
+ function getProductService() public view returns (IProductService) {
233
+ return _getComponentStorage()._productService;
234
+ }
235
+
236
+ }
@@ -5,9 +5,9 @@ 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
7
  import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
- import {ReferralId} from "../types/Referral.sol";
8
+ import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
- import {BaseComponent} from "./BaseComponent.sol";
10
+ import {Component} from "./Component.sol";
11
11
  import {IDistributionComponent} from "./IDistributionComponent.sol";
12
12
  import {IRegistry} from "../registry/IRegistry.sol";
13
13
  import {IRegisterable} from "../shared/IRegisterable.sol";
@@ -15,55 +15,151 @@ import {ISetup} from "../instance/module/ISetup.sol";
15
15
  import {Registerable} from "../shared/Registerable.sol";
16
16
  import {TokenHandler} from "../shared/TokenHandler.sol";
17
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
+ import {UFixed} from "../types/UFixed.sol";
19
+ import {DistributorType} from "../types/DistributorType.sol";
20
+ import {Timestamp} from "../types/Timestamp.sol";
18
21
 
19
- contract Distribution is
20
- BaseComponent,
22
+
23
+ abstract contract Distribution is
24
+ Component,
21
25
  IDistributionComponent
22
26
  {
23
- using NftIdLib for NftId;
24
-
25
- Fee internal _initialDistributionFee;
26
- bool internal _isVerifying;
27
-
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
- _;
27
+ struct DistributionStorage {
28
+ Fee _distributionFee;
29
+ TokenHandler _tokenHandler;
30
+ IDistributionService _distributionService;
31
+ mapping(address distributor => NftId distributorNftId) _distributorNftId;
36
32
  }
37
33
 
38
- constructor(
34
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
35
+ bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
36
+
37
+ function initializeDistribution(
39
38
  address registry,
40
39
  NftId instanceNftId,
41
- // TODO refactor into tokenNftId
40
+ string memory name,
42
41
  address token,
43
- bool verifying,
44
42
  Fee memory distributionFee,
45
- address initialOwner
43
+ address initialOwner,
44
+ bytes memory data
46
45
  )
47
- BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
46
+ public
47
+ virtual
48
+ onlyInitializing()
48
49
  {
49
- _isVerifying = verifying;
50
- _initialDistributionFee = distributionFee;
50
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
51
51
 
52
- _distributionService = _instance.getDistributionService();
53
- // TODO: reactivate when services are available again
54
- // _productService = _instance.getProductService();
52
+ DistributionStorage storage $ = _getDistributionStorage();
53
+ // TODO add validation
54
+ $._distributionFee = distributionFee;
55
+ $._tokenHandler = new TokenHandler(token);
56
+ $._distributionService = getInstance().getDistributionService();
55
57
 
56
- _registerInterface(type(IDistributionComponent).interfaceId);
58
+ registerInterface(type(IDistributionComponent).interfaceId);
57
59
  }
58
60
 
59
-
60
61
  function setFees(
61
62
  Fee memory distributionFee
62
63
  )
63
64
  external
64
65
  override
66
+ onlyOwner
67
+ restricted()
68
+ {
69
+ _getDistributionStorage()._distributionService.setFees(distributionFee);
70
+ }
71
+
72
+ function getDistributionFee() external view returns (Fee memory distributionFee) {
73
+ DistributionStorage storage $ = _getDistributionStorage();
74
+ return $._distributionFee;
75
+ }
76
+
77
+ function createDistributorType(
78
+ string memory name,
79
+ UFixed minDiscountPercentage,
80
+ UFixed maxDiscountPercentage,
81
+ UFixed commissionPercentage,
82
+ uint32 maxReferralCount,
83
+ uint32 maxReferralLifetime,
84
+ bool allowSelfReferrals,
85
+ bool allowRenewals,
86
+ bytes memory data
87
+ )
88
+ public
89
+ returns (DistributorType distributorType)
90
+ {
91
+ DistributionStorage storage $ = _getDistributionStorage();
92
+ distributorType = $._distributionService.createDistributorType(
93
+ name,
94
+ minDiscountPercentage,
95
+ maxDiscountPercentage,
96
+ commissionPercentage,
97
+ maxReferralCount,
98
+ maxReferralLifetime,
99
+ allowSelfReferrals,
100
+ allowRenewals,
101
+ data);
102
+ }
103
+
104
+ function createDistributor(
105
+ address distributor,
106
+ DistributorType distributorType,
107
+ bytes memory data
108
+ )
109
+ public
110
+ returns(NftId distributorNftId)
111
+ {
112
+ DistributionStorage storage $ = _getDistributionStorage();
113
+ require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
114
+
115
+ distributorNftId = $._distributionService.createDistributor(
116
+ distributor,
117
+ distributorType,
118
+ data);
119
+
120
+ $._distributorNftId[distributor] = distributorNftId;
121
+ }
122
+
123
+ function updateDistributorType(
124
+ NftId distributorNftId,
125
+ DistributorType distributorType,
126
+ bytes memory data
127
+ )
128
+ public
129
+ // TODO figure out what we need for authz
130
+ // and add it
65
131
  {
66
- _distributionService.setFees(distributionFee);
132
+ DistributionStorage storage $ = _getDistributionStorage();
133
+ $._distributionService.updateDistributorType(
134
+ distributorNftId,
135
+ distributorType,
136
+ data);
137
+ }
138
+
139
+ /**
140
+ * @dev lets distributors create referral codes.
141
+ * referral codes need to be unique
142
+ */
143
+ function createReferral(
144
+ NftId distributorNftId,
145
+ string memory code,
146
+ UFixed discountPercentage,
147
+ uint32 maxReferrals,
148
+ Timestamp expiryAt,
149
+ bytes memory data
150
+ )
151
+ public
152
+ // TODO add authz (only active distributor)
153
+ returns (ReferralId referralId)
154
+ {
155
+ DistributionStorage storage $ = _getDistributionStorage();
156
+ referralId = $._distributionService.createReferral(
157
+ distributorNftId,
158
+ code,
159
+ discountPercentage,
160
+ maxReferrals,
161
+ expiryAt,
162
+ data);
67
163
  }
68
164
 
69
165
  function calculateFeeAmount(
@@ -78,9 +174,53 @@ contract Distribution is
78
174
  ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
79
175
  Fee memory fee = setupInfo.distributionFee;
80
176
  (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
177
+ // TODO: use this?
178
+ // return _distributionService.calculateFeeAmount(referralId, premiumAmount);
179
+ }
180
+
181
+ function isDistributor(address candidate)
182
+ public
183
+ view
184
+ returns (bool)
185
+ {
186
+ DistributionStorage storage $ = _getDistributionStorage();
187
+ return $._distributorNftId[candidate].gtz();
188
+ }
189
+
190
+ function getDistributorNftId(address distributor)
191
+ public
192
+ view
193
+ returns (NftId distributorNftId)
194
+ {
195
+ DistributionStorage storage $ = _getDistributionStorage();
196
+ return $._distributorNftId[distributor];
197
+ }
198
+
199
+ function getDiscountPercentage(string memory referralCode)
200
+ external
201
+ view
202
+ returns (
203
+ UFixed discountPercentage,
204
+ ReferralStatus status
205
+ )
206
+ {
207
+ ReferralId referralId = getReferralId(referralCode);
208
+ return getInstanceReader().getDiscountPercentage(referralId);
81
209
  }
82
210
 
83
211
 
212
+ function getReferralId(
213
+ string memory referralCode
214
+ )
215
+ public
216
+ view
217
+ returns (ReferralId referralId)
218
+ {
219
+ return ReferralLib.toReferralId(
220
+ getNftId(),
221
+ referralCode);
222
+ }
223
+
84
224
  function calculateRenewalFeeAmount(
85
225
  ReferralId referralId,
86
226
  uint256 netPremiumAmount
@@ -96,13 +236,15 @@ contract Distribution is
96
236
 
97
237
  function processSale(
98
238
  ReferralId referralId,
99
- uint256 feeAmount
239
+ uint256 premiumAmount
100
240
  )
101
241
  external
102
- onlyProductService
242
+ onlyOwner
243
+ restricted()
103
244
  virtual override
104
245
  {
105
- // default is no action
246
+ DistributionStorage storage $ = _getDistributionStorage();
247
+ $._distributionService.processSale(referralId, premiumAmount);
106
248
  }
107
249
 
108
250
  function processRenewal(
@@ -110,7 +252,8 @@ contract Distribution is
110
252
  uint256 feeAmount
111
253
  )
112
254
  external
113
- onlyProductService
255
+ onlyOwner
256
+ restricted()
114
257
  virtual override
115
258
  {
116
259
  // default is no action
@@ -121,46 +264,35 @@ contract Distribution is
121
264
  return false;
122
265
  }
123
266
 
124
- function getInitialSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
125
- return ISetup.DistributionSetupInfo(
126
- _productNftId,
127
- TokenHandler(address(_token)),
128
- _initialDistributionFee,
129
- _isVerifying,
130
- address(0) // TODO: use correct wallet
131
- );
267
+ function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
268
+ InstanceReader reader = getInstance().getInstanceReader();
269
+ setupInfo = reader.getDistributionSetupInfo(getNftId());
270
+
271
+ // fallback to initial setup info (wallet is always != address(0))
272
+ if(setupInfo.wallet == address(0)) {
273
+ setupInfo = _getInitialSetupInfo();
274
+ }
132
275
  }
133
276
 
134
- function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
135
- InstanceReader reader = _instance.getInstanceReader();
136
- return reader.getDistributionSetupInfo(getNftId());
277
+ function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
278
+ DistributionStorage storage $ = _getDistributionStorage();
279
+ return ISetup.DistributionSetupInfo(
280
+ zeroNftId(),
281
+ $._tokenHandler,
282
+ $._distributionFee,
283
+ address(this)
284
+ );
137
285
  }
138
286
 
139
287
 
140
288
  /// @dev returns true iff the component needs to be called when selling/renewing policis
141
289
  function isVerifying() external view returns (bool verifying) {
142
- return _isVerifying;
290
+ return true;
143
291
  }
144
292
 
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
- );
293
+ function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
294
+ assembly {
295
+ $.slot := DISTRIBUTION_STORAGE_LOCATION_V1
296
+ }
165
297
  }
166
298
  }
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IRegisterable} from "../shared/IRegisterable.sol";
7
+ import {IInstance} from "../instance/IInstance.sol";
8
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
+ import {IProductService} from "../instance/service/IProductService.sol";
10
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+
13
+ interface IComponent is
14
+ IRegisterable,
15
+ ITransferInterceptor
16
+ {
17
+
18
+ error ErrorComponentNotChainNft(address caller);
19
+ error ErrorComponentNotProductService(address caller);
20
+ error ErrorComponentNotInstance(NftId instanceNftId, address instance);
21
+ error ErrorComponentProductNftAlreadySet();
22
+ error ErrorComponentWalletAddressZero();
23
+ error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
24
+ error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
25
+ error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
26
+
27
+ event LogComponentWalletAddressChanged(address newWallet);
28
+ event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
29
+
30
+ function getName() external view returns (string memory name);
31
+
32
+ // TODO remove and replace with accessmanaged target locking mechanism
33
+ function lock() external;
34
+ function unlock() external;
35
+
36
+ function getToken() external view returns (IERC20Metadata token);
37
+
38
+ function setWallet(address walletAddress) external;
39
+ function getWallet() external view returns (address walletAddress);
40
+
41
+ function isNftInterceptor() external view returns(bool isInterceptor);
42
+
43
+ function getInstance() external view returns (IInstance instance);
44
+
45
+ function setProductNftId(NftId productNftId) external;
46
+ function getProductNftId() external view returns (NftId productNftId);
47
+
48
+ function getInstanceService() external view returns (IInstanceService);
49
+ function getProductService() external view returns (IProductService);
50
+ }