@etherisc/gif-next 0.0.2-94be5d8-181 → 0.0.2-94dc606-665

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 (195) 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 +75 -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/IDistributionComponent.sol/IDistributionComponent.json +52 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +29 -13
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +39 -18
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +1 -1
  40. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
  41. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +15 -2
  42. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +93 -0
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +59 -0
  47. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  48. package/artifacts/contracts/instance/Instance.sol/Instance.json +137 -80
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +34 -34
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +63 -37
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +189 -41
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +57 -9
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  58. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +5 -0
  59. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  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/KeyValueStore.sol/KeyValueStore.json +2 -2
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +657 -0
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +436 -0
  79. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  83. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  84. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  85. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -0
  86. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  87. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -19
  88. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  89. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  90. package/artifacts/contracts/registry/Registry.sol/Registry.json +258 -24
  91. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  92. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +20 -44
  93. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  94. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +49 -28
  95. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  96. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  97. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  98. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  99. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  100. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  101. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  102. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  103. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  104. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  105. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  106. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  107. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  108. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  109. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  110. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  111. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  112. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  113. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  114. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  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 +13 -13
  157. package/contracts/components/IBaseComponent.sol +1 -0
  158. package/contracts/components/IDistributionComponent.sol +3 -0
  159. package/contracts/components/Pool.sol +1 -2
  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 +6 -2
  164. package/contracts/instance/IInstanceService.sol +21 -8
  165. package/contracts/instance/Instance.sol +18 -11
  166. package/contracts/instance/InstanceAccessManager.sol +1 -1
  167. package/contracts/instance/InstanceReader.sol +10 -0
  168. package/contracts/instance/InstanceService.sol +95 -27
  169. package/contracts/instance/base/ComponentServiceBase.sol +4 -12
  170. package/contracts/instance/service/ComponentOwnerService.sol +5 -5
  171. package/contracts/instance/service/DistributionService.sol +105 -0
  172. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  173. package/contracts/instance/service/IComponentOwnerService.sol +1 -1
  174. package/contracts/instance/service/IDistributionService.sol +1 -1
  175. package/contracts/instance/service/IPoolService.sol +1 -1
  176. package/contracts/instance/service/IProductService.sol +1 -1
  177. package/contracts/registry/IRegistry.sol +39 -2
  178. package/contracts/registry/IRegistryService.sol +7 -9
  179. package/contracts/registry/Registry.sol +95 -29
  180. package/contracts/registry/RegistryService.sol +14 -54
  181. package/contracts/registry/RegistryServiceManager.sol +21 -5
  182. package/contracts/registry/TokenRegistry.sol +111 -0
  183. package/contracts/shared/ERC165.sol +6 -2
  184. package/contracts/{instance/base → shared}/IService.sol +3 -3
  185. package/contracts/shared/Registerable.sol +1 -0
  186. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  187. package/contracts/shared/Service.sol +54 -0
  188. package/contracts/test/TestService.sol +3 -5
  189. package/contracts/types/RoleId.sol +6 -0
  190. package/contracts/types/StateId.sol +4 -0
  191. package/contracts/types/Version.sol +4 -1
  192. package/package.json +1 -1
  193. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  194. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  195. package/contracts/instance/base/ServiceBase.sol +0 -44
@@ -7,18 +7,24 @@ import {AccessManagerSimple} from "./AccessManagerSimple.sol";
7
7
  import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
8
  import {Instance} from "./Instance.sol";
9
9
  import {IInstanceService} from "./IInstanceService.sol";
10
- import {ServiceBase} from "../../contracts/instance/base/ServiceBase.sol";
10
+ import {InstanceReader} from "./InstanceReader.sol";
11
11
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {IService} from "../../contracts/instance/base/IService.sol";
12
+ import {Registry} from "../registry/Registry.sol";
13
+ import {RegistryService} from "../registry/RegistryService.sol";
14
+ import {Service} from "../../contracts/shared/Service.sol";
15
+ import {IService} from "../shared/IService.sol";
13
16
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
14
17
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
18
+ import {RoleId} from "../types/RoleId.sol";
19
+ import {VersionLib} from "../types/Version.sol";
20
+ import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE} from "../types/RoleId.sol";
15
21
 
