@etherisc/gif-next 0.0.2-d288ca9-933 → 0.0.2-d3207d2-901

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 (203) hide show
  1. package/README.md +4 -0
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +13 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +23 -15
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +13 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.json +21 -13
  13. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  14. package/artifacts/contracts/components/Product.sol/Product.json +39 -18
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  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/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +1 -1
  39. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -13
  40. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +403 -1
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +59 -0
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +129 -101
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +34 -47
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +143 -38
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +200 -33
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -15
  56. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +59 -0
  58. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  63. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  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/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  78. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +839 -0
  84. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +448 -0
  86. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  87. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  88. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +182 -0
  89. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  90. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  91. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  92. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  93. package/artifacts/contracts/registry/Registry.sol/Registry.json +145 -49
  94. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  95. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +61 -29
  96. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +43 -34
  98. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  99. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  100. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  101. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  102. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  103. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  104. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  105. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  106. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  107. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  108. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  109. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  110. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  111. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  112. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  113. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  114. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  115. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  116. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  117. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  118. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  119. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  120. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  121. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  122. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  123. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  124. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  125. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  126. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  127. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  128. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  129. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  130. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  131. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  132. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  133. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  134. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  135. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  136. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  137. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  138. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  139. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  140. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  141. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  142. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  143. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  144. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  145. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  146. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  147. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  149. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  151. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  156. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  158. package/contracts/components/BaseComponent.sol +8 -3
  159. package/contracts/components/Distribution.sol +10 -16
  160. package/contracts/components/IBaseComponent.sol +1 -0
  161. package/contracts/components/IDistributionComponent.sol +1 -0
  162. package/contracts/components/Pool.sol +4 -20
  163. package/contracts/components/Product.sol +1 -1
  164. package/contracts/instance/AccessManagedSimple.sol +1 -8
  165. package/contracts/instance/IInstance.sol +15 -4
  166. package/contracts/instance/IInstanceService.sol +21 -8
  167. package/contracts/instance/Instance.sol +19 -18
  168. package/contracts/instance/InstanceAccessManager.sol +1 -1
  169. package/contracts/instance/InstanceReader.sol +17 -1
  170. package/contracts/instance/InstanceService.sol +61 -14
  171. package/contracts/instance/InstanceServiceManager.sol +6 -5
  172. package/contracts/instance/base/ComponentServiceBase.sol +83 -8
  173. package/contracts/instance/module/IBundle.sol +1 -0
  174. package/contracts/instance/module/ISetup.sol +1 -0
  175. package/contracts/instance/service/ComponentOwnerService.sol +5 -5
  176. package/contracts/instance/service/DistributionService.sol +88 -0
  177. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  178. package/contracts/instance/service/IComponentOwnerService.sol +1 -1
  179. package/contracts/instance/service/IDistributionService.sol +1 -1
  180. package/contracts/instance/service/IPoolService.sol +1 -1
  181. package/contracts/instance/service/IProductService.sol +1 -1
  182. package/contracts/instance/service/PoolService.sol +194 -0
  183. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  184. package/contracts/registry/IRegistry.sol +24 -2
  185. package/contracts/registry/IRegistryService.sol +34 -19
  186. package/contracts/registry/Registry.sol +57 -36
  187. package/contracts/registry/RegistryService.sol +42 -123
  188. package/contracts/registry/RegistryServiceManager.sol +21 -5
  189. package/contracts/registry/TokenRegistry.sol +111 -0
  190. package/contracts/shared/ERC165.sol +6 -2
  191. package/contracts/{instance/base → shared}/IService.sol +3 -3
  192. package/contracts/shared/NftOwnable.sol +2 -4
  193. package/contracts/shared/Registerable.sol +1 -0
  194. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  195. package/contracts/shared/Service.sol +55 -0
  196. package/contracts/test/TestService.sol +3 -5
  197. package/contracts/types/RoleId.sol +7 -0
  198. package/contracts/types/StateId.sol +4 -0
  199. package/contracts/types/Version.sol +4 -1
  200. package/package.json +1 -1
  201. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  202. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  203. package/contracts/instance/base/ServiceBase.sol +0 -44
