@etherisc/gif-next 0.0.2-a6f9f86-582 → 0.0.2-a6faeb6-912

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 (272) hide show
  1. package/README.md +171 -2
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/BaseComponent.sol/BaseComponent.json} +241 -245
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +127 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +275 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +939 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  17. package/artifacts/contracts/components/Product.sol/Product.json +855 -0
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1698 -0
  53. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +553 -530
  59. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -34
  61. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +937 -31
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +532 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +0 -77
  77. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +10 -244
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  91. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  93. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  95. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +728 -0
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +760 -0
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1049 -0
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1147 -0
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +197 -116
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +217 -15
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +167 -172
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +324 -44
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +77 -36
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  126. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  129. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  132. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -6
  140. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  143. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -6
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +111 -5
  155. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestService.sol/TestService.json +17 -17
  157. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  164. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  165. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  171. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  175. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  181. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  183. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  186. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  188. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  190. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  192. package/contracts/components/BaseComponent.sol +132 -0
  193. package/contracts/components/Distribution.sol +163 -0
  194. package/contracts/components/IBaseComponent.sol +14 -2
  195. package/contracts/components/IDistributionComponent.sol +44 -0
  196. package/contracts/components/IPoolComponent.sol +66 -0
  197. package/contracts/components/IProductComponent.sol +35 -0
  198. package/contracts/components/Pool.sol +267 -0
  199. package/contracts/components/Product.sol +289 -0
  200. package/contracts/experiment/cloning/Cloner.sol +47 -0
  201. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  202. package/contracts/instance/BundleManager.sol +129 -0
  203. package/contracts/instance/Cloneable.sol +46 -0
  204. package/contracts/instance/IAccessManagerSimple.sol +1 -1
  205. package/contracts/instance/IInstance.sol +56 -0
  206. package/contracts/instance/IInstanceBase.sol +26 -0
  207. package/contracts/instance/IInstanceService.sol +34 -0
  208. package/contracts/instance/Instance.sol +84 -20
  209. package/contracts/instance/InstanceAccessManager.sol +8 -8
  210. package/contracts/instance/InstanceBase.sol +41 -0
  211. package/contracts/instance/InstanceReader.sol +315 -0
  212. package/contracts/instance/InstanceService.sol +230 -22
  213. package/contracts/instance/InstanceServiceManager.sol +57 -0
  214. package/contracts/instance/ObjectManager.sol +101 -0
  215. package/contracts/instance/base/ComponentServiceBase.sol +134 -0
  216. package/contracts/instance/base/IInstanceBase.sol +23 -0
  217. package/contracts/instance/base/IKeyValueStore.sol +5 -4
  218. package/contracts/instance/base/KeyValueStore.sol +4 -20
  219. package/contracts/instance/module/IAccess.sol +2 -2
  220. package/contracts/instance/module/IBundle.sol +1 -0
  221. package/contracts/instance/module/ISetup.sol +6 -1
  222. package/contracts/instance/module/ITreasury.sol +1 -1
  223. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  224. package/contracts/instance/service/DistributionService.sol +88 -0
  225. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  226. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  227. package/contracts/instance/service/IDistributionService.sol +12 -0
  228. package/contracts/instance/service/IPoolService.sol +51 -0
  229. package/contracts/instance/service/IProductService.sol +110 -0
  230. package/contracts/instance/service/PoolService.sol +287 -0
  231. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  232. package/contracts/instance/service/ProductService.sol +570 -0
  233. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  234. package/contracts/registry/ChainNft.sol +40 -25
  235. package/contracts/registry/IRegistry.sol +30 -22
  236. package/contracts/registry/IRegistryService.sol +36 -15
  237. package/contracts/registry/Registry.sol +133 -176
  238. package/contracts/registry/RegistryService.sol +159 -170
  239. package/contracts/registry/RegistryServiceManager.sol +39 -2
  240. package/contracts/registry/TokenRegistry.sol +111 -0
  241. package/contracts/shared/ERC165.sol +7 -3
  242. package/contracts/shared/IRegisterable.sol +1 -1
  243. package/contracts/{instance/base → shared}/IService.sol +3 -3
  244. package/contracts/shared/NftOwnable.sol +2 -4
  245. package/contracts/shared/ProxyManager.sol +3 -3
  246. package/contracts/shared/Registerable.sol +3 -2
  247. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  248. package/contracts/shared/Service.sol +55 -0
  249. package/contracts/shared/TokenHandler.sol +2 -2
  250. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  251. package/contracts/shared/Versionable.sol +1 -1
  252. package/contracts/test/TestFee.sol +2 -2
  253. package/contracts/test/TestRoleId.sol +6 -6
  254. package/contracts/test/TestService.sol +3 -5
  255. package/contracts/types/Fee.sol +3 -3
  256. package/contracts/types/NftIdSet.sol +26 -24
  257. package/contracts/types/RoleId.sol +19 -4
  258. package/contracts/types/StateId.sol +4 -0
  259. package/contracts/types/UFixed.sol +128 -12
  260. package/contracts/types/Version.sol +4 -1
  261. package/package.json +4 -3
  262. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  263. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  264. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  265. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  266. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  267. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  268. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  269. package/contracts/instance/AccessManagedSimple.sol +0 -114
  270. package/contracts/instance/AccessManagerSimple.sol +0 -682
  271. package/contracts/instance/base/ServiceBase.sol +0 -44
  272. package/contracts/registry/IChainNft.sol +0 -22
