@etherisc/gif-next 0.0.2-7c7e7ba-408 → 0.0.2-7e569a6-522

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 (250) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +656 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +318 -87
  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} +171 -158
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +568 -2
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +349 -115
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +329 -99
  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/ISM.sol/ISM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  40. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +327 -2
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -19
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +176 -669
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +231 -114
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +56 -82
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +188 -170
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +41 -76
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  58. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +124 -61
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
  74. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
  76. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +149 -93
  78. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +29 -36
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -46
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -169
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -225
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +148 -268
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +29 -40
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +150 -404
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +29 -72
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +212 -133
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +127 -93
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/Registry.sol/Registry.json +224 -234
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +68 -161
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -104
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +13 -29
  121. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
  126. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +19 -6
  131. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
  135. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  136. package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
  137. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  138. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
  143. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  145. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
  147. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  150. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  151. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  152. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  157. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  159. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  160. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  166. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  172. package/contracts/components/Component.sol +222 -0
  173. package/contracts/components/Distribution.sol +32 -47
  174. package/contracts/components/IComponent.sol +43 -0
  175. package/contracts/components/IDistributionComponent.sol +5 -2
  176. package/contracts/components/IPoolComponent.sol +11 -3
  177. package/contracts/components/IProductComponent.sol +7 -3
  178. package/contracts/components/Pool.sol +65 -66
  179. package/contracts/components/Product.sol +62 -88
  180. package/contracts/instance/BundleManager.sol +125 -0
  181. package/contracts/instance/Cloneable.sol +46 -0
  182. package/contracts/instance/IInstance.sol +27 -9
  183. package/contracts/instance/IInstanceService.sol +14 -4
  184. package/contracts/instance/Instance.sol +60 -234
  185. package/contracts/instance/InstanceAccessManager.sol +88 -78
  186. package/contracts/instance/InstanceReader.sol +3 -25
  187. package/contracts/instance/InstanceService.sol +269 -103
  188. package/contracts/instance/InstanceServiceManager.sol +5 -8
  189. package/contracts/instance/ObjectManager.sol +84 -0
  190. package/contracts/instance/base/ComponentService.sol +134 -0
  191. package/contracts/instance/module/IAccess.sol +27 -17
  192. package/contracts/instance/module/ISetup.sol +3 -1
  193. package/contracts/instance/service/BundleService.sol +293 -0
  194. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  195. package/contracts/instance/service/DistributionService.sol +42 -24
  196. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  197. package/contracts/instance/service/IBundleService.sol +44 -0
  198. package/contracts/instance/service/IPolicyService.sol +94 -0
  199. package/contracts/instance/service/IPoolService.sol +4 -25
  200. package/contracts/instance/service/IProductService.sol +3 -70
  201. package/contracts/instance/service/PolicyService.sol +538 -0
  202. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  203. package/contracts/instance/service/PoolService.sol +35 -127
  204. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  205. package/contracts/instance/service/ProductService.sol +121 -456
  206. package/contracts/registry/ChainNft.sol +1 -1
  207. package/contracts/registry/IRegistry.sol +34 -17
  208. package/contracts/registry/IRegistryService.sol +28 -13
  209. package/contracts/registry/Registry.sol +214 -210
  210. package/contracts/registry/RegistryAccessManager.sol +216 -0
  211. package/contracts/registry/RegistryService.sol +61 -157
  212. package/contracts/registry/RegistryServiceManager.sol +18 -36
  213. package/contracts/registry/ReleaseManager.sol +332 -0
  214. package/contracts/registry/TokenRegistry.sol +8 -7
  215. package/contracts/shared/IRegisterable.sol +1 -3
  216. package/contracts/shared/IService.sol +2 -1
  217. package/contracts/shared/NftOwnable.sol +5 -0
  218. package/contracts/shared/ProxyManager.sol +1 -1
  219. package/contracts/shared/Registerable.sol +10 -14
  220. package/contracts/shared/Service.sol +13 -8
  221. package/contracts/test/TestService.sol +3 -2
  222. package/contracts/types/NftIdSet.sol +26 -24
  223. package/contracts/types/RoleId.sol +10 -10
  224. package/package.json +1 -1
  225. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  226. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  227. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  228. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  229. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  230. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  231. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  232. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  233. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  234. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  235. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  236. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  237. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  238. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  239. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  240. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  241. package/contracts/components/BaseComponent.sol +0 -91
  242. package/contracts/components/IBaseComponent.sol +0 -25
  243. package/contracts/instance/AccessManagedSimple.sol +0 -115
  244. package/contracts/instance/AccessManagerSimple.sol +0 -692
  245. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  246. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  247. package/contracts/instance/base/IInstanceBase.sol +0 -23
  248. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  249. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  250. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,222 @@
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 {IRegistry} from "../registry/IRegistry.sol";
14
+ import {NftId} from "../types/NftId.sol";
15
+ import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
16
+ import {VersionPart} from "../types/Version.sol";
17
+ import {Registerable} from "../shared/Registerable.sol";
18
+ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
19
+ import {IAccess} from "../instance/module/IAccess.sol";
20
+
21
+ // TODO discuss to inherit from oz accessmanaged
22
+ // TODO make contract upgradeable
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
+ string _name; // unique (per instance) component name
36
+ IERC20Metadata _token; // token for this component
37
+ address _wallet; // wallet for this component (default = component contract itself)
38
+ IInstanceService _instanceService; // instance service for this component
39
+
40
+ NftId _productNftId; // only relevant for components that are linked to a aproduct
41
+ IProductService _productService; // product service for component, might not be relevant for some component types (eg oracles)
42
+ }
43
+
44
+
45
+ modifier onlyProductService() {
46
+ if(msg.sender != address(_getComponentStorage()._productService)) {
47
+ revert ErrorComponentNotProductService(msg.sender);
48
+ }
49
+ _;
50
+ }
51
+
52
+ // TODO discuss replacement with modifier restricted from accessmanaged
53
+ modifier onlyInstanceRole(uint64 roleIdNum) {
54
+ RoleId roleId = RoleIdLib.toRoleId(roleIdNum);
55
+ InstanceAccessManager accessManager = InstanceAccessManager(_getComponentStorage()._instance.authority());
56
+ if( !accessManager.hasRole(roleId, msg.sender)) {
57
+ revert ErrorComponentUnauthorized(msg.sender, roleIdNum);
58
+ }
59
+ _;
60
+ }
61
+
62
+ // TODO discuss replacement with modifier restricted from accessmanaged
63
+ modifier isNotLocked() {
64
+ InstanceAccessManager accessManager = InstanceAccessManager(_getComponentStorage()._instance.authority());
65
+ if (accessManager.isTargetLocked(address(this))) {
66
+ revert IAccess.ErrorIAccessTargetLocked(address(this));
67
+ }
68
+ _;
69
+ }
70
+
71
+ function _getComponentStorage() private pure returns (ComponentStorage storage $) {
72
+ assembly {
73
+ $.slot := CONTRACT_LOCATION_V1
74
+ }
75
+ }
76
+
77
+
78
+ function _initializeComponent(
79
+ address registry,
80
+ NftId instanceNftId,
81
+ string memory name,
82
+ address token,
83
+ ObjectType componentType,
84
+ bool isInterceptor,
85
+ address initialOwner,
86
+ bytes memory data
87
+ )
88
+ internal
89
+ //onlyInitializing // TODO uncomment when "fully" upgradeable
90
+ virtual
91
+ {
92
+ ComponentStorage storage $ = _getComponentStorage();
93
+ _initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
94
+
95
+ // set unique name of component
96
+ $._name = name;
97
+
98
+ // set and check linked instance
99
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
100
+ $._instance = IInstance(instanceInfo.objectAddress);
101
+ if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
102
+ revert ErrorComponentNotInstance(instanceNftId, instanceInfo.objectAddress);
103
+ }
104
+
105
+ // set linked services
106
+ VersionPart gifVersion = $._instance.getMajorVersion();
107
+ $._instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), gifVersion));
108
+ $._productService = IProductService(getRegistry().getServiceAddress(PRODUCT(), gifVersion));
109
+
110
+ // set wallet and token
111
+ $._wallet = address(this);
112
+ $._token = IERC20Metadata(token);
113
+
114
+ _registerInterface(type(IComponent).interfaceId);
115
+ }
116
+
117
+ // TODO discuss replacement with modifier restricted from accessmanaged
118
+ function lock() external onlyOwner override {
119
+ _getComponentStorage()._instanceService.setTargetLocked(getName(), true);
120
+ }
121
+
122
+ // TODO discuss replacement with modifier restricted from accessmanaged
123
+ function unlock() external onlyOwner override {
124
+ _getComponentStorage()._instanceService.setTargetLocked(getName(), false);
125
+ }
126
+
127
+ // only product service may set product nft id during registration of product setup
128
+ function setProductNftId(NftId productNftId)
129
+ external
130
+ override
131
+ onlyProductService()
132
+ {
133
+ ComponentStorage storage $ = _getComponentStorage();
134
+
135
+ if($._productNftId.gtz()) {
136
+ revert ErrorComponentProductNftAlreadySet();
137
+ }
138
+
139
+ $._productNftId = productNftId;
140
+ }
141
+
142
+ /// @dev Sets the wallet address for the component.
143
+ /// if the current wallet has tokens, these will be transferred.
144
+ /// if the new wallet address is externally owned, an approval from the
145
+ /// owner of the external wallet for the component to move all tokens must exist.
146
+ function setWallet(address newWallet) external override onlyOwner {
147
+ ComponentStorage storage $ = _getComponentStorage();
148
+
149
+ address currentWallet = $._wallet;
150
+ uint256 currentBalance = $._token.balanceOf(currentWallet);
151
+
152
+ // checks
153
+ if (newWallet == address(0)) {
154
+ revert ErrorComponentWalletAddressZero();
155
+ }
156
+ if (newWallet == currentWallet) {
157
+ revert ErrorComponentWalletAddressIsSameAsCurrent(newWallet);
158
+ }
159
+
160
+ if (currentBalance > 0) {
161
+ if (currentWallet == address(this)) {
162
+ // move tokens from component smart contract to external wallet
163
+ } else {
164
+ // move tokens from external wallet to component smart contract or another external wallet
165
+ uint256 allowance = $._token.allowance(currentWallet, address(this));
166
+ if (allowance < currentBalance) {
167
+ revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
168
+ }
169
+ }
170
+ }
171
+
172
+ // effects
173
+ $._wallet = newWallet;
174
+ emit LogComponentWalletAddressChanged(newWallet);
175
+
176
+ // interactions
177
+ if (currentBalance > 0) {
178
+ // transfer tokens from current wallet to new wallet
179
+ if (currentWallet == address(this)) {
180
+ // transferFrom requires self allowance too
181
+ $._token.approve(address(this), currentBalance);
182
+ }
183
+
184
+ SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
185
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
186
+ }
187
+ }
188
+
189
+ function getWallet()
190
+ public
191
+ view
192
+ override
193
+ returns (address walletAddress)
194
+ {
195
+ return _getComponentStorage()._wallet;
196
+ }
197
+
198
+ function getToken() public view override returns (IERC20Metadata token) {
199
+ return _getComponentStorage()._token;
200
+ }
201
+
202
+ function getInstance() public view override returns (IInstance instance) {
203
+ return _getComponentStorage()._instance;
204
+ }
205
+
206
+ function getName() public view override returns(string memory name) {
207
+ return _getComponentStorage()._name;
208
+ }
209
+
210
+ function getProductNftId() public view override returns (NftId productNftId) {
211
+ return _getComponentStorage()._productNftId;
212
+ }
213
+
214
+ function getInstanceService() public view returns (IInstanceService) {
215
+ return _getComponentStorage()._instanceService;
216
+ }
217
+
218
+ function getProductService() public view returns (IProductService) {
219
+ return _getComponentStorage()._productService;
220
+ }
221
+
222
+ }
@@ -7,7 +7,7 @@ import {IProductService} from "../instance/service/IProductService.sol";
7
7
  import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