@@ -0,0 +1,194 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+
11
+ import {IVersionable} from "../../shared/IVersionable.sol";
12
+ import {Versionable} from "../../shared/Versionable.sol";
13
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
14
+
15
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
16
+ import {POOL, BUNDLE} from "../../types/ObjectType.sol";
17
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
18
+ import {Fee, FeeLib} from "../../types/Fee.sol";
19
+ import {Version, VersionLib} from "../../types/Version.sol";
20
+ import {KEEP_STATE} from "../../types/StateId.sol";
21
+ import {zeroTimestamp} from "../../types/Timestamp.sol";
22
+
23
+ import {IService} from "../../shared/IService.sol";
24
+ import {Service} from "../../shared/Service.sol";
25
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
26
+ import {IPoolService} from "./IPoolService.sol";
27
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
28
+ import {InstanceService} from "../InstanceService.sol";
29
+ import {InstanceReader} from "../InstanceReader.sol";
30
+
31
+
32
+ string constant POOL_SERVICE_NAME = "PoolService";
33
+
34
+ contract PoolService is
35
+ ComponentServiceBase,
36
+ IPoolService
37
+ {
38
+ using NftIdLib for NftId;
39
+
40
+ string public constant NAME = "PoolService";
41
+
42
+ address internal _registryAddress;
43
+
44
+ function _initialize(
45
+ address owner,
46
+ bytes memory data
47
+ )
48
+ internal
49
+ initializer
50
+ virtual override
51
+ {
52
+ address initialOwner = address(0);
53
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
54
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
55
+ // owner is PoolServiceManager deployer
56
+ _initializeService(_registryAddress, owner);
57
+
58
+ _registerInterface(type(IService).interfaceId);
59
+ _registerInterface(type(IPoolService).interfaceId);
60
+ }
61
+
62
+ function getName() public pure override(Service, IService) returns(string memory name) {
63
+ return NAME;
64
+ }
65
+
66
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
67
+ ISetup.PoolSetupInfo memory initialSetup = abi.decode(
68
+ initialObjData,
69
+ (ISetup.PoolSetupInfo)
70
+ );
71
+ instance.createPoolSetup(componentNftId, initialSetup);
72
+ }
73
+
74
+ function setFees(
75
+ Fee memory poolFee,
76
+ Fee memory stakingFee,
77
+ Fee memory performanceFee
78
+ )
79
+ external
80
+ override
81
+ {
82
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
83
+ InstanceReader instanceReader = instance.getInstanceReader();
84
+ NftId poolNftId = poolInfo.nftId;
85
+
86
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
87
+ poolSetupInfo.poolFee = poolFee;
88
+ poolSetupInfo.stakingFee = stakingFee;
89
+ poolSetupInfo.performanceFee = performanceFee;
90
+
91
+ instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
92
+ }
93
+
94
+ function createBundle(
95
+ address owner,
96
+ Fee memory fee,
97
+ uint256 stakingAmount,
98
+ uint256 lifetime,
99
+ bytes calldata filter
100
+ )
101
+ external
102
+ override
103
+ returns(NftId bundleNftId)
104
+ {
105
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
106
+ InstanceReader instanceReader = instance.getInstanceReader();
107
+ NftId poolNftId = info.nftId;
108
+
109
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
110
+ poolNftId,
111
+ fee,
112
+ filter,
113
+ stakingAmount,
114
+ 0,
115
+ stakingAmount,
116
+ lifetime,
117
+ zeroTimestamp(),
118
+ zeroTimestamp()
119
+ );
120
+
121
+ // register bundle with registry
122
+ bundleNftId = getRegistryService().registerBundle(
123
+ IRegistry.ObjectInfo(
124
+ zeroNftId(),
125
+ poolNftId,
126
+ BUNDLE(),
127
+ false, // intercepting property for bundles is defined on pool
128
+ address(0),
129
+ owner,
130
+ abi.encode(bundleInfo)
131
+ )
132
+ );
133
+
134
+ // create bundle info in instance
135
+ instance.createBundle(bundleNftId, bundleInfo);
136
+
137
+ // TODO add bundle to pool in instance
138
+
139
+ // TODO collect capital
140
+ // _processStakingByTreasury(
141
+ // instanceReader,
142
+ // zeroNftId(),
143
+ // poolNftId,
144
+ // bundleNftId,
145
+ // stakingAmount);
146
+
147
+ // TODO add logging
148
+ }
149
+
150
+ function setBundleFee(
151
+ NftId bundleNftId,
152
+ Fee memory fee
153
+ )
154
+ external
155
+ override
156
+ {
157
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
158
+ InstanceReader instanceReader = instance.getInstanceReader();
159
+ NftId poolNftId = info.nftId;
160
+
161
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
162
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
163
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
164
+
165
+ bundleInfo.fee = fee;
166
+
167
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
168
+ }
169
+
170
+
171
+
172
+ function _processStakingByTreasury(
173
+ InstanceReader instanceReader,
174
+ NftId productNftId,
175
+ NftId poolNftId,
176
+ NftId bundleNftId,
177
+ uint256 stakingAmount
178
+ )
179
+ internal
180
+ {
181
+ // process token transfer(s)
182
+ if(stakingAmount > 0) {
183
+ TokenHandler tokenHandler = TokenHandler(instanceReader.getTokenHandler(productNftId));
184
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
185
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
186
+
187
+ tokenHandler.transfer(
188
+ bundleOwner,
189
+ poolInfo.wallet,
190
+ stakingAmount
191
+ );
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PoolService} from "./PoolService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PoolServiceManager is ProxyManager {
12
+
13
+ PoolService private _poolService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ PoolService poolSrv = new PoolService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(poolSrv),
25
+ data);
26
+
27
+ _poolService = PoolService(address(versionable));
28
+
29
+ Registry registry = Registry(registryAddress);
30
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getPoolService()
47
+ external
48
+ view
49
+ returns (PoolService poolService)
50
+ {
51
+ return _poolService;
52
+ }
53
+
54
+ }
@@ -10,10 +10,22 @@ import {VersionPart} from "../types/Version.sol";
10
10
 