@@ -2,13 +2,12 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/base/IService.sol";
5
+ import {IService} from "../shared/IService.sol";
6
6
 
7
- import {IChainNft} from "./IChainNft.sol";
8
7
  import {ChainNft} from "./ChainNft.sol";
9
8
  import {IRegistry} from "./IRegistry.sol";
10
9
  import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
10
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
12
11
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
12
  import {ITransferInterceptor} from "./ITransferInterceptor.sol";
14
13
 
@@ -29,63 +28,40 @@ contract Registry is
29
28
  ERC165,
30
29
  IRegistry
31
30
  {
32
- // register
33
- error NotRegistryService();
34
- error ZeroParentAddress();
35
- error ContractAlreadyRegistered(address objectAddress);
36
- error InvalidServiceVersion(VersionPart majorVersion);
37
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
38
-
39
- // approve
40
- error NotOwner();
41
- error NotRegisteredContract(NftId registrarNftId);
42
- error NotService(NftId registrarNftId);
43
- error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
44
-
45
- uint256 public constant MAJOR_VERSION_MIN = 3;
31
+ uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
46
32
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
47
34
  uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
48
35
  string public constant EMPTY_URI = "";
49
36
 
50
- mapping(NftId nftId => ObjectInfo info) _info;
51
- mapping(address object => NftId nftId) _nftIdByAddress;
37
+ VersionPart internal _majorVersion;
52
38
 
53
- mapping(NftId registrator => mapping(
54
- ObjectType objectType => bool)) _isApproved;
39
+ mapping(NftId nftId => ObjectInfo info) internal _info;
40
+ mapping(address object => NftId nftId) internal _nftIdByAddress;
55
41
 
56
42
  mapping(ObjectType objectType => mapping(
57
- ObjectType parentType => bool)) _isValidContractCombination;
43
+ ObjectType parentType => bool)) internal _isValidContractCombination;
58
44
 
59
45
  mapping(ObjectType objectType => mapping(
60
- ObjectType parentType => bool)) _isValidObjectCombination;
46
+ ObjectType parentType => bool)) internal _isValidObjectCombination;
61
47
 
62
- mapping(NftId nftId => string name) _string;
48
+ mapping(NftId nftId => string name) internal _string;
63
49
  mapping(bytes32 serviceNameHash => mapping(
64
- VersionPart majorVersion => address service)) _service;
65
-
66
- NftId _registryNftId;
67
- NftId _serviceNftId; // set in stone upon registry creation
68
- IChainNft _chainNft;
69
- ChainNft _chainNftInternal;
70
-
71
- /*
72
- modifier onlyInitialOwner() {
73
- if(
74
- msg.sender != getOwner() ||
75
- msg.sender != _info[_registryNftId].initialOwner) {
76
- revert NotInitialOwner();
77
- }
78
- }*/
50
+ VersionPart majorVersion => address service)) internal _service;
51
+
52
+ NftId internal _registryNftId;
53
+ NftId internal _serviceNftId; // set in stone upon registry creation
54
+ ChainNft internal _chainNft;
55
+
79
56
 
80
57
  modifier onlyOwner() {
81
58
  if(msg.sender != getOwner()) {
82
- revert NotOwner();
59
+ revert NotOwner(msg.sender);
83
60
  }
84
61
  _;
85
62
  }
86
63
 
