@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f63e99e-607

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 (187) 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/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
  40. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +15 -2
  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 +164 -84
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +34 -34
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +168 -37
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +229 -41
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +77 -9
  56. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +29 -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 +681 -0
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +436 -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 +820 -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 +309 -0
  89. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  90. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -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 +258 -24
  94. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  95. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +20 -44
  96. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +49 -28
  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 +1 -1
  106. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  107. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  108. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  109. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  110. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  111. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  112. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  113. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  114. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  115. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  116. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  117. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  118. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  119. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  120. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  121. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  122. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  123. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  124. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  125. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  126. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  127. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  128. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  129. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  130. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  131. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  132. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  133. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  134. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  135. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  136. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  137. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  138. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  139. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  140. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  141. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  142. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  143. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  144. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  145. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  146. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  147. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  148. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  153. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  155. package/contracts/components/BaseComponent.sol +8 -3
  156. package/contracts/components/Distribution.sol +10 -16
  157. package/contracts/components/IBaseComponent.sol +1 -0
  158. package/contracts/components/IDistributionComponent.sol +1 -0
  159. package/contracts/components/Pool.sol +4 -20
  160. package/contracts/components/Product.sol +1 -1
  161. package/contracts/instance/AccessManagedSimple.sol +5 -4
  162. package/contracts/instance/AccessManagerSimple.sol +10 -0
  163. package/contracts/instance/IInstance.sol +15 -4
  164. package/contracts/instance/IInstanceService.sol +14 -1
  165. package/contracts/instance/Instance.sol +28 -21
  166. package/contracts/instance/InstanceAccessManager.sol +1 -1
  167. package/contracts/instance/InstanceReader.sol +27 -1
  168. package/contracts/instance/InstanceService.sol +104 -24
  169. package/contracts/instance/base/ComponentServiceBase.sol +19 -8
  170. package/contracts/instance/module/IBundle.sol +1 -0
  171. package/contracts/instance/module/ISetup.sol +1 -0
  172. package/contracts/instance/service/DistributionService.sol +102 -0
  173. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  174. package/contracts/instance/service/PoolService.sol +208 -0
  175. package/contracts/instance/service/PoolServiceManager.sol +53 -0
  176. package/contracts/registry/IRegistry.sol +39 -2
  177. package/contracts/registry/IRegistryService.sol +0 -2
  178. package/contracts/registry/Registry.sol +94 -28
  179. package/contracts/registry/RegistryService.sol +9 -49
  180. package/contracts/registry/RegistryServiceManager.sol +21 -5
  181. package/contracts/registry/TokenRegistry.sol +111 -0
  182. package/contracts/shared/ERC165.sol +6 -2
  183. package/contracts/shared/Registerable.sol +1 -0
  184. package/contracts/types/RoleId.sol +7 -0
  185. package/contracts/types/StateId.sol +4 -0
  186. package/contracts/types/Version.sol +4 -1
  187. package/package.json +1 -1
@@ -11,13 +11,15 @@ import {IInstance} from "../instance/IInstance.sol";
11
11
  import {IInstance} from "../instance/IInstance.sol";
12
12
  import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
13
13
  import {IBaseComponent} from "./IBaseComponent.sol";
14
- import {NftId} from "../types/NftId.sol";
14
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
15
15
  import {ObjectType} from "../types/ObjectType.sol";
16
16
 
17
17
  abstract contract BaseComponent is
18
18
  Registerable,
19
19
  IBaseComponent
20
20
  {
21
+ using NftIdLib for NftId;
22
+
21
23
  IComponentOwnerService internal _componentOwnerService;
22
24
 
23
25
  address internal _deployer;
@@ -29,7 +31,6 @@ abstract contract BaseComponent is
29
31
  constructor(
30
32
  address registry,
31
33
  NftId instanceNftId,
32
- NftId productNftId,
33
34
  address token,
34
35
  ObjectType componentType,
35
36
  bool isInterceptor,
@@ -49,7 +50,6 @@ abstract contract BaseComponent is
49
50
  _componentOwnerService = _instance.getComponentOwnerService();
50
51
  _wallet = address(this);
51
52
  _token = IERC20Metadata(token);
52
- _productNftId = productNftId;
53
53
 
54
54
  _registerInterface(type(IBaseComponent).interfaceId);
55
55
  }
@@ -80,6 +80,11 @@ abstract contract BaseComponent is
80
80
  return _instance;
81
81
  }