11
11
  interface IRegistry is IERC165 {
12
12
 
13
+ event LogInitialMajorVersionSet(VersionPart majorVersion);
14
+ event LogMajorVersionSet(VersionPart majorVersionMax);
13
15
  event LogRegistration(ObjectInfo info);
14
-
15
16
  event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
16
17
 
18
+ // setMajorVersion()
19
+ error NotOwner(address account);
20
+ error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
21
+
22
+ // register()
23
+ error NotRegistryService();
24
+ error ZeroParentAddress();
25
+ error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
26
+ error ContractAlreadyRegistered(address objectAddress);
27
+ error InvalidServiceVersion(VersionPart majorVersion);
28
+ error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
17
29
 
18
30
  struct ObjectInfo {
19
31
  NftId nftId;
@@ -24,12 +36,22 @@ interface IRegistry is IERC165 {
24
36
  address initialOwner;
25
37
  bytes data;
26
38
  }// TODO delete nftId and initialOwner(if not used) from struct
39
+ // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
40
+
41
+ function setMajorVersion(VersionPart newMajorVersionMax) external;
27
42
 
28
43
  function register(ObjectInfo memory info) external returns (NftId nftId);
29
-
44
+
45
+ function getMajorVersionMin() external view returns (VersionPart);
46
+
47
+ function getMajorVersionMax() external view returns (VersionPart);
48
+
49
+ function getMajorVersion() external view returns (VersionPart);
30
50
 
31
51
  function getObjectCount() external view returns (uint256);
32
52
 
53
+ function getNftId() external view returns (NftId nftId);
54
+
33
55
  function getNftId(address objectAddress) external view returns (NftId nftId);
34
56
 
35
57
  function ownerOf(NftId nftId) external view returns (address);
@@ -1,35 +1,50 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../../contracts/types/NftId.sol";
5
- import {ObjectType} from "../../contracts/types/ObjectType.sol";
6
- import {RoleId} from "../../contracts/types/RoleId.sol";
7
- import {IService} from "../../contracts/instance/base/IService.sol";
8
- import {IRegistry} from "../../contracts/registry/IRegistry.sol";
4
+ import {NftId} from "../types/NftId.sol";
5
+ import {ObjectType} from "../types/ObjectType.sol";
6
+ import {RoleId} from "../types/RoleId.sol";
7
+ import {IService} from "../shared/IService.sol";
8
+ import {IRegistry} from "./IRegistry.sol";
9
9
 
10
- import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
11
- import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
11
+ import {IBaseComponent} from "../components/IBaseComponent.sol";
12
12
 
13
13
  interface IRegistryService is IService {
14
14
 
15
- function registerToken(address tokenAddress) external returns(NftId nftId);
15
+ error SelfRegistration();
16
+ error NotRegistryOwner();
16
17
 
17
- function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
18
+ error NotService();
19
+ error NotInstance();
20
+ error NotProduct();
21
+ error NotPool();
22
+ error NotDistribution();
18
23
 
19
- function registerInstance(IRegisterable instance)
20
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
25
+ error NotRegisterableOwner(address expectedOwner);
26
+ error RegisterableOwnerIsZero();
27
+ error RegisterableOwnerIsRegistered();
28
+ error InvalidInitialOwner(address initialOwner);
29
+ error InvalidAddress(address registerableAddress);
21
30
 
22
- function registerProduct(IBaseComponent product, address owner)
23
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
31
 
25
- function registerPool(IBaseComponent pool, address owner)
26
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
32
+ function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
27
33
 
28
- function registerDistribution(IBaseComponent distribution, address owner)
29
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
34
+ function registerInstance(IRegisterable instance)
35
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
30
36
 
31
- function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
37
+ function registerProduct(IBaseComponent product, address owner)
38
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
32
39
 
33
- function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
40
+ function registerPool(IBaseComponent pool, address owner)
41
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
42
+
43
+ function registerDistribution(IBaseComponent distribution, address owner)
44
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
45
+
46
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
47
+
48
+ function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
34
49
  }
35
50
 
@@ -2,12 +2,12 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/base/IService.sol";
5
+ import {IService} from "../shared/IService.sol";
6
6
 
7
7
  import {ChainNft} from "./ChainNft.sol";
8
8
  import {IRegistry} from "./IRegistry.sol";
9
9
  import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
10
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
11
11
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
12
  import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
13
 
@@ -28,30 +28,17 @@ contract Registry is
28
28
  ERC165,
29
29
  IRegistry
30
30
  {
31
- // register
32
- error NotRegistryService();
33
- error ZeroParentAddress();
34
- error ContractAlreadyRegistered(address objectAddress);
35
- error InvalidServiceVersion(VersionPart majorVersion);
36
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
37
-
38
- // approve
39
- error NotOwner();
40
- error NotRegisteredContract(NftId registrarNftId);
41
- error NotService(NftId registrarNftId);
42
- error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
43
-
44
- uint256 public constant MAJOR_VERSION_MIN = 3;
31
+ uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
45
32
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
46
34
  uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
47
35
  string public constant EMPTY_URI = "";
48
36
 
37
+ VersionPart internal _majorVersion;
38
+
49
39
  mapping(NftId nftId => ObjectInfo info) internal _info;
50
40
  mapping(address object => NftId nftId) internal _nftIdByAddress;
51
41
 
52
- mapping(NftId registrator => mapping(
53
- ObjectType objectType => bool)) internal _isApproved;
54
-
55
42
  mapping(ObjectType objectType => mapping(
56
43
  ObjectType parentType => bool)) internal _isValidContractCombination;
57
44
 
@@ -69,13 +56,12 @@ contract Registry is
69
56
 
70
57
  modifier onlyOwner() {
71
58
  if(msg.sender != getOwner()) {
72
- revert NotOwner();
59
+ revert NotOwner(msg.sender);
73
60
  }
74
61
  _;
75
62
  }
76
63
 
77
64
  modifier onlyRegistryService() {
78
-
79
65
  if(msg.sender != _info[_serviceNftId].objectAddress) {
80
66
  revert NotRegistryService();
81
67
  }
@@ -85,7 +71,10 @@ contract Registry is
85
71
  constructor(address registryOwner, VersionPart majorVersion)
86
72
  {
87
73
  require(registryOwner > address(0), "Registry: registry owner is 0");
88
- require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
74
+
75
+ // major version at constructor time
76
+ _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
+ emit LogInitialMajorVersionSet(_majorVersion);
89
78
 
90
79
  // deploy NFT
91
80
  _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
@@ -101,6 +90,24 @@ contract Registry is
101
90
  _registerInterface(type(IRegistry).interfaceId);
102
91
  }
103
92
 
93
+ // from IRegistry
94
+
95
+ /// @dev latest GIF release version
96
+ function setMajorVersion(VersionPart newMajorVersion)
97
+ external
98
+ onlyOwner
99
+ {
100
+ // ensure major version increments is one
101
+ uint256 oldMax = _majorVersion.toInt();
102
+ uint256 newMax = newMajorVersion.toInt();
103
+ if (newMax <= oldMax || newMax - oldMax != 1) {
104
+ revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
105
+ }
106
+
107
+ _majorVersion = newMajorVersion;
108
+ emit LogMajorVersionSet(_majorVersion);
109
+ }
110
+
104
111
  /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
105
112
  // TODO service registration means its approval for some type?
106
113
  // TODO registration of precompile addresses
@@ -168,13 +175,35 @@ contract Registry is
168
175
 
169
176
  emit LogRegistration(info);
170
177
  }
178
+ /// @dev earliest GIF major version
179
+ function getMajorVersionMin() external view returns (VersionPart) {
180
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
181
+ }
182
+
183
+ // TODO make distinction between active an not yet active version
184
+ // need to be thought trough, not yet clear if necessary
185
+ // need to answer question: what is the latest version during the upgrade process?
186
+ // likely setting up a new gif version does not fit into a single tx
187
+ // in this case we might want to have a period where the latest version is
188
+ // in the process of being set up while the latest active version is 1 major release smaller
189
+ /// @dev latest GIF major version (might not yet be active)
190
+ function getMajorVersionMax() external view returns (VersionPart) {
191
+ return _majorVersion;
192
+ }
193
+
194
+ /// @dev latest active GIF release version
195
+ function getMajorVersion() external view returns (VersionPart) {
196
+ return _majorVersion;
197
+ }
171
198
 
172
- // from IRegistry
173
199
  function getObjectCount() external view override returns (uint256) {
174
-
175
200
  return _chainNft.totalSupply();
176
201
  }
177
202
 
203
+ function getNftId() external view returns (NftId nftId) {
204
+ return _registryNftId;
205
+ }
206
+
178
207
  function getNftId(address object) external view override returns (NftId id) {
179
208
  return _nftIdByAddress[object];
180
209
  }
@@ -184,7 +213,6 @@ contract Registry is
184
213
  }
185
214
 
186
215
  function ownerOf(address contractAddress) public view returns (address) {
187
-
188
216
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
189
217
  }
190
218
 
@@ -193,7 +221,6 @@ contract Registry is
193
221
  }
194
222
 
195
223
  function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
196
-
197
224
  return _info[_nftIdByAddress[object]];
198
225
  }