16
- contract InstanceService is ServiceBase, IInstanceService {
22
+ contract InstanceService is Service, IInstanceService {
17
23
 
18
24
  address internal _registryAddress;
19
25
  address internal _accessManagerMaster;
20
- address internal _instanceAccessManagerMaster;
21
26
  address internal _instanceMaster;
27
+ address internal _instanceReaderMaster;
22
28
 
23
29
  // TODO update to real hash when instance is stable
24
30
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
@@ -27,34 +33,92 @@ contract InstanceService is ServiceBase, IInstanceService {
27
33
  function createInstanceClone()
28
34
  external
29
35
  returns (
30
- AccessManagerSimple am,
31
- InstanceAccessManager im,
32
- Instance i
36
+ AccessManagerSimple clonedAccessManager,
37
+ Instance clonedInstance,
38
+ NftId instanceNftId,
39
+ InstanceReader clonedInstanceReader
33
40
  )
34
41
  {
35
- am = AccessManagerSimple(Clones.clone(_accessManagerMaster));
36
- im = InstanceAccessManager(Clones.clone(_instanceAccessManagerMaster));
37
- i = Instance(Clones.clone(_instanceMaster));
42
+ address instanceOwner = msg.sender;
43
+ Registry registry = Registry(_registryAddress);
44
+ NftId registryNftId = registry.getNftId(_registryAddress);
45
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
46
+ RegistryService registryService = RegistryService(registryServiceAddress);
47
+
48
+ // initially set the authority of the access managar to this (being the instance service).
49
+ // This will allow the instance service to bootstrap the authorizations of the instance
50
+ // and then transfer the ownership of the access manager to the instance owner once everything is setup
51
+ clonedAccessManager = AccessManagerSimple(Clones.clone(_accessManagerMaster));
52
+ clonedAccessManager.initialize(address(this));
53
+
54
+ clonedInstance = Instance(Clones.clone(_instanceMaster));
55
+ clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
56
+ ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
57
+ instanceNftId = info.nftId;
58
+
59
+ clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
60
+ clonedInstanceReader.initialize(_registryAddress, instanceNftId);
61
+
62
+ _grantInitialAuthorizations(clonedAccessManager, clonedInstance);
63
+
64
+ clonedInstance.setInstanceReader(clonedInstanceReader);
65
+
66
+ // to complete setup switch instance ownership to the instance owner
67
+ // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
68
+ clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
69
+ clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
70
+
71
+ emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), instanceNftId);
72
+ }
73
+
74
+ function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance) internal {
75
+ address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
76
+
77
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
78
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
79
+ instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
80
+ instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
81
+ clonedAccessManager.setTargetFunctionRole(
82
+ address(clonedInstance),
83
+ instanceDistributionServiceSelectors,
84
+ DISTRIBUTION_SERVICE_ROLE().toInt());
85
+ }
86
+
87
+ function setAccessManagerMaster(address accessManagerMaster) external {
88
+ require(
89
+ _accessManagerMaster == address(0),
90
+ "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
91
+ _accessManagerMaster = accessManagerMaster;
92
+ }
93
+
94
+ function setInstanceMaster(address instanceMaster) external {
95
+ require(
96
+ _instanceMaster == address(0),
97
+ "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
98
+ _instanceMaster = instanceMaster;
38
99
  }
39
100
 
40
- function setAccessManagerMaster(address accessManager) external {
41
- _accessManagerMaster = accessManager;
101
+ function setInstanceReaderMaster(address instanceReaderMaster) external {
102
+ require(
103
+ _instanceReaderMaster == address(0),
104
+ "ERROR:CRD-003:INSTANCE_READER_MASTER_ALREADY_SET");
105
+ _instanceReaderMaster = instanceReaderMaster;
42
106
  }
43
107
 
44
- function setInstanceAccessManagerMaster(address instanceAccessManager) external {
45
- _instanceAccessManagerMaster = instanceAccessManager;
108
+ function getInstanceReaderMaster() external view returns (address) {
109
+ return _instanceReaderMaster;
46
110
  }
47
111
 
48
- function setInstanceMaster(address instance) external {
49
- _instanceMaster = instance;
112
+ function getInstanceMaster() external view returns (address) {
113
+ return _instanceMaster;
50
114
  }
51
115
 
52
- function getAccessManagerMaster() external view returns (address) { return address(_accessManagerMaster); }
53
- function getInstanceAccessManagerMaster() external view returns (address) { return address(_instanceAccessManagerMaster); }
54
- function getInstanceMaster() external view returns (address) { return address(_instanceMaster); }
116
+ function getAccessManagerMaster() external view returns (address) {
117
+ return _accessManagerMaster;
118
+ }
55
119
 
56
120
  // From IService
57
- function getName() public pure override(IService, ServiceBase) returns(string memory) {
121
+ function getName() public pure override(IService, Service) returns(string memory) {
58
122
  return NAME;
59
123
  }
60
124
 
@@ -85,18 +149,22 @@ contract InstanceService is ServiceBase, IInstanceService {
85
149
  address initialOwner = address(0);
86
150
  (_registryAddress, initialOwner) = abi.decode(data, (address, address));
87
151
 
88
- // // TODO register instance in registry
89
- IRegistry registry = IRegistry(_registryAddress);
90
- NftId registryNftId = registry.getNftId(_registryAddress);
91
-
92
- _initializeServiceBase(_registryAddress, registryNftId, initialOwner);
152
+ _initializeService(_registryAddress, initialOwner);
93
153
 
94
154
  _registerInterface(type(IService).interfaceId);
95
155
  _registerInterface(type(IInstanceService).interfaceId);
96
156
  }
97
157
 
98
- function getInstance() external view returns (Instance) {
99
- return Instance(address(this));
158
+ function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
159
+ IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
160
+ address instanceAddress = instanceObjectInfo.objectAddress;
161
+ Instance instance = Instance(instanceAddress);
162
+ AccessManagerSimple accessManager = AccessManagerSimple(instance.authority());
163
+ (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
164
+ if (executionDelay > 0) {
165
+ return false;
166
+ }
167
+ return isMember;
100
168
  }
101
169
  }
102
170
 
@@ -7,20 +7,12 @@ import {IInstance} from "../../instance/IInstance.sol";
7
7
  import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
8
8
  import {NftId, NftIdLib} from "../../types/NftId.sol";
9
9
 
10
- import {ServiceBase} from "./ServiceBase.sol";
10
+ import {Service} from "../../shared/Service.sol";
11
11
  import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
12
12
 
13
- abstract contract ComponentServiceBase is ServiceBase {
14
-
15
- constructor(
16
- address registry,
17
- NftId registryNftId,
18
- address initialOwner
19
- )
20
- {
21
- _initializeServiceBase(registry, registryNftId, initialOwner);
22
- }
13
+ abstract contract ComponentServiceBase is Service {
23
14
 
15
+ error CallerIsNotComponentOwner();
24
16
 
25
17
  function _getAndVerifyComponentInfoAndInstance(
26
18
  ObjectType objectType
@@ -32,7 +24,7 @@ abstract contract ComponentServiceBase is ServiceBase {
32
24
  IInstance instance
33
25
  )
34
26
  {
35
- NftId componentNftId = getRegistry().getNftId(msg.sender);
27
+ NftId componentNftId = _registry.getNftId(msg.sender);
36
28
  require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
37
29
 
38
30
  info = getRegistry().getObjectInfo(componentNftId);
@@ -27,15 +27,15 @@ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
27
27
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
28
28
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
29
29
  import {IProductComponent} from "../../components/IProductComponent.sol";
30
- import {IService} from "../base/IService.sol";
30
+ import {IService} from "../../shared/IService.sol";
31
31
  import {IComponentOwnerService} from "./IComponentOwnerService.sol";
32
- import {ServiceBase} from "../base/ServiceBase.sol";
32
+ import {Service} from "../../shared/Service.sol";
33
33
  // import {IPool, IPoolModule} from "../module/IPoolModule.sol";
34
34
 
35
35
  import {IRegistryService} from "../../registry/IRegistryService.sol";
36
36
 
37
37
  contract ComponentOwnerService is
38
- ServiceBase,
38
+ Service,
39
39
  IComponentOwnerService
40
40
  {
41
41
  using NftIdLib for NftId;
@@ -64,11 +64,11 @@ contract ComponentOwnerService is
64
64
  address initialOwner
65
65
  )
66
66
  {
67
- _initializeServiceBase(registry, registryNftId, initialOwner);
67
+ _initializeService(registry, initialOwner);
68
68
  _registerInterface(type(IComponentOwnerService).interfaceId);
69
69
  }
70
70
 
71
- function getName() public pure override(IService, ServiceBase) returns(string memory name) {
71
+ function getName() public pure override(IService, Service) returns(string memory name) {
72
72
  return NAME;
73
73
  }
74
74
 
@@ -0,0 +1,105 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {InstanceReader} from "../../instance/InstanceReader.sol";
8
+ import {ISetup} from "../../instance/module/ISetup.sol";
9
+ import {ITreasury} from "../../instance/module/ITreasury.sol";
10
+
11
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
12
+ import {Fee} from "../../types/Fee.sol";
13
+ import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
14
+ import {KEEP_STATE} from "../../types/StateId.sol";
15
+ import {DISTRIBUTION} from "../../types/ObjectType.sol";
16
+ import {Version, VersionLib} from "../../types/Version.sol";
17
+
18
+ import {IVersionable} from "../../shared/IVersionable.sol";
19
+ import {Versionable} from "../../shared/Versionable.sol";
20
+
21
+ import {IService} from "../../shared/IService.sol";
22
+ import {Service} from "../../shared/Service.sol";
23
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
24
+ import {IDistributionService} from "./IDistributionService.sol";
25
+ import {Distribution} from "../../components/Distribution.sol";
26
+ import {InstanceService} from "../InstanceService.sol";
27
+ import {Instance} from "../Instance.sol";
28
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
29
+
30
+ string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
31
+
32
+ contract DistributionService is
33
+ ComponentServiceBase,
34
+ IDistributionService
35
+ {
36
+ using NftIdLib for NftId;
37
+
38
+ string public constant NAME = "DistributionService";
39
+
40
+ address internal _registryAddress;
41
+ InstanceService internal _instanceService;
42
+
43
+ function _initialize(
44
+ address owner,
45
+ bytes memory data
46
+ )
47
+ internal
48
+ initializer
49
+ virtual override
50
+ {
51
+ address initialOwner = address(0);
52
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
53
+
54
+ IRegistry registry = IRegistry(_registryAddress);
55
+ _instanceService = InstanceService(registry.getServiceAddress("InstanceService", getMajorVersion()));
56
+
57
+ _initializeService(_registryAddress, initialOwner);
58
+
59
+ _registerInterface(type(IService).interfaceId);
60
+ _registerInterface(type(IDistributionService).interfaceId);
61
+ }
62
+
63
+
64
+ function getName() public pure override(IService, Service) returns(string memory name) {
65
+ return NAME;
66
+ }
67
+
68
+ function register(address distributionComponentAddress)
69
+ external
70
+ returns (NftId distributionNftId)
71
+ {
72
+ address componentOwner = msg.sender;
73
+ Distribution distribution = Distribution(distributionComponentAddress);
74
+ IInstance instance = distribution.getInstance();
75
+ INftOwnable nftOwnable = INftOwnable(address(instance));
76
+
77
+ require(_instanceService.hasRole(componentOwner, DISTRIBUTION_OWNER_ROLE(), nftOwnable.getNftId()), "ERROR:DIS-001:NOT_DISTRIBUTION_OWNER");
78
+
79
+ IRegistryService registryService = getRegistryService();
80
+ (IRegistry.ObjectInfo memory distributionObjInfo, ) = registryService.registerDistribution(
81
+ distribution,
82
+ componentOwner
83
+ );
84
+ distributionNftId = distributionObjInfo.nftId;
85
+
86
+ ISetup.DistributionSetupInfo memory initialSetup = distribution.getInitialSetupInfo();
87
+ instance.createDistributionSetup(distributionNftId, initialSetup);
88
+ }
89
+
90
+ function setFees(
91
+ Fee memory distributionFee
92
+ )
93
+ external
94
+ override
95
+ {
96
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
97
+ InstanceReader instanceReader = instance.getInstanceReader();
98
+ NftId distributionNftId = info.nftId;
99
+
100
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
101
+ distSetupInfo.distributionFee = distributionFee;
102
+
103
+ instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
104
+ }
105
+ }
@@ -0,0 +1,53 @@
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 {DistributionService} from "./DistributionService.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 DistributionServiceManager is ProxyManager {
12
+
13
+ DistributionService private _distributionService;
14
+
15
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ DistributionService distSrv = new DistributionService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(distSrv),
25
+ data);
26
+
27
+ _distributionService = DistributionService(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
+
33
+ registryService.registerService(_distributionService);
34
+
35
+ // link ownership of instance service manager ot nft owner of instance service
36
+ _linkToNftOwnable(
37
+ address(registryAddress),
38
+ address(_distributionService));
39
+
40
+ // implies that after this constructor call only upgrade functionality is available
41
+ _isDeployed = true;
42
+ }
43
+
44
+ //--- view functions ----------------------------------------------------//
45
+ function getDistributionService()
46
+ external
47
+ view
48
+ returns (DistributionService distributionService)
49
+ {
50
+ return _distributionService;
51
+ }
52
+
53
+ }
@@ -5,7 +5,7 @@ import {NftId} from "../../types/NftId.sol";
5
5
  import {ObjectType} from "../../types/ObjectType.sol";
6
6
  import {RoleId} from "../../types/RoleId.sol";
7
7
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
8
- import {IService} from "../base/IService.sol";
8
+ import {IService} from "../../shared/IService.sol";
9
9
 
10
10
  // TODO rename to registry service
11
11
  interface IComponentOwnerService is IService {
@@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
- import {IService} from "../base/IService.sol";
6
+ import {IService} from "../../shared/IService.sol";
7
7
 
8
8
  interface IDistributionService is IService {
9
9
  function setFees(
@@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
- import {IService} from "../base/IService.sol";
6
+ import {IService} from "../../shared/IService.sol";
7
7
 
8
8
  interface IPoolService is IService {
9
9
  function setFees(
@@ -2,7 +2,7 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRisk} from "../module/IRisk.sol";
5
- import {IService} from "../base/IService.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
6
 
7
7
  import {NftId} from "../../types/NftId.sol";
8
8
  import {ReferralId} from "../../types/Referral.sol";
@@ -10,10 +10,33 @@ 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
-
16
+ event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
15
17
  event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
16
18
 
19
+ // supported versions
20
+ error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
21
+
22
+ // token whitelisting
23
+ error TokenNotRegistered(address token);
24
+ error NotToken(address token);
25
+ error TokenMajorVersionInvalid(VersionPart majorVersion);
26
+
27
+ // register
28
+ error NotRegistryService();
29
+ error ZeroParentAddress();
30
+ error ContractAlreadyRegistered(address objectAddress);
31
+ error InvalidServiceVersion(VersionPart majorVersion);
32
+ error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
33
+
34
+ // approve
35
+ error NotOwner(address account);
36
+ error NotRegisteredContract(NftId registrarNftId);
37
+ error NotService(NftId registrarNftId);
38
+ error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
39
+
17
40
 
18
41
  struct ObjectInfo {
19
42
  NftId nftId;
@@ -24,12 +47,24 @@ interface IRegistry is IERC165 {
24
47
  address initialOwner;
25
48
  bytes data;
26
49
  }// TODO delete nftId and initialOwner(if not used) from struct
50
+ // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
51
+
52
+ function setMajorVersion(VersionPart newMajorVersionMax) external;
27
53
 
28
54
  function register(ObjectInfo memory info) external returns (NftId nftId);
29
-
55
+
56
+ function setTokenActive(address token, VersionPart majorVersion, bool active) external;
57
+
58
+ function getMajorVersionMin() external view returns (VersionPart);
59
+
60
+ function getMajorVersionMax() external view returns (VersionPart);
61
+
62
+ function getMajorVersion() external view returns (VersionPart);
30
63
 
31
64
  function getObjectCount() external view returns (uint256);
32
65
 
66
+ function getNftId() external view returns (NftId nftId);
67
+
33
68
  function getNftId(address objectAddress) external view returns (NftId nftId);
34
69
 
35
70
  function ownerOf(NftId nftId) external view returns (address);
@@ -44,6 +79,8 @@ interface IRegistry is IERC165 {
44
79
 
45
80
  function isRegistered(address contractAddress) external view returns (bool);
46
81
 
82
+ function isTokenActive(address token, VersionPart majorVersion) external view returns (bool);
83
+
47
84
  function getServiceName(NftId nftId) external view returns (string memory name);
48
85
 
49
86
  function getServiceAddress(
@@ -1,19 +1,17 @@
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);
16
-
17
15
  function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
18
16
 
19
17
  function registerInstance(IRegisterable instance)