8
  import {ReferralId} 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";
@@ -16,41 +16,37 @@ import {Registerable} from "../shared/Registerable.sol";
16
16
  import {TokenHandler} from "../shared/TokenHandler.sol";
17
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
18
 
19
- contract Distribution is
20
- BaseComponent,
19
+ abstract contract Distribution is
20
+ Component,
21
21
  IDistributionComponent
22
22
  {
23
23
  using NftIdLib for NftId;
24
24
 
25
- Fee internal _initialDistributionFee;
26
25
  bool internal _isVerifying;
26
+ Fee internal _initialDistributionFee;
27
27
 
28
- IDistributionService private _distributionService;
29
- IProductService private _productService;
28
+ TokenHandler internal _tokenHandler;
30
29
 
31
- modifier onlyProductService() {
32
- require(
33
- msg.sender == address(_productService),
34
- "ERROR:POL-002:NOT_PRODUCT_SERVICE");
35
- _;
36
- }
30
+ IDistributionService private _distributionService;
37
31
 
38
- constructor(
32
+ function __initialize(
39
33
  address registry,
40
34
  NftId instanceNftId,
41
35
  // TODO refactor into tokenNftId
36
+ string memory name,
42
37
  address token,
43
38
  bool verifying,
44
39
  Fee memory distributionFee,
45
- address initialOwner
46
- )
47
- BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
48
- {
40
+ address initialOwner,
41
+ bytes memory data
42
+ ) internal {
43
+ _initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
44
+
49
45
  _isVerifying = verifying;
50
46
  _initialDistributionFee = distributionFee;
51
47
 
52
- _distributionService = _instance.getDistributionService();
53
- _productService = _instance.getProductService();
48
+ _tokenHandler = new TokenHandler(token);
49
+ _distributionService = getInstance().getDistributionService();
54
50
 
55
51
  _registerInterface(type(IDistributionComponent).interfaceId);
56
52
  }
@@ -121,8 +117,23 @@ contract Distribution is
121
117
  }
122
118
 
123
119
  function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
124
- InstanceReader reader = _instance.getInstanceReader();
125
- return reader.getDistributionSetupInfo(getNftId());
120
+ InstanceReader reader = getInstance().getInstanceReader();
121
+ setupInfo = reader.getDistributionSetupInfo(getNftId());
122
+
123
+ // fallback to initial setup info (wallet is always != address(0))
124
+ if(setupInfo.wallet == address(0)) {
125
+ setupInfo = _getInitialSetupInfo();
126
+ }
127
+ }
128
+
129
+ function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
130
+ return ISetup.DistributionSetupInfo(
131
+ zeroNftId(),
132
+ _tokenHandler,
133
+ _initialDistributionFee,
134
+ _isVerifying,
135
+ address(this)
136
+ );
126
137
  }