87
64
  modifier onlyRegistryService() {
88
-
89
65
  if(msg.sender != _info[_serviceNftId].objectAddress) {
90
66
  revert NotRegistryService();
91
67
  }
@@ -95,11 +71,13 @@ contract Registry is
95
71
  constructor(address registryOwner, VersionPart majorVersion)
96
72
  {
97
73
  require(registryOwner > address(0), "Registry: registry owner is 0");
98
- require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
74
+
75
+ // major version at constructor time
76
+ _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
+ emit LogInitialMajorVersionSet(_majorVersion);
99
78
 
100
79
  // deploy NFT
101
- _chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
102
- _chainNft = IChainNft(_chainNftInternal);
80
+ _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
103
81
 
104
82
  // initial registry setup
105
83
  _registerProtocol();
@@ -112,9 +90,25 @@ contract Registry is
112
90
  _registerInterface(type(IRegistry).interfaceId);
113
91
  }
114
92
 
93
+ // from IRegistry
94
+
95
+ /// @dev latest GIF release version
96
+ function setMajorVersion(VersionPart newMajorVersion)
97
+ external
98
+ onlyOwner
99
+ {
100
+ // ensure major version increments is one
101
+ uint256 oldMax = _majorVersion.toInt();
102
+ uint256 newMax = newMajorVersion.toInt();
103
+ if (newMax <= oldMax || newMax - oldMax != 1) {
104
+ revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
105
+ }
106
+
107
+ _majorVersion = newMajorVersion;
108
+ emit LogMajorVersionSet(_majorVersion);
109
+ }
110
+
115
111
  /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
116
- // IMPORTANT: rare case when parentNftId is not registered and == next nftId -> technincally this is ZeroParentAddress error
117
- // to catch this check parent address before minting !!!!
118
112
  // TODO service registration means its approval for some type?
119
113
  // TODO registration of precompile addresses
120
114
  function register(ObjectInfo memory info)
@@ -139,8 +133,6 @@ contract Registry is
139
133
  address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
140
134
 
141
135
  // TODO does external call
142
- // check for receiver in registry service?
143
- // use unsafe transfer?
144
136
  uint256 mintedTokenId = _chainNft.mint(
145
137
  info.initialOwner,
146
138
  interceptor,
@@ -170,33 +162,8 @@ contract Registry is
170
162
  _nftIdByAddress[contractAddress] = nftId;
171
163
 
172
164
  // special case
173
- if(objectType == SERVICE())
174
- {
175
- (
176
- string memory serviceName,
177
- VersionPart majorVersion
178
- ) = abi.decode(info.data, (string, VersionPart));
179
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
180
-
181
- // TODO MUST guarantee consistency of service.getVersion() and majorVersion here
182
- // TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup
183
- // TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
184
- if(
185
- majorVersion.toInt() < MAJOR_VERSION_MIN ||
186
- (majorVersion.toInt() > MAJOR_VERSION_MIN &&
187
- _service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
188
- ) {
189
- revert InvalidServiceVersion(majorVersion);
190
- }
191
-
192
- if(_service[serviceNameHash][majorVersion] != address(0)) {
193
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
194
- }
195
-
196
- _string[nftId] = serviceName;
197
- _service[serviceNameHash][majorVersion] = contractAddress;
198
-
199
- emit LogServiceNameRegistration(serviceName, majorVersion);
165
+ if(objectType == SERVICE()) {
166
+ _registerService(info);
200
167
  }
201
168
  }
202
169
  else
@@ -206,75 +173,37 @@ contract Registry is
206
173
  }
207
174
  }
208
175
 
209
- emit LogRegistration(nftId, info.parentNftId, info.objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
176
+ emit LogRegistration(info);
210
177
  }
211
-
212
- function registerFrom(
213
- address from,
214
- ObjectInfo memory info
215
- ) external returns (NftId nftId)
216
- {
217
- revert();
178
+ /// @dev earliest GIF major version
179
+ function getMajorVersionMin() external view returns (VersionPart) {
180
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
218
181
  }
219
-
220
-
221
- /// @dev
222
- // msg.sender - registry owner
223
- // CAN approve only registered service contract
224
- // CAN approve any combination specified in _isValidCombination
225
- // CAN NOT approve itself
226
- // TODO in case where exists exactly one registered service per objectType (and major version):
227
- // - registration and approve is a single operation, no need for separate approve() function
228
- // - then approve can be used to adding new valid object-parent combinations???
229
- function approve(
230
- NftId serviceNftId,
231
- ObjectType objectType,
232
- ObjectType parentType
233
- )
234
- public
235
- onlyOwner()
236
- {
237
- address serviceAddress = _info[serviceNftId].objectAddress;
238
-
239
- if(_nftIdByAddress[serviceAddress].eqz()) {
240
- revert NotRegisteredContract(serviceNftId);
241
- }
242
-
243
- if(_info[serviceNftId].objectType != SERVICE()) {
244
- revert NotService(serviceNftId);
245
- }
246
-
247
- if(
248
- _isValidContractCombination[objectType][parentType] == false &&
249
- _isValidObjectCombination[objectType][parentType] == false) {
250
- revert InvalidTypesCombination(objectType, parentType);
251
- }
252
182
 
253
- _isApproved[serviceNftId][objectType] = true;
254
-
255
- emit LogApproval(serviceNftId, objectType);
183
+ // TODO make distinction between active an not yet active version
184
+ // need to be thought trough, not yet clear if necessary
185
+ // need to answer question: what is the latest version during the upgrade process?
186
+ // likely setting up a new gif version does not fit into a single tx
187
+ // in this case we might want to have a period where the latest version is
188
+ // in the process of being set up while the latest active version is 1 major release smaller
189
+ /// @dev latest GIF major version (might not yet be active)
190
+ function getMajorVersionMax() external view returns (VersionPart) {
191
+ return _majorVersion;
256
192
  }
257
193
 
258
- /// @dev returns false for registry owner nft
259
- // TODO allowance by address?
260
- // TODO checked by registry service -> but registry owner can upgrade registry service not to check allowance....
261
- function allowance(
262
- NftId nftId,
263
- ObjectType object
264
- )
265
- public
266
- view
267
- returns (bool)
268
- {
269
- return _isApproved[nftId][object];
194
+ /// @dev latest active GIF release version
195
+ function getMajorVersion() external view returns (VersionPart) {
196
+ return _majorVersion;
270
197
  }
271
198
 
272
- // from IRegistry
273
199
  function getObjectCount() external view override returns (uint256) {
274
-
275
200
  return _chainNft.totalSupply();
276
201
  }
277
202
 
203
+ function getNftId() external view returns (NftId nftId) {
204
+ return _registryNftId;
205
+ }
206
+
278
207
  function getNftId(address object) external view override returns (NftId id) {
279
208
  return _nftIdByAddress[object];
280
209
  }
@@ -284,7 +213,6 @@ contract Registry is
284
213
  }
285
214
 
286
215
  function ownerOf(address contractAddress) public view returns (address) {
287
-
288
216
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
289
217
  }
290
218
 
@@ -293,7 +221,6 @@ contract Registry is
293
221
  }
294
222
 
295
223
  function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
296
-
297
224
  return _info[_nftIdByAddress[object]];
298
225
  }
299
226
 
@@ -305,6 +232,10 @@ contract Registry is
305
232
  return _nftIdByAddress[object].gtz();
306
233
  }
