@etherisc/gif-next 0.0.2-aa8d0c4-506 → 0.0.2-ab4c2da-820

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 (240) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +126 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +136 -62
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +88 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -52
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +168 -102
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +144 -64
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  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/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  37. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  38. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  43. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +981 -10
  46. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  47. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  48. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +30 -14
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +169 -139
  52. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +55 -32
  54. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +74 -40
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +269 -94
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -34
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +30 -19
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  82. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +43 -53
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +15 -23
  88. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  90. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  92. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  94. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -77
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -240
  100. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -0
  102. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +42 -157
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +15 -35
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +755 -0
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  113. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +82 -262
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +188 -65
  118. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  120. package/artifacts/contracts/registry/Registry.sol/Registry.json +112 -331
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  122. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  124. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +37 -79
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -112
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  128. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +551 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  131. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  141. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  144. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  155. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  157. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  161. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  162. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  170. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  176. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  182. package/contracts/components/BaseComponent.sol +49 -8
  183. package/contracts/components/Distribution.sol +12 -15
  184. package/contracts/components/IBaseComponent.sol +6 -0
  185. package/contracts/components/IDistributionComponent.sol +0 -2
  186. package/contracts/components/IPoolComponent.sol +5 -1
  187. package/contracts/components/Pool.sol +49 -25
  188. package/contracts/components/Product.sol +41 -46
  189. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  190. package/contracts/instance/BundleManager.sol +129 -0
  191. package/contracts/instance/Cloneable.sol +46 -0
  192. package/contracts/instance/IInstance.sol +25 -4
  193. package/contracts/instance/IInstanceBase.sol +26 -0
  194. package/contracts/instance/IInstanceService.sol +7 -3
  195. package/contracts/instance/Instance.sol +44 -23
  196. package/contracts/instance/InstanceAccessManager.sol +6 -6
  197. package/contracts/instance/InstanceBase.sol +41 -0
  198. package/contracts/instance/InstanceReader.sol +9 -0
  199. package/contracts/instance/InstanceService.sol +190 -73
  200. package/contracts/instance/InstanceServiceManager.sol +8 -6
  201. package/contracts/instance/ObjectManager.sol +101 -0
  202. package/contracts/instance/base/ComponentServiceBase.sol +36 -24
  203. package/contracts/instance/module/ISetup.sol +3 -1
  204. package/contracts/instance/service/BundleService.sol +260 -0
  205. package/contracts/instance/service/BundleServiceManager.sol +55 -0
  206. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  207. package/contracts/instance/service/DistributionService.sol +41 -26
  208. package/contracts/instance/service/DistributionServiceManager.sol +8 -6
  209. package/contracts/instance/service/IBundleService.sol +45 -0
  210. package/contracts/instance/service/IPolicyService.sol +87 -0
  211. package/contracts/instance/service/IPoolService.sol +6 -23
  212. package/contracts/instance/service/IProductService.sol +6 -73
  213. package/contracts/instance/service/PolicyService.sol +503 -0
  214. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  215. package/contracts/instance/service/PoolService.sol +46 -129
  216. package/contracts/instance/service/PoolServiceManager.sol +8 -6
  217. package/contracts/instance/service/ProductService.sol +168 -0
  218. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  219. package/contracts/registry/ChainNft.sol +1 -1
  220. package/contracts/registry/IRegistry.sol +16 -33
  221. package/contracts/registry/IRegistryService.sol +37 -12
  222. package/contracts/registry/Registry.sol +138 -242
  223. package/contracts/registry/RegistryAccessManager.sol +207 -0
  224. package/contracts/registry/RegistryService.sol +83 -152
  225. package/contracts/registry/RegistryServiceManager.sol +18 -36
  226. package/contracts/registry/ReleaseManager.sol +382 -0
  227. package/contracts/registry/TokenRegistry.sol +5 -6
  228. package/contracts/shared/IService.sol +2 -1
  229. package/contracts/shared/NftOwnable.sol +2 -4
  230. package/contracts/shared/ProxyManager.sol +1 -1
  231. package/contracts/shared/Service.sol +11 -7
  232. package/contracts/test/TestService.sol +3 -2
  233. package/contracts/types/NftIdSet.sol +26 -24
  234. package/contracts/types/RoleId.sol +7 -5
  235. package/package.json +1 -1
  236. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  237. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  238. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  239. package/contracts/instance/AccessManagedSimple.sol +0 -115
  240. package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -1,28 +1,30 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../shared/IService.sol";