127
138
 
128
139
 
@@ -130,30 +141,4 @@ contract Distribution is
130
141
  function isVerifying() external view returns (bool verifying) {
131
142
  return _isVerifying;
132
143
  }
133
-
134
- // from IRegisterable
135
-
136
- function getInitialInfo()
137
- public
138
- view
139
- override (IRegisterable, Registerable)
140
- returns(IRegistry.ObjectInfo memory, bytes memory)
141
- {
142
- (
143
- IRegistry.ObjectInfo memory info,
144
- ) = super.getInitialInfo();
145
-
146
- return (
147
- info,
148
- abi.encode(
149
- ISetup.DistributionSetupInfo(
150
- _productNftId,
151
- TokenHandler(address(_token)),
152
- _initialDistributionFee,
153
- _isVerifying,
154
- address(this)
155
- )
156
- )
157
- );
158
- }
159
144
  }
@@ -0,0 +1,43 @@
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 {NftId} from "../types/NftId.sol";
11
+
12
+ interface IComponent is IRegisterable {
13
+
14
+ error ErrorComponentNotInstance(NftId instanceNftId, address instance);
15
+ error ErrorComponentProductNftAlreadySet();
16
+ error ErrorComponentWalletAddressZero();
17
+ error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
18
+ error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
19
+ error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
20
+ error ErrorComponentNotProductService(address caller);
21
+
22
+ event LogComponentWalletAddressChanged(address newWallet);
23
+ event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
24
+
25
+ function getName() external view returns (string memory name);
26
+
27
+ // TODO remove and replace with accessmanaged target locking mechanism
28
+ function lock() external;
29
+ function unlock() external;
30
+
31
+ function getToken() external view returns (IERC20Metadata token);
32
+
33
+ function setWallet(address walletAddress) external;
34
+ function getWallet() external view returns (address walletAddress);
35
+
36
+ function getInstance() external view returns (IInstance instance);
37
+
38
+ function setProductNftId(NftId productNftId) external;
39
+ function getProductNftId() external view returns (NftId productNftId);
40
+
41
+ function getInstanceService() external view returns (IInstanceService);
42
+ function getProductService() external view returns (IProductService);
43
+ }
@@ -2,11 +2,14 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
5
7
  import {ReferralId} from "../types/Referral.sol";