82
82
 
83
+ function setProductNftId(NftId productNftId) public override onlyOwner {
84
+ require(_productNftId.eq(zeroNftId()), "product nft id already set");
85
+ _productNftId = productNftId;
86
+ }
87
+
83
88
  function getProductNftId() public view override returns (NftId productNftId) {
84
89
  return _productNftId;
85
90
  }
@@ -38,20 +38,19 @@ contract Distribution is
38
38
  constructor(
39
39
  address registry,
40
40
  NftId instanceNftId,
41
- NftId productNftId,
42
41
  // TODO refactor into tokenNftId
43
42
  address token,
44
43
  bool verifying,
45
44
  Fee memory distributionFee,
46
45
  address initialOwner
47
46
  )
48
- BaseComponent(registry, instanceNftId, productNftId, token, DISTRIBUTION(), true, initialOwner)
47
+ BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
49
48
  {
50
49
  _isVerifying = verifying;
51
50
  _initialDistributionFee = distributionFee;
52
51
 
52
+ _distributionService = _instance.getDistributionService();
53
53
  // TODO: reactivate when services are available again
54
- // _distributionService = _instance.getDistributionService();
55
54
  // _productService = _instance.getProductService();
56
55
 
57
56
  _registerInterface(type(IDistributionComponent).interfaceId);
@@ -123,19 +122,10 @@ contract Distribution is
123
122
  }
124
123
 
125
124
  function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
126
- if (getNftId().eq(zeroNftId())) {
127
- return ISetup.DistributionSetupInfo(
128
- _productNftId,
129
- TokenHandler(address(0)),
130
- _initialDistributionFee,
131
- _isVerifying,
132
- address(0)
133
- );
134
- }
135
-
136
125
  InstanceReader reader = _instance.getInstanceReader();
137
126
  return reader.getDistributionSetupInfo(getNftId());
138
127
  }
128
+
139
129
 
140
130
  /// @dev returns true iff the component needs to be called when selling/renewing policis