6
4
 
7
- import {ChainNft} from "./ChainNft.sol";
8
- import {IRegistry} from "./IRegistry.sol";
9
5
  import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
6
  import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
11
7
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
8
 
9
+ import {IRegisterable} from "../shared/IRegisterable.sol";
10
+ import {IService} from "../shared/IService.sol";
14
11
  import {ERC165} from "../shared/ERC165.sol";
15
12
 
13
+ import {ChainNft} from "./ChainNft.sol";
14
+ import {IRegistry} from "./IRegistry.sol";
15
+ import {IRegistryService} from "./IRegistryService.sol";
16
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
17
+ import {ReleaseManager} from "./ReleaseManager.sol";
16
18
 
17
- // IMPORTANT
19
+ // IMPORTANT (OPTION 1)
18
20
  // Each NFT minted by registry is accosiated with:
19
21
  // 1) NFT owner
20
22
  // 2) registred contract OR object stored in registered (parent) contract
21
23
  // Four registration flows:
22
- // 1) non IRegisterable address by registryOwner (TOKEN)
23
- // 2) IRegisterable address by registryOwner (SERVICE)
24
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
25
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
24
+ // 1) IService address by release manager (SERVICE of type SERVICE aka registry service)
25
+ // 2) IService address by release manager (SERVICE of type !SERVICE aka regular service)
26
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
27
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
26
28
 
27
29
  contract Registry is
28
30
  ERC165,