6
8
  import {NftId} from "../types/NftId.sol";
7
- import {ISetup} from "../instance/module/ISetup.sol";
8
9
 
9
- interface IDistributionComponent {
10
+ interface IDistributionComponent is IComponent {
11
+
12
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
10
13
 
11
14
  function setFees(
12
15
  Fee memory distributionFee
@@ -1,14 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
4
  import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {NftId} from "../types/NftId.sol";
6
8
  import {UFixed} from "../types/UFixed.sol";
7
9
 
8
- interface IPoolComponent {
10
+ interface IPoolComponent is IComponent {
9
11
 
10
12
  event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
11
13
 
14
+ function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
15
+
12
16
  function setFees(
13
17
  Fee memory poolFee,
14
18
  Fee memory stakingFee,
@@ -43,6 +47,10 @@ interface IPoolComponent {
43
47
  uint256 collateralizationAmount
44
48
  ) external;
45
49
 
50
+ function lockBundle(NftId bundleNftId) external;
51
+
52
+ function unlockBundle(NftId bundleNftId) external;
53
+
46
54
  /**
47
55
  * @dev returns true iff the policy application data in policyData matches
48
56
  * with the bundle filter criteria encoded in bundleFilter.
@@ -55,7 +63,7 @@ interface IPoolComponent {
55
63
  view
56
64
  returns (bool isMatching);
57
65
 
58
- function isVerifying() external view returns (bool verifying);
66
+ function isConfirmingApplication() external view returns (bool isConfirmingApplication);
59
67
 
60
68
  function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
61
69
 
@@ -2,11 +2,15 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
5
7
  import {NftId} from "../types/NftId.sol";
6
8
  import {ReferralId} from "../types/Referral.sol";
7
9
  import {RiskId} from "../types/RiskId.sol";
8
10
 
9
- interface IProductComponent {
11
+ interface IProductComponent is IComponent {
12
+
13
+ function getSetupInfo() external view returns (ISetup.ProductSetupInfo memory setupInfo);
10
14
 
11
15
  function setFees(
12
16
  Fee memory productFee,
@@ -18,8 +22,8 @@ interface IProductComponent {
18
22
  RiskId riskId,
19
23
  uint256 lifetime,
20
24
  bytes memory applicationData,
21
- ReferralId referralId,
22
- NftId bundleNftId
25
+ NftId bundleNftId,
26
+ ReferralId referralId
23
27
  ) external view returns (uint256 premiumAmount);
24
28
 
25
29
  function calculateNetPremium(