141
131
  function isVerifying() external view returns (bool verifying) {
@@ -152,14 +142,18 @@ contract Distribution is
152
142
  {
153
143
  (
154
144
  IRegistry.ObjectInfo memory info,
155
- bytes memory data
156
145
  ) = super.getInitialInfo();
157
146
 
158
147
  return (
159
148
  info,
160
149
  abi.encode(
161
- _initialDistributionFee,
162
- _isVerifying
150
+ ISetup.DistributionSetupInfo(
151
+ _productNftId,
152
+ TokenHandler(address(_token)),
153
+ _initialDistributionFee,
154
+ _isVerifying,
155
+ address(this)
156
+ )
163
157
  )
164
158
  );
165
159
  }
@@ -19,6 +19,7 @@ interface IBaseComponent is IRegisterable {
19
19
 
20
20
  function getInstance() external view returns (IInstance instance);
21
21
 
22
+ function setProductNftId(NftId productNftId) external;
22
23
  function getProductNftId() external view returns (NftId productNftId);
23
24
 
24
25
  }
@@ -4,6 +4,7 @@ pragma solidity ^0.8.19;
4
4
  import {Fee} from "../types/Fee.sol";
5
5
  import {ReferralId} from "../types/Referral.sol";
6
6
  import {NftId} from "../types/NftId.sol";
7
+ import {ISetup} from "../instance/module/ISetup.sol";
7
8
 
8
9
  interface IDistributionComponent {
9
10
 
@@ -55,7 +55,6 @@ contract Pool is BaseComponent, IPoolComponent {
55
55
  constructor(
56
56
  address registry,
57
57
  NftId instanceNftId,
58
- NftId productNftId,
59
58
  // TODO refactor into tokenNftId
60
59
  address token,
61
60
  bool isInterceptor,
@@ -66,7 +65,7 @@ contract Pool is BaseComponent, IPoolComponent {
66
65
  Fee memory performanceFee,
67
66
  address initialOwner
68
67
  )
69
- BaseComponent(registry, instanceNftId, productNftId, token, POOL(), isInterceptor, initialOwner)
68
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
70
69
  {
71
70
  _isVerifying = verifying;
72
71
  // TODO add validation
@@ -75,8 +74,8 @@ contract Pool is BaseComponent, IPoolComponent {
75
74
  _initialStakingFee = stakingFee;
76
75
  _initialPerformanceFee = performanceFee;
77
76
 
77
+ _poolService = _instance.getPoolService();
78
78
  // TODO: reactivate when services are available again
79
- // _poolService = _instance.getPoolService();
80
79
  // _productService = _instance.getProductService();
81
80
 
82
81
  _registerInterface(type(IPoolComponent).interfaceId);
@@ -170,20 +169,6 @@ contract Pool is BaseComponent, IPoolComponent {
170
169
  }
171
170
 
172
171
  function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
173
- // TODO fix this
174
- if (getNftId().eq(zeroNftId())) {
175
- return ISetup.PoolSetupInfo(
176
- _productNftId,
177
- TokenHandler(address(0)),
178
- _collateralizationLevel,
179
- _initialPoolFee,
180
- _initialStakingFee,
181
- _initialPerformanceFee,
182
- _isVerifying,
183
- _wallet
184
- );
185
- }
186
-
187
172
  InstanceReader reader = _instance.getInstanceReader();
188
173
  return reader.getPoolSetupInfo(getNftId());
189
174
  }
@@ -200,15 +185,14 @@ contract Pool is BaseComponent, IPoolComponent {
200
185
  {
201
186
  (
202
187
  IRegistry.ObjectInfo memory info,
203
- bytes memory data
204
188
  ) = super.getInitialInfo();
205
189
 
206
190
  return (
207
191
  info,
208
192
  abi.encode(
209
193
  ISetup.PoolSetupInfo(
210
- getProductNftId(),
211
- TokenHandler(address(0)),
194
+ _productNftId,
195
+ TokenHandler(address(_token)),
212
196
  _collateralizationLevel,
213
197
  _initialPoolFee,
214
198
  _initialStakingFee,
@@ -49,7 +49,7 @@ contract Product is BaseComponent, IProductComponent {
49
49
  Fee memory productFee,
50
50
  Fee memory processingFee,
51
51
  address initialOwner
52
- ) BaseComponent(registry, instanceNftid, zeroNftId(), token, PRODUCT(), isInterceptor, initialOwner) {
52
+ ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
53
53
  // TODO add validation
54
54
  // TODO: reactivate when services are available again
55
55
  // _productService = _instance.getProductService();
@@ -19,17 +19,18 @@ import {IAccessManagerSimple} from "./IAccessManagerSimple.sol";
19
19
  * functions, and ideally only used in `external` functions. See {restricted}.
20
20
  */
21
21
  abstract contract AccessManagedSimple is Context, IAccessManaged {
22
+ bool private _initialized;
22
23
  address private _authority;
23
24
 
24
25
  bool private _consumingSchedule;
25
26
 
26
- /**
27
- * @dev Initializes the contract connected to an initial authority.
28
- */
29
- constructor(address initialAuthority) {
27
+ function initializeAccessManagedSimple(address initialAuthority) internal {
28
+ require(!_initialized, "AccessManaged: already initialized");
30
29
  _setAuthority(initialAuthority);
30
+ _initialized = true;
31
31
  }
32
32
 
33
+
33
34
  /**
34
35
  * @dev Restricts access to a function as defined by the connected Authority for this contract and the
35
36
  * caller and selector of the function that entered the contract.
@@ -46,6 +46,8 @@ contract AccessManagerSimple is Context, IAccessManagerSimple {
46
46
  uint32 nonce;
47
47
  }
48
48
 
49
+ bool private _initialized;
50
+
49
51
  uint64 public constant ADMIN_ROLE = type(uint64).min; // 0
50
52
  uint64 public constant PUBLIC_ROLE = type(uint64).max; // 2**64-1
51
53
 
@@ -67,14 +69,22 @@ contract AccessManagerSimple is Context, IAccessManagerSimple {
67
69
  }
68
70
 
69
71
  constructor(address initialAdmin) {
72
+ initialize(initialAdmin);
73
+ }
74
+
75
+ function initialize(address initialAdmin) public {
76
+ require(!_initialized, "AccessManager: already initialized");
77
+
70
78
  if (initialAdmin == address(0)) {
71
79
  revert AccessManagerInvalidInitialAdmin(address(0));
72
80
  }
73
81
 
74
82
  // admin is active immediately and without any execution delay.
75
83
  _grantRole(ADMIN_ROLE, initialAdmin, 0, 0);
84
+ _initialized = true;
76
85
  }
77
86
 
87
+
78
88
  // =================================================== GETTERS ====================================================
79
89
  /// @inheritdoc IAccessManagerSimple
80
90
  function canCall(
@@ -9,20 +9,31 @@ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
9
9
  import {IDistributionService} from "./service/IDistributionService.sol";
10
10
  import {IPoolService} from "./service/IPoolService.sol";
11
11
  import {IProductService} from "./service/IProductService.sol";
12
+ import {IBundle} from "./module/IBundle.sol";
12
13
  import {ISetup} from "./module/ISetup.sol";
13
14
  import {NftId} from "../types/NftId.sol";
15
+ import {StateId} from "../types/StateId.sol";
14
16
 
15
17
  interface IInstance is IERC165 {
16
18
 
17
19
  function getComponentOwnerService() external view returns (IComponentOwnerService);
18
- // TODO: renable these when we have the services
19
- // function getDistributionService() external view returns (IDistributionService);
20
+ function getDistributionService() external view returns (IDistributionService);
20
21
  // function getProductService() external view returns (IProductService);
21
- // function getPoolService() external view returns (IPoolService);
22
+ function getPoolService() external view returns (IPoolService);
22
23
 
23
24
  function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external;
25
+
24
26
  function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
25
- function createPoolSetup(NftId distributionNftId, ISetup.PoolSetupInfo memory setup) external;
27
+ function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
28
+ function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
29
+
30
+ function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external;
31
+ function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external;
32
+ function updatePoolSetupState(NftId poolNftId, StateId newState) external;
33
+
34
+ function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external;
35
+ function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external;
36
+ function updateBundleState(NftId bundleNftId, StateId newState) external;
26
37
 
27
38
  function getInstanceReader() external view returns (InstanceReader);
28
39
  }
@@ -10,8 +10,21 @@ import {IRegistry} from "../registry/IRegistry.sol";
10
10
  import {IRegisterable} from "../shared/IRegisterable.sol";
11
11
  import {IBaseComponent} from "../components/IBaseComponent.sol";
12
12
 
13
+ import {AccessManagerSimple} from "./AccessManagerSimple.sol";
14
+ import {Instance} from "./Instance.sol";
15
+ import {InstanceReader} from "./InstanceReader.sol";
16
+
13
17
  interface IInstanceService is IService {
14
18
 
15
-
19
+ event LogInstanceCloned(address clonedAccessManagerAddress, address clonedInstanceAddress, address clonedInstanceReaderAddress, NftId clonedInstanceNftId);
20
+
21
+ function createInstanceClone()
22
+ external
23
+ returns (
24
+ AccessManagerSimple clonedAccessManager,
25
+ Instance clonedInstance,
26
+ NftId instanceNftId,
27
+ InstanceReader clonedInstanceReader
28
+ );
16
29
  }
17
30
 
@@ -25,6 +25,8 @@ import {ERC165} from "../shared/ERC165.sol";
25
25
  import {Registerable} from "../shared/Registerable.sol";
26
26
  import {ComponentOwnerService} from "./service/ComponentOwnerService.sol";
27
27
  import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
28
+ import {IDistributionService} from "./service/IDistributionService.sol";
29
+ import {IPoolService} from "./service/IPoolService.sol";
28
30
  import {VersionPart} from "../types/Version.sol";
29
31
 
30
32
  contract Instance is
@@ -41,6 +43,8 @@ contract Instance is
41
43
 
42
44
  uint32 public constant EXECUTION_DELAY = 0;
43
45
 
46
+ bool private _initialized;
47
+
44
48
  mapping(ShortString name => RoleId roleId) internal _role;
45
49
  mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
46
50
  RoleId [] internal _roles;
@@ -51,16 +55,23 @@ contract Instance is
51
55
  InstanceReader internal _instanceReader;
52
56
 
53
57
  constructor(address accessManagerAddress, address registryAddress, NftId registryNftId)
54
- AccessManagedSimple(accessManagerAddress)
55
58
  {
56
- // TODO move to initializer method and remove constructor - required for the instance to be cloneable
59
+ initialize(accessManagerAddress, registryAddress, registryNftId, msg.sender);
60
+ }
61
+
62
+ function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner) public {
63
+ require(!_initialized, "Contract instance has already been initialized");
64
+
65
+ initializeAccessManagedSimple(accessManagerAddress);
66
+
57
67
  _accessManager = AccessManagerSimple(accessManagerAddress);
58
68
  _createRole(RoleIdLib.toRoleId(ADMIN_ROLE), "AdminRole", false, false);
59
69
  _createRole(RoleIdLib.toRoleId(PUBLIC_ROLE), "PublicRole", false, false);
60
70
 
61
- _initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, msg.sender, "");
71
+ _initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, initialOwner, "");
62
72
 
63
- _registerInterface(type(IInstance).interfaceId);
73
+ _registerInterface(type(IInstance).interfaceId);
74
+ _initialized = true;
64
75
  }
65
76
 
66
77
  //--- Role ------------------------------------------------------//
@@ -210,16 +221,16 @@ contract Instance is
210
221
  }
211
222
 
212
223
  //--- PoolSetup ------------------------------------------------------//
213
- function createPoolSetup(NftId distributionNftId, ISetup.PoolSetupInfo memory setup) external restricted() {
214
- create(_toNftKey32(distributionNftId, POOL()), abi.encode(setup));
224
+ function createPoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup) external restricted() {
225
+ create(_toNftKey32(poolNftId, POOL()), abi.encode(setup));
215
226
  }
216
227
 
217
- function updatePoolSetup(NftId distributionNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external restricted() {
218
- update(_toNftKey32(distributionNftId, POOL()), abi.encode(setup), newState);
228
+ function updatePoolSetup(NftId poolNftId, ISetup.PoolSetupInfo memory setup, StateId newState) external restricted() {
229
+ update(_toNftKey32(poolNftId, POOL()), abi.encode(setup), newState);
219
230
  }
220
231
 
221
- function updatePoolSetupState(NftId distributionNftId, StateId newState) external restricted() {
222
- updateState(_toNftKey32(distributionNftId, POOL()), newState);
232
+ function updatePoolSetupState(NftId poolNftId, StateId newState) external restricted() {
233
+ updateState(_toNftKey32(poolNftId, POOL()), newState);
223
234
  }
224
235
 
225
236
  //--- DistributorType ---------------------------------------------------//
@@ -408,25 +419,21 @@ contract Instance is
408
419
  return ComponentOwnerService(_registry.getServiceAddress("ComponentOwnerService", VersionPart.wrap(3)));
409
420
  }
410
421
 
411
- // TODO reactivate when services are available
412
- // function getDistributionService() external view returns (IDistributionService) {
413
- // return DistributionService(_registry.getServiceAddress("DistributionService", VersionPart.wrap(3)));
414
- // }
422
+ function getDistributionService() external view returns (IDistributionService) {
423
+ return IDistributionService(_registry.getServiceAddress("DistributionService", VersionPart.wrap(3)));
424
+ }
415
425
 
416
426
  // TODO reactivate when services are available
417
427
  // function getProductService() external view returns (IProductService) {
418
428
  // return ProductService(_registry.getServiceAddress("ProductService", VersionPart.wrap(3)));
419
429
  // }
420
430
 
421
- // TODO reactivate when services are available
422
- // function getPoolService() external view returns (IPoolService) {
423
- // return PoolService(_registry.getServiceAddress("PoolService", VersionPart.wrap(3)));
424
- // }
431
+ function getPoolService() external view returns (IPoolService) {
432
+ return IPoolService(_registry.getServiceAddress("PoolService", VersionPart.wrap(3)));
433
+ }
425
434
 
426
435
  function setInstanceReader(InstanceReader instanceReader) external restricted() {
427
- if (address(_instanceReader) != address(0)) {
428
- revert("InstanceReader is set");
429
- }
436
+ require(address(_instanceReader) == address(0), "InstanceReader is set");
430
437
  _instanceReader = instanceReader;
431
438
  }
432
439
 
@@ -79,9 +79,9 @@ contract InstanceAccessManager is
79
79
  AccessManagerSimple internal _accessManager;
80
80
 
81
81
  constructor(address accessManager)
82
- AccessManagedSimple(accessManager)
83
82
  {
84
83
  _accessManager = AccessManagerSimple(accessManager);
84
+ initializeAccessManagedSimple(accessManager);
85
85
 
86
86
  _createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
87
87
  _createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
@@ -7,7 +7,7 @@ import {DistributorType} from "../types/DistributorType.sol";
7
7
  import {Fee, FeeLib} from "../types/Fee.sol";
8
8
  import {Key32} from "../types/Key32.sol";
9
9
  import {NftId} from "../types/NftId.sol";
10
- import {ObjectType, DISTRIBUTOR, DISTRIBUTION, INSTANCE, PRODUCT, POLICY, POOL, TREASURY} from "../types/ObjectType.sol";
10
+ import {ObjectType, DISTRIBUTOR, DISTRIBUTION, INSTANCE, PRODUCT, POLICY, POOL, TREASURY, BUNDLE} from "../types/ObjectType.sol";
11
11
  import {ReferralId, ReferralStatus, ReferralLib, REFERRAL_OK, REFERRAL_ERROR_UNKNOWN, REFERRAL_ERROR_EXPIRED, REFERRAL_ERROR_EXHAUSTED} from "../types/Referral.sol";
12
12
  import {Registerable} from "../shared/Registerable.sol";
13
13
  import {RiskId} from "../types/RiskId.sol";
@@ -15,6 +15,7 @@ import {UFixed, MathLib, UFixedLib} from "../types/UFixed.sol";
15
15
  import {Version} from "../types/Version.sol";
16
16
 
17
17
  import {IRegistry} from "../registry/IRegistry.sol";
18
+ import {IBundle} from "../instance/module/IBundle.sol";
18
19
  import {IDistribution} from "../instance/module/IDistribution.sol";
19
20
  import {IInstance} from "./IInstance.sol";
20
21
  import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
@@ -26,6 +27,7 @@ import {TimestampLib} from "../types/Timestamp.sol";
26
27
 
27
28
 
28
29
  contract InstanceReader {
30
+ bool private _initialized;
29
31
 
30
32
  IRegistry internal _registry;
31
33
  NftId internal _instanceNftId;
@@ -37,6 +39,12 @@ contract InstanceReader {
37
39
  NftId instanceNftId
38
40
  )
39
41
  {
42
+ initialize(registry, instanceNftId);
43
+ }
44
+
45
+ function initialize(address registry, NftId instanceNftId) public {
46
+ require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
47
+
40
48
  require(
41
49
  address(registry) != address(0),
42
50
  "ERROR:CRD-001:REGISTRY_ZERO");
@@ -55,8 +63,11 @@ contract InstanceReader {
55
63
 
56
64
  _instance = IInstance(instanceInfo.objectAddress);
57
65
  _store = IKeyValueStore(instanceInfo.objectAddress);
66
+
67
+ _initialized = true;
58
68
  }
59
69
 
70
+
60
71
  // module specific functions
61
72
 
62
73
  function getPolicyInfo(NftId policyNftId)
@@ -104,6 +115,17 @@ contract InstanceReader {
104
115
  return abi.decode(data, (ITreasury.TreasuryInfo));
105
116
  }
106
117
  }
118
+
119
+ function getBundleInfo(NftId bundleNftId)
120
+ public
121
+ view
122
+ returns (IBundle.BundleInfo memory info)
123
+ {
124
+ bytes memory data = _store.getData(toBundleKey(bundleNftId));
125
+ if (data.length > 0) {
126
+ return abi.decode(data, (IBundle.BundleInfo));
127
+ }
128
+ }
107
129
 
108
130
  function getDistributorTypeInfo(DistributorType distributorType)
109
131
  public
@@ -249,6 +271,10 @@ contract InstanceReader {
249
271
  return distributionNftId.toKey32(DISTRIBUTION());
250
272
  }
251
273
 
274
+ function toBundleKey(NftId poolNftId) public pure returns (Key32) {
275
+ return poolNftId.toKey32(BUNDLE());
276
+ }
277
+
252
278
  function toPoolKey(NftId poolNftId) public pure returns (Key32) {
253
279
  return poolNftId.toKey32(POOL());
254
280
  }