@@ -30,65 +32,51 @@ contract Registry is
30
32
  {
31
33
  uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
34
  address public constant NFT_LOCK_ADDRESS = address(0x1);
35
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
33
36
  uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
34
37
  string public constant EMPTY_URI = "";
35
38
 
36
- VersionPart internal _majorVersion;
37
-
38
39
  mapping(NftId nftId => ObjectInfo info) internal _info;
39
40
  mapping(address object => NftId nftId) internal _nftIdByAddress;
40
41
 
41
- mapping(NftId registrator => mapping(
42
- ObjectType objectType => bool)) internal _isApproved;
43
-
44
42
  mapping(ObjectType objectType => mapping(
45
43
  ObjectType parentType => bool)) internal _isValidContractCombination;
46
44
 
47
45
  mapping(ObjectType objectType => mapping(
48
46
  ObjectType parentType => bool)) internal _isValidObjectCombination;
49
47
 
50
- mapping(address token => mapping(
51
- VersionPart majorVersion => bool isActive)) internal _tokenIsActive;
52
-
53
- mapping(NftId nftId => string name) internal _string;
54
- mapping(bytes32 serviceNameHash => mapping(
55
- VersionPart majorVersion => address service)) internal _service;
56
-
57
48
  NftId internal _registryNftId;
58
- NftId internal _serviceNftId; // set in stone upon registry creation
59
49
  ChainNft internal _chainNft;
60
50
 
51
+ ReleaseManager internal _releaseManager;
61
52
 
62
- modifier onlyOwner() {
63
- if(msg.sender != getOwner()) {
64
- revert NotOwner(msg.sender);
53
+ modifier onlyRegistryService() {
54
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
55
+ revert CallerNotRegistryService();
65
56
  }
66
57
  _;
67
58
  }
68
59
 
69
- modifier onlyRegistryService() {
70
-
71
- if(msg.sender != _info[_serviceNftId].objectAddress) {
72
- revert NotRegistryService();
60
+ modifier onlyReleaseManager() {
61
+ if(msg.sender != address(_releaseManager)) {
62
+ revert CallerNotReleaseManager();
73
63
  }
74
64
  _;
75
65
  }
76
66
 
77
- constructor(address registryOwner, VersionPart majorVersion)
67
+ constructor(address releaseManager, VersionPart initialVersion)
78
68
  {
79
- require(registryOwner > address(0), "Registry: registry owner is 0");
69
+ require(releaseManager > address(0), "Registry: release manager is 0");
70
+ require(initialVersion.toInt() > 0, "Registry: initial version is 0");
80
71
 
81
- // major version at constructor time
82
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
83
- emit LogInitialMajorVersionSet(_majorVersion);
72
+ _releaseManager = ReleaseManager(releaseManager);
84
73
 
85
74
  // deploy NFT
86
75
  _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
87
76
 
88
77
  // initial registry setup
89
78
  _registerProtocol();
90
- _registerRegistry(registryOwner);
91
- _registerRegistryService(registryOwner);
79
+ _registerRegistry();
92
80
 
93
81
  // set object parent relations
94
82
  _setupValidObjectParentCombinations();
@@ -96,126 +84,36 @@ contract Registry is
96
84
  _registerInterface(type(IRegistry).interfaceId);
97
85
  }
98
86
 
99
- // from IRegistry
100
-
101
- /// @dev latest GIF release version
102
- function setMajorVersion(VersionPart newMajorVersion)
87
+ function registerService(ObjectInfo memory info)
103
88
  external
104
- onlyOwner
89
+ onlyReleaseManager
90
+ returns(NftId nftId)
105
91
  {
106
- // ensure major version increments is one
107
- uint256 oldMax = _majorVersion.toInt();
108
- uint256 newMax = newMajorVersion.toInt();
109
- if (newMax <= oldMax || newMax - oldMax != 1) {
110
- revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
92
+ /* must be guaranteed by release manager
93
+ if(info.objectType != SERVICE()) {
94
+ revert();
111
95
  }
112
-
113
- _majorVersion = newMajorVersion;
114
- emit LogMajorVersionSet(_majorVersion);
96
+ info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
97
+ */
98
+ nftId = _register(info);
115
99
  }
116
100
 
117
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
118
- // TODO service registration means its approval for some type?
119
- // TODO registration of precompile addresses
120
101
  function register(ObjectInfo memory info)
121
102
  external
122
103
  onlyRegistryService
123
104
  returns(NftId nftId)
124
105
  {
125
- ObjectType objectType = info.objectType;
126
- NftId parentNftId = info.parentNftId;
127
- ObjectInfo memory parentInfo = _info[parentNftId];
128
- ObjectType parentType = parentInfo.objectType; // see function header
129
- address parentAddress = parentInfo.objectAddress;
130
-
131
- // parent is contract -> need to check? -> check before minting
132
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
133
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
134
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
135
- if(parentAddress == address(0)) {
136
- revert ZeroParentAddress();
106
+ // no service registrations
107
+ if(info.objectType == SERVICE()) {
108
+ revert ServiceRegistration();
137
109
  }
138
110
 
139
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
140
-
141
- // TODO does external call
142
- uint256 mintedTokenId = _chainNft.mint(
143
- info.initialOwner,
144
- interceptor,
145
- EMPTY_URI);
146
- nftId = toNftId(mintedTokenId);
147
-
148
- // TODO move nftId out of info struct
149
- // getters by nftId -> return struct without nftId
150
- // getters by address -> return nftId AND struct
151
- info.nftId = nftId;
152
- _info[nftId] = info;
153
-
154
- if(info.objectAddress > address(0))
155
- {
156
- // TODO if need to add types latter -> at least call this check from registry service
157
- // parent is registered + object-parent types are valid
158
- if(_isValidContractCombination[objectType][parentType] == false) {
159
- revert InvalidTypesCombination(objectType, parentType);
160
- }
161
-
162
- address contractAddress = info.objectAddress;
163
-
164
- if(_nftIdByAddress[contractAddress].gtz()) {
165
- revert ContractAlreadyRegistered(contractAddress);
166
- }
167
-
168
- _nftIdByAddress[contractAddress] = nftId;
169
-
170
- // special case
171
- if(objectType == SERVICE()) {
172
- _registerService(info);
173
- }
174
- }
175
- else
176
- {
177
- if(_isValidObjectCombination[objectType][parentType] == false) {
178
- revert InvalidTypesCombination(objectType, parentType);
179
- }
180
- }
181
-
182
- emit LogRegistration(info);
183
- }
184
-
185
- /// @dev token state is informative, registry have no clue about used tokens
186
- // component owner is responsible for token selection and operations
187
- // service MUST deny registration of component with inactive token
188
- function setTokenActive(address token, VersionPart majorVersion, bool active)
189
- external
190
- onlyOwner
191
- {
192
- // verify that token is registered
193
- ObjectInfo memory info = _info[_nftIdByAddress[token]];
194
- if (info.nftId.eqz()) {
195
- revert TokenNotRegistered(token);
196
- }
197
-
198
- // verify provided address is a registered token
199
- if (info.objectType != TOKEN()) {
200
- revert NotToken(token);
201
- }
202
-
203
- // verify valid major version
204
- // ensure major version increments is one
205
- uint256 version = majorVersion.toInt();
206
- uint256 versionNow = _majorVersion.toInt();
207
- if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
208
- revert TokenMajorVersionInvalid(majorVersion);
209
- }
210
-
211
- _tokenIsActive[token][majorVersion] = active;
212
-
213
- emit LogTokenStateSet(token, majorVersion, active);
111
+ nftId = _register(info);
214
112
  }
215
113
 
216
114
  /// @dev earliest GIF major version
217
115
  function getMajorVersionMin() external view returns (VersionPart) {
218
- return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
116
+ return _releaseManager.getInitialVersion();
219
117
  }
220
118
 
221
119
  // TODO make distinction between active an not yet active version
@@ -226,14 +124,13 @@ contract Registry is
226
124
  // in the process of being set up while the latest active version is 1 major release smaller
227
125
  /// @dev latest GIF major version (might not yet be active)
228
126
  function getMajorVersionMax() external view returns (VersionPart) {
229
- return _majorVersion;
127
+ return _releaseManager.getNextVersion();
230
128
  }
231
129
 
232
130
  /// @dev latest active GIF release version
233
131
  function getMajorVersion() external view returns (VersionPart) {
234
- return _majorVersion;
132
+ return _releaseManager.getLatestVersion();
235
133
  }
236
-
237
134
 
238
135
  function getObjectCount() external view override returns (uint256) {
239
136
  return _chainNft.totalSupply();
@@ -252,7 +149,6 @@ contract Registry is
252
149
  }
253
150
 
254
151
  function ownerOf(address contractAddress) public view returns (address) {
255
-
256
152
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
257
153
  }
258
154
 
@@ -261,7 +157,6 @@ contract Registry is
261
157
  }
262
158
 
263
159
  function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
264
-
265
160
  return _info[_nftIdByAddress[object]];
266
161
  }
267
162
 
@@ -273,22 +168,16 @@ contract Registry is
273
168
  return _nftIdByAddress[object].gtz();
274
169
  }
275
170
 
276
- function isTokenActive(address token, VersionPart majorVersion) external view returns (bool) {
277
- return _tokenIsActive[token][majorVersion];
278
- }
279
-
280
- function getServiceName(NftId nftId) external view returns (string memory) {
281
- return _string[nftId];
171
+ function isRegisteredService(address object) external view override returns (bool) {
172
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
282
173
  }
283
174
 
284
- // special case to retrive a gif service
285
175
  function getServiceAddress(
286
- string memory serviceName,
287
- VersionPart majorVersion
176
+ ObjectType serviceType,
177
+ VersionPart releaseVersion
288
178
  ) external view returns (address)
289
179
  {
290
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
291
- return _service[serviceNameHash][majorVersion];
180
+ return _releaseManager.getService(releaseVersion, serviceType);
292
181
  }
293
182
 
294
183
  function getChainNft() external view override returns (ChainNft) {
@@ -301,28 +190,65 @@ contract Registry is
301
190
 
302
191
  // Internals
303
192
 
304
- function _registerService(ObjectInfo memory info)
193
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
194
+ // TODO registration of precompile addresses
195
+ function _register(ObjectInfo memory info)
305
196
  internal
197
+ returns(NftId nftId)
306
198
  {
307
- (
308
- string memory serviceName,
309
- VersionPart majorVersion
310
- ) = abi.decode(info.data, (string, VersionPart));
311
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
312
-
313
- // ensures consistency of service.getVersion() and majorVersion here
314
- if(majorVersion != _majorVersion) {
315
- revert InvalidServiceVersion(majorVersion);
316
- }
317
-
318
- if(_service[serviceNameHash][majorVersion] != address(0)) {
319
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
199
+ ObjectType objectType = info.objectType;
200
+ NftId parentNftId = info.parentNftId;
201
+ ObjectInfo memory parentInfo = _info[parentNftId];
202
+ ObjectType parentType = parentInfo.objectType; // see function header
203
+ address parentAddress = parentInfo.objectAddress;
204
+
205
+ // parent is contract -> need to check? -> check before minting
206
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
207
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
208
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
209
+ if(parentAddress == address(0)) {
210
+ revert ZeroParentAddress();
320
211
  }
321
212
 
322
- _string[info.nftId] = serviceName;
323
- _service[serviceNameHash][majorVersion] = info.objectAddress;
213
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
214
+
215
+ // TODO does external call
216
+ // compute next nftId, do all checks and stores, mint() at most end...
217
+ uint256 mintedTokenId = _chainNft.mint(
218
+ info.initialOwner,
219
+ interceptor,
220
+ EMPTY_URI);
221
+ nftId = toNftId(mintedTokenId);
222
+
223
+ // TODO move nftId out of info struct
224
+ // getters by nftId -> return struct without nftId
225
+ // getters by address -> return nftId AND struct
226
+ info.nftId = nftId;
227
+ _info[nftId] = info;
228
+
229
+ if(info.objectAddress > address(0))
230
+ {
231
+ // parent is registered + object-parent types are valid
232
+ if(_isValidContractCombination[objectType][parentType] == false) {
233
+ revert InvalidTypesCombination(objectType, parentType);
234
+ }
235
+
236
+ address contractAddress = info.objectAddress;
237
+
238
+ if(_nftIdByAddress[contractAddress].gtz()) {
239
+ revert ContractAlreadyRegistered(contractAddress);
240
+ }
241
+
242
+ _nftIdByAddress[contractAddress] = nftId;
243
+ }
244
+ else
245
+ {
246
+ if(_isValidObjectCombination[objectType][parentType] == false) {
247
+ revert InvalidTypesCombination(objectType, parentType);
248
+ }
249
+ }
324
250
 
325
- emit LogServiceNameRegistration(serviceName, majorVersion);
251
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
326
252
  }
327
253
 
328
254
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -355,32 +281,31 @@ contract Registry is
355
281
 
356
282
  /// @dev protocol registration used to anchor the dip ecosystem relations
357
283
  function _registerProtocol()
358
- internal
284
+ private
359
285
  {
360
286
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
361
287
  NftId protocolNftId = toNftId(protocolId);
362
288
 
363
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
289
+ _info[protocolNftId] = ObjectInfo({
290
+ nftId: protocolNftId,
291
+ parentNftId: zeroNftId(),
292
+ objectType: PROTOCOL(),
293
+ isInterceptor: false,
294
+ objectAddress: address(0),
295
+ initialOwner: NFT_LOCK_ADDRESS,
296
+ data: ""
297
+ });
364
298
 
365
- _info[protocolNftId] = ObjectInfo(
366
- protocolNftId,
367
- zeroNftId(), // parent
368
- PROTOCOL(),
369
- false, // isInterceptor
370
- address(0), // objectAddress
371
- NFT_LOCK_ADDRESS,// initialOwner
372
- ""
373
- );
299
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
374
300
  }
375
301
 
376
302
  /// @dev registry registration
377
303
  /// might also register the global registry when not on mainnet
378
- function _registerRegistry(address registryOwner)
379
- internal
304
+ function _registerRegistry()
305
+ private
380
306
  {
381
- uint256 registryId = _chainNft.calculateTokenId(2);
307
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
382
308
  NftId registryNftId = toNftId(registryId);
383
-
384
309
  NftId parentNftId;
385
310
 
386
311
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
@@ -393,68 +318,39 @@ contract Registry is
393
318
  parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
394
319
  }
395
320
 
396
- _chainNft.mint(registryOwner, registryId);
397
-
398
- _info[registryNftId] = ObjectInfo(
399
- registryNftId,
400
- parentNftId,
401
- REGISTRY(),
402
- false, // isInterceptor
403
- address(this),
404
- registryOwner,
405
- ""
406
- );
321
+ _info[registryNftId] = ObjectInfo({
322
+ nftId: registryNftId,
323
+ parentNftId: parentNftId,
324
+ objectType: REGISTRY(),
325
+ isInterceptor: false,
326
+ objectAddress: address(this),
327
+ initialOwner: NFT_LOCK_ADDRESS,
328
+ data: ""
329
+ });
407
330
  _nftIdByAddress[address(this)] = registryNftId;
408
331
  _registryNftId = registryNftId;
409
- }
410
332
 
333
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
334
+ }
411
335
 
412
336
  /// @dev global registry registration for non mainnet registries
413
337
  function _registerGlobalRegistry()
414
- internal
338
+ private
415
339
  {
416
340
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
417
-
418
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
419
-
420
341
  NftId globalRegistryNftId = toNftId(globalRegistryId);
421
342
 
422
- _info[globalRegistryNftId] = ObjectInfo(
423
- globalRegistryNftId,
424
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
425
- REGISTRY(),
426
- false, // isInterceptor
427
- address(0), // objectAddress
428
- NFT_LOCK_ADDRESS, // initialOwner
429
- "" // data
430
- );
431
- }
343
+ _info[globalRegistryNftId] = ObjectInfo({
344
+ nftId: globalRegistryNftId,
345
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
346
+ objectType: REGISTRY(),
347
+ isInterceptor: false,
348
+ objectAddress: address(0),
349
+ initialOwner: NFT_LOCK_ADDRESS,
350
+ data: ""
351
+ });
432
352
 
433
- function _registerRegistryService(address registryOwner)
434
- internal
435
- {
436
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
437
- NftId serviceNftId = toNftId(serviceId);
438
-
439
- _chainNft.mint(registryOwner, serviceId);
440
-
441
- _info[serviceNftId] = ObjectInfo(
442
- serviceNftId,
443
- _registryNftId,
444
- SERVICE(),
445
- false, // isInterceptor
446
- msg.sender, // service deploys registry
447
- registryOwner, // initialOwner,
448
- ""
449
- );
450
-
451
- _nftIdByAddress[msg.sender] = serviceNftId;
452
-
453
- string memory serviceName = "RegistryService";
454
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
455
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
456
- _string[serviceNftId] = serviceName;
457
- _serviceNftId = serviceNftId;
353
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
458
354
  }
459
355
 
460
356
  /// @dev defines which object - parent types relations are allowed to register
@@ -464,7 +360,7 @@ contract Registry is
464
360
  // 3) DO NOT use REGISTRY as object type
465
361
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
466
362
  function _setupValidObjectParentCombinations()
467
- internal
363
+ private
468
364
  {
469
365
  // registry as parent, ONLY registry owner
470
366
  _isValidContractCombination[TOKEN()][REGISTRY()] = true;
@@ -486,4 +382,4 @@ contract Registry is
486
382
  _isValidObjectCombination[BUNDLE()][POOL()] = true;
487
383
  _isValidObjectCombination[STAKE()][POOL()] = true;
488
384
  }
489
- }
385
+ }