199
226
 
@@ -238,14 +265,8 @@ contract Registry is
238
265
  ) = abi.decode(info.data, (string, VersionPart));
239
266
  bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
240
267
 
241
- // TODO MUST guarantee consistency of service.getVersion() and majorVersion here
242
- // TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup -> can lock up
243
- // TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
244
- if(
245
- majorVersion.toInt() < MAJOR_VERSION_MIN ||
246
- (majorVersion.toInt() > MAJOR_VERSION_MIN &&
247
- _service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
248
- ) {
268
+ // ensures consistency of service.getVersion() and majorVersion here
269
+ if(majorVersion != _majorVersion) {
249
270
  revert InvalidServiceVersion(majorVersion);
250
271
  }
251
272
 
@@ -312,7 +333,7 @@ contract Registry is
312
333
  function _registerRegistry(address registryOwner)
313
334
  internal
314
335
  {
315
- uint256 registryId = _chainNft.calculateTokenId(2);
336
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
316
337
  NftId registryNftId = toNftId(registryId);
317
338
 
318
339
  NftId parentNftId;
@@ -386,7 +407,7 @@ contract Registry is
386
407
 
387
408
  string memory serviceName = "RegistryService";
388
409
  bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
389
- _service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
410
+ _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
390
411
  _string[serviceNftId] = serviceName;
391
412
  _serviceNftId = serviceNftId;
392
413
  }