307
234
 
235
+ function isRegisteredService(address object) external view override returns (bool) {
236
+ return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
237
+ }
238
+
308
239
  function getServiceName(NftId nftId) external view returns (string memory) {
309
240
  return _string[nftId];
310
241
  }
@@ -319,7 +250,7 @@ contract Registry is
319
250
  return _service[serviceNameHash][majorVersion];
320
251
  }
321
252
 
322
- function getChainNft() external view override returns (IChainNft) {
253
+ function getChainNft() external view override returns (ChainNft) {
323
254
  return _chainNft;
324
255
  }
325
256
 
@@ -327,16 +258,68 @@ contract Registry is
327
258
  return ownerOf(address(this));
328
259
  }
329
260
 
330
- // Internals, called only in constructor
261
+ // Internals
262
+
263
+ function _registerService(ObjectInfo memory info)
264
+ internal
265
+ {
266
+ (
267
+ string memory serviceName,
268
+ VersionPart majorVersion
269
+ ) = abi.decode(info.data, (string, VersionPart));
270
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
271
+
272
+ // ensures consistency of service.getVersion() and majorVersion here
273
+ if(majorVersion != _majorVersion) {
274
+ revert InvalidServiceVersion(majorVersion);
275
+ }
276
+
277
+ if(_service[serviceNameHash][majorVersion] != address(0)) {
278
+ revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
279
+ }
280
+
281
+ _string[info.nftId] = serviceName;
282
+ _service[serviceNameHash][majorVersion] = info.objectAddress;
283
+
284
+ emit LogServiceNameRegistration(serviceName, majorVersion);
285
+ }
286
+
287
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
288
+ function _getInterceptor(
289
+ bool isInterceptor,
290
+ address objectAddress,
291
+ bool parentIsInterceptor,
292
+ address parentObjectAddress
293
+ )
294
+ internal
295
+ view
296
+ returns (address interceptor)
297
+ {
298
+ if (objectAddress == address(0)) {
299
+ if (parentIsInterceptor) {
300
+ return parentObjectAddress;
301
+ } else {
302
+ return address(0);
303
+ }
304
+ }
305
+
306
+ if (isInterceptor) {
307
+ return objectAddress;
308
+ }
309
+
310
+ return address(0);
311
+ }
312
+
313
+ // Internals called only in constructor
331
314
 
332
315
  /// @dev protocol registration used to anchor the dip ecosystem relations
333
316
  function _registerProtocol()
334
317
  internal
335
318
  {
336
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
319
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
337
320
  NftId protocolNftId = toNftId(protocolId);
338
321
 
339
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, protocolId);
322
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
340
323
 
341
324
  _info[protocolNftId] = ObjectInfo(
342
325
  protocolNftId,
@@ -354,22 +337,22 @@ contract Registry is
354
337
  function _registerRegistry(address registryOwner)
355
338
  internal
356
339
  {
357
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
340
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
358
341
  NftId registryNftId = toNftId(registryId);
359
342
 
360
343
  NftId parentNftId;
361
344
 
362
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID())
345
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
363
346
  {// we're not the global registry
364
347
  _registerGlobalRegistry();
365
- parentNftId = toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
348
+ parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
366
349
  }
367
350
  else
368
351
  {// we are global registry
369
- parentNftId = toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
352
+ parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
370
353
  }
371
354
 
372
- _chainNftInternal.mint(registryOwner, registryId);
355
+ _chainNft.mint(registryOwner, registryId);
373
356
 
374
357
  _info[registryNftId] = ObjectInfo(
375
358
  registryNftId,
@@ -389,15 +372,15 @@ contract Registry is
389
372
  function _registerGlobalRegistry()
390
373
  internal
391
374
  {
392
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
375
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
393
376
 
394
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, globalRegistryId);
377
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
395
378
 
396
379
  NftId globalRegistryNftId = toNftId(globalRegistryId);
397
380
 
398
381
  _info[globalRegistryNftId] = ObjectInfo(
399
382
  globalRegistryNftId,
400
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()), // parent
383
+ toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
401
384
  REGISTRY(),
402
385
  false, // isInterceptor
403
386
  address(0), // objectAddress
@@ -409,10 +392,10 @@ contract Registry is
409
392
  function _registerRegistryService(address registryOwner)
410
393
  internal
411
394
  {
412
- uint256 serviceId = _chainNftInternal.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
395
+ uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
413
396
  NftId serviceNftId = toNftId(serviceId);
414
397
 
415
- _chainNftInternal.mint(registryOwner, serviceId);
398
+ _chainNft.mint(registryOwner, serviceId);
416
399
 
417
400
  _info[serviceNftId] = ObjectInfo(
418
401
  serviceNftId,
@@ -428,37 +411,11 @@ contract Registry is
428
411
 
429
412
  string memory serviceName = "RegistryService";
430
413
  bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
431
- _service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
414
+ _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
432
415
  _string[serviceNftId] = serviceName;
433
416
  _serviceNftId = serviceNftId;
434
417
  }
435
418
 
436
- /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
437
- function _getInterceptor(
438
- bool isInterceptor,
439
- address objectAddress,
440
- bool parentIsInterceptor,
441
- address parentObjectAddress
442
- )
443
- internal
444
- view
445
- returns (address interceptor)
446
- {
447
- if (objectAddress == address(0)) {
448
- if (parentIsInterceptor) {
449
- return parentObjectAddress;
450
- } else {
451
- return address(0);
452
- }
453
- }
454
-
455
- if (isInterceptor) {
456
- return objectAddress;
457
- }
458
-
459
- return address(0);
460
- }
461
-
462
419
  /// @dev defines which object - parent types relations are allowed to register
463
420
  // IMPORTANT:
464
421
  // 1) EACH object type MUST have only one parent type across ALL mappings