@etherisc/gif-next 0.0.2-9b97b55 → 0.0.2-9d3eab3-323

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 (430) hide show
  1. package/README.md +364 -8
  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 -240
  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 +4 -0
  7. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/IBaseComponent.sol/IBaseComponent.json} +195 -154
  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 +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +761 -35
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +666 -42
  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/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  42. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  44. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  46. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  48. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  50. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  51. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  52. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  54. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  56. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  57. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  58. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  60. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1292 -460
  62. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  64. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  66. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  67. package/artifacts/contracts/instance/Instance.sol/Instance.json +3071 -569
  68. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  70. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  72. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  74. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1066 -0
  76. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +560 -0
  78. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  79. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  80. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +521 -0
  82. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  84. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  86. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  88. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  90. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  91. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  92. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  94. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  96. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  98. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  100. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  102. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  104. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  106. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  108. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  110. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +814 -0
  112. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +671 -0
  114. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  116. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  124. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  126. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  128. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +971 -0
  130. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  132. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +705 -0
  134. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +755 -0
  138. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  139. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  140. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  143. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +360 -66
  144. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  145. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
  146. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  147. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  148. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  149. package/artifacts/contracts/registry/Registry.sol/Registry.json +458 -77
  150. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  151. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +275 -0
  152. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  153. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  154. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  155. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  156. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  157. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  158. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  159. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  160. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  161. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  162. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  163. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  164. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  166. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  167. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  168. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  169. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  170. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  172. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  173. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  174. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  175. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  176. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  177. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  178. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  179. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  180. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  181. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  182. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  183. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  184. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  185. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  186. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  187. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  188. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  189. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  190. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  191. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  192. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  193. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  194. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  195. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  196. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  197. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  198. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  199. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  200. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  201. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  202. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  203. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  204. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  205. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  206. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  208. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  210. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  212. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  214. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  216. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  218. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  219. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  220. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  222. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  224. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  226. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  228. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  229. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  230. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  231. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  232. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  233. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  234. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  235. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  236. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  237. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  238. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  239. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  240. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  241. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  242. package/contracts/components/BaseComponent.sol +132 -0
  243. package/contracts/components/Distribution.sol +163 -0
  244. package/contracts/components/IBaseComponent.sol +31 -0
  245. package/contracts/components/IDistributionComponent.sol +44 -0
  246. package/contracts/components/IPoolComponent.sol +66 -0
  247. package/contracts/components/IProductComponent.sol +35 -0
  248. package/contracts/components/Pool.sol +260 -18
  249. package/contracts/components/Product.sol +262 -36
  250. package/contracts/experiment/cloning/Cloner.sol +47 -0
  251. package/contracts/experiment/errors/Require.sol +10 -5
  252. package/contracts/experiment/errors/Revert.sol +13 -8
  253. package/contracts/experiment/inheritance/A.sol +8 -11
  254. package/contracts/experiment/inheritance/B.sol +10 -5
  255. package/contracts/experiment/inheritance/C.sol +11 -5
  256. package/contracts/experiment/inheritance/IA.sol +2 -7
  257. package/contracts/experiment/inheritance/IB.sol +3 -2
  258. package/contracts/experiment/inheritance/IC.sol +4 -3
  259. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  260. package/contracts/experiment/statemachine/ISM.sol +25 -0
  261. package/contracts/experiment/statemachine/SM.sol +57 -0
  262. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  263. package/contracts/experiment/types/TypeA.sol +14 -9
  264. package/contracts/experiment/types/TypeB.sol +14 -9
  265. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  266. package/contracts/instance/BundleManager.sol +129 -0
  267. package/contracts/instance/Cloneable.sol +46 -0
  268. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  269. package/contracts/instance/IInstance.sol +55 -15
  270. package/contracts/instance/IInstanceBase.sol +26 -0
  271. package/contracts/instance/IInstanceService.sol +34 -0
  272. package/contracts/instance/Instance.sol +444 -44
  273. package/contracts/instance/InstanceAccessManager.sol +288 -0
  274. package/contracts/instance/InstanceBase.sol +41 -0
  275. package/contracts/instance/InstanceReader.sol +315 -0
  276. package/contracts/instance/InstanceService.sol +299 -0
  277. package/contracts/instance/InstanceServiceManager.sol +58 -0
  278. package/contracts/instance/ObjectManager.sol +101 -0
  279. package/contracts/instance/base/ComponentServiceBase.sol +72 -0
  280. package/contracts/instance/base/IInstanceBase.sol +23 -0
  281. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  282. package/contracts/instance/base/ILifecycle.sol +30 -0
  283. package/contracts/instance/base/KeyValueStore.sol +172 -0
  284. package/contracts/instance/base/Lifecycle.sol +100 -0
  285. package/contracts/instance/module/IAccess.sol +38 -0
  286. package/contracts/instance/module/IBundle.sol +20 -0
  287. package/contracts/instance/module/IDistribution.sol +39 -0
  288. package/contracts/instance/module/IPolicy.sol +45 -0
  289. package/contracts/instance/module/IRisk.sol +11 -0
  290. package/contracts/instance/module/ISetup.sol +46 -0
  291. package/contracts/instance/module/ITreasury.sol +23 -0
  292. package/contracts/instance/service/BundleService.sol +260 -0
  293. package/contracts/instance/service/BundleServiceManager.sol +55 -0
  294. package/contracts/instance/service/ComponentOwnerService.sol +315 -0
  295. package/contracts/instance/service/DistributionService.sol +114 -0
  296. package/contracts/instance/service/DistributionServiceManager.sol +55 -0
  297. package/contracts/instance/service/IBundleService.sol +45 -0
  298. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  299. package/contracts/instance/service/IDistributionService.sol +12 -0
  300. package/contracts/instance/service/IPolicyService.sol +87 -0
  301. package/contracts/instance/service/IPoolService.sol +20 -0
  302. package/contracts/instance/service/IProductService.sol +40 -0
  303. package/contracts/instance/service/PolicyService.sol +503 -0
  304. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  305. package/contracts/instance/service/PoolService.sol +122 -0
  306. package/contracts/instance/service/PoolServiceManager.sol +55 -0
  307. package/contracts/instance/service/ProductService.sol +168 -0
  308. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  309. package/contracts/registry/ChainNft.sol +138 -109
  310. package/contracts/registry/IRegistry.sol +63 -56
  311. package/contracts/registry/IRegistryService.sol +58 -0
  312. package/contracts/registry/ITransferInterceptor.sol +6 -0
  313. package/contracts/registry/Registry.sol +320 -117
  314. package/contracts/registry/RegistryAccessManager.sol +210 -0
  315. package/contracts/registry/RegistryService.sol +330 -0
  316. package/contracts/registry/RegistryServiceManager.sol +60 -0
  317. package/contracts/registry/ReleaseManager.sol +378 -0
  318. package/contracts/registry/TokenRegistry.sol +110 -0
  319. package/contracts/shared/ContractDeployerLib.sol +72 -0
  320. package/contracts/shared/ERC165.sol +25 -0
  321. package/contracts/shared/INftOwnable.sol +22 -0
  322. package/contracts/shared/IRegisterable.sol +17 -0
  323. package/contracts/shared/IService.sol +16 -0
  324. package/contracts/shared/IVersionable.sol +96 -0
  325. package/contracts/shared/NftOwnable.sol +134 -0
  326. package/contracts/shared/ProxyManager.sol +94 -0
  327. package/contracts/shared/Registerable.sol +90 -0
  328. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  329. package/contracts/shared/Service.sol +58 -0
  330. package/contracts/shared/TokenHandler.sol +27 -0
  331. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  332. package/contracts/shared/Versionable.sol +147 -0
  333. package/contracts/test/TestFee.sol +25 -0
  334. package/contracts/test/TestRegisterable.sol +18 -0
  335. package/contracts/test/TestRoleId.sol +14 -0
  336. package/contracts/test/TestService.sol +25 -0
  337. package/contracts/test/TestToken.sol +26 -0
  338. package/contracts/test/TestVersion.sol +44 -0
  339. package/contracts/test/TestVersionable.sol +17 -0
  340. package/contracts/test/Usdc.sol +26 -0
  341. package/contracts/types/AddressSet.sol +58 -0
  342. package/contracts/types/Blocknumber.sol +76 -18
  343. package/contracts/types/ChainId.sol +18 -10
  344. package/contracts/types/DistributorType.sol +55 -0
  345. package/contracts/types/Fee.sol +56 -0
  346. package/contracts/types/Key32.sol +50 -0
  347. package/contracts/types/NftId.sol +48 -11
  348. package/contracts/types/NftIdSet.sol +62 -0
  349. package/contracts/types/NumberId.sol +52 -0
  350. package/contracts/types/ObjectType.sol +152 -0
  351. package/contracts/types/Referral.sol +85 -0
  352. package/contracts/types/RiskId.sol +43 -0
  353. package/contracts/types/RoleId.sol +91 -0
  354. package/contracts/types/StateId.sol +105 -0
  355. package/contracts/types/Timestamp.sol +89 -17
  356. package/contracts/types/UFixed.sol +325 -0
  357. package/contracts/types/Version.sol +107 -0
  358. package/package.json +21 -6
  359. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  360. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  361. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  362. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  363. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  364. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  365. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  366. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  367. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  368. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  370. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  372. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  373. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  374. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  375. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  376. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  381. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  383. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  384. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  385. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  386. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  387. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  388. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  389. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  391. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  393. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  394. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  396. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  397. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  398. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  399. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  400. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  401. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  402. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  403. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  404. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  405. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  406. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  407. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  408. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  409. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  410. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  411. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  412. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  413. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  414. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  415. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  416. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  417. package/contracts/components/Component.sol +0 -62
  418. package/contracts/components/IPool.sol +0 -9
  419. package/contracts/components/IProduct.sol +0 -12
  420. package/contracts/instance/access/Access.sol +0 -218
  421. package/contracts/instance/access/IAccess.sol +0 -83
  422. package/contracts/instance/component/ComponentModule.sol +0 -248
  423. package/contracts/instance/component/IComponent.sol +0 -95
  424. package/contracts/instance/policy/IPolicy.sol +0 -66
  425. package/contracts/instance/policy/PolicyModule.sol +0 -107
  426. package/contracts/instance/pool/IPoolModule.sol +0 -41
  427. package/contracts/instance/pool/PoolModule.sol +0 -86
  428. package/contracts/instance/product/IProductService.sol +0 -46
  429. package/contracts/instance/product/ProductService.sol +0 -108
  430. package/contracts/registry/IChainNft.sol +0 -18
@@ -0,0 +1,378 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
+ import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
6
+
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {RoleId} from "../types/RoleId.sol";
9
+ import {ObjectType, zeroObjectType, SERVICE} from "../types/ObjectType.sol";
10
+ import {VersionPart, VersionPartLib} from "../types/Version.sol";
11
+
12
+ import {IVersionable} from "../shared/IVersionable.sol";
13
+ import {IService} from "../shared/IService.sol";
14
+ import {ProxyManager} from "../shared/ProxyManager.sol";
15
+
16
+ import {IRegistry} from "./IRegistry.sol";
17
+ import {Registry} from "./Registry.sol";
18
+ import {IRegistryService} from "./IRegistryService.sol";
19
+ import {RegistryService} from "./RegistryService.sol";
20
+ import {RegistryServiceManager} from "./RegistryServiceManager.sol";
21
+ import {RegistryAccessManager} from "./RegistryAccessManager.sol";
22
+
23
+
24
+ contract ReleaseManager is AccessManaged
25
+ {
26
+ event LogReleaseCreation(VersionPart version, IService registryService);
27
+ event LogServiceRegistration(VersionPart majorVersion, ObjectType serviceDomain);
28
+ event LogReleaseActivation(VersionPart version);
29
+
30
+ // createNextRelease
31
+ error NotRegistryService();
32
+ error UnexpectedServiceAuthority(address expected, address found);
33
+
34
+ // registerService
35
+ error NotService();
36
+ error ServiceNotInRelease(IService service, ObjectType serviceDomain);
37
+ error ServiceAlreadyRegistered(address service);
38
+
39
+ // activateNextRelease
40
+ //error ReleaseNotCreated();
41
+ //error ReleaseRegistrationNotFinished();
42
+
43
+ // _getAndVerifyContractInfo
44
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
45
+ error NotRegisterableOwner(address expectedOwner);
46
+ error SelfRegistration();
47
+ error RegisterableOwnerIsRegistered();
48
+
49
+ // _verifyServiceInfo
50
+ error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
51
+ error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
52
+
53
+ // _verifyAndStoreConfig
54
+ error ConfigMissing();
55
+ error ConfigServiceTypeInvalid();
56
+ error ConfigSelectorMissing();
57
+ error ConfigSelectorZero();
58
+ error ConfigSelectorAlreadyExists(VersionPart serviceVersion, ObjectType serviceDomain);
59
+
60
+ struct ReleaseInfo {
61
+ ObjectType[] types; // service types in release
62
+ }
63
+
64
+ // unique role for some service function
65
+ struct ConfigInfo {
66
+ bytes4[] selector; // selector used by service
67
+ RoleId roleId; // roleId granted to service
68
+ }
69
+
70
+ RegistryAccessManager private immutable _accessManager;
71
+ IRegistry private immutable _registry;
72
+
73
+ VersionPart _latest;// latest active version
74
+ VersionPart immutable _initial;// first active version
75
+
76
+ mapping(VersionPart version => ReleaseInfo info) _release;
77
+
78
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
79
+
80
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
81
+
82
+ uint _awaitingRegistration; // "services left to register" counter
83
+
84
+ mapping(address => bool) _isActiveRegistryService;
85
+
86
+ constructor(
87
+ RegistryAccessManager accessManager,
88
+ VersionPart initialVersion)
89
+ AccessManaged(accessManager.authority())
90
+ {
91
+ _accessManager = accessManager;
92
+
93
+ _initial = initialVersion;
94
+
95
+ _registry = new Registry(address(this), initialVersion);
96
+ }
97
+
98
+ // TODO deploy proxy and initialize with given implementation instead of using given proxy?
99
+ function createNextRelease(IRegistryService registryService)
100
+ external
101
+ restricted // GIF_ADMIN_ROLE
102
+ returns(NftId nftId)
103
+ {
104
+ if(!registryService.supportsInterface(type(IRegistryService).interfaceId)) {
105
+ revert NotRegistryService();
106
+ }
107
+
108
+ if(registryService.authority() != _accessManager.authority()) {
109
+ revert UnexpectedServiceAuthority(
110
+ _accessManager.authority(),
111
+ registryService.authority());
112
+ }
113
+
114
+ (
115
+ IRegistry.ObjectInfo memory info,
116
+ bytes memory data
117
+ ) = _getAndVerifyContractInfo(registryService, SERVICE(), msg.sender);
118
+
119
+ VersionPart nextVersion = getNextVersion();
120
+ _verifyServiceInfo(info, nextVersion, SERVICE());
121
+
122
+ _verifyAndStoreConfig(data);
123
+
124
+ //setTargetClosed(newRegistryService, true);
125
+
126
+ _registerService(address(registryService), nextVersion, SERVICE());
127
+
128
+ nftId = _registry.registerService(info);
129
+
130
+ // external call
131
+ registryService.linkToRegisteredNftId();
132
+
133
+ emit LogReleaseCreation(nextVersion, registryService);
134
+ }
135
+
136
+ function registerService(IService service)
137
+ external
138
+ restricted // GIF_MANAGER_ROLE
139
+ returns(NftId nftId)
140
+ {
141
+ if(!service.supportsInterface(type(IService).interfaceId)) {
142
+ revert NotService();
143
+ }
144
+
145
+ (
146
+ IRegistry.ObjectInfo memory info,
147
+ //bytes memory data
148
+ ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
149
+
150
+ VersionPart nextVersion = getNextVersion();
151
+ ObjectType serviceDomain = _verifyServiceInfo(info, nextVersion, zeroObjectType());
152
+
153
+ bytes4[] memory selector = _config[nextVersion][serviceDomain].selector;
154
+
155
+ // service type is in release
156
+ if(selector.length == 0) {
157
+ revert ServiceNotInRelease(service, serviceDomain);
158
+ }
159
+
160
+ // setup and grant unique role
161
+ address registryService = _registry.getServiceAddress(SERVICE(), nextVersion);
162
+ RoleId roleId = _accessManager.setAndGrantUniqueRole(
163
+ address(service),
164
+ registryService,
165
+ selector);
166
+
167
+ _config[nextVersion][serviceDomain].roleId = roleId;
168
+ _awaitingRegistration--;
169
+
170
+ // activate release
171
+ if(_awaitingRegistration == 0) {
172
+ _latest = nextVersion;
173
+ _isActiveRegistryService[registryService] = true;
174
+
175
+ emit LogReleaseActivation(nextVersion);
176
+ }
177
+
178
+ _registerService(address(service), nextVersion, serviceDomain);
179
+
180
+ nftId = _registry.registerService(info);
181
+
182
+ // external call
183
+ service.linkToRegisteredNftId();
184
+ }
185
+
186
+ /*function activateNextRelease()
187
+ external
188
+ restricted // GIF_ADMIN_ROLE
189
+ {
190
+ VersionPart nextVersion = getNextVersion();
191
+ address service = _service[nextVersion][SERVICE()];
192
+
193
+ // release was created
194
+ if(service == address(0)) {
195
+ revert ReleaseNotCreated();
196
+ }
197
+
198
+ // release fully deployed
199
+ if(_awaitingRegistration > 0) {
200
+ revert ReleaseRegistrationNotFinished();
201
+ }
202
+
203
+ //setTargetClosed(newRegistryService, false);
204
+
205
+ _latest = nextVersion;
206
+ _isActiveRegistryService[service] = true;
207
+
208
+ LogReleaseActivation(nextVersion);
209
+ }*/
210
+
211
+ //--- view functions ----------------------------------------------------//
212
+
213
+ function isActiveRegistryService(address service) external view returns(bool)
214
+ {
215
+ return _isActiveRegistryService[service];
216
+ }
217
+
218
+ function getRegistry() external view returns(address)
219
+ {
220
+ return (address(_registry));
221
+ }
222
+
223
+ function getService(VersionPart serviceVersion, ObjectType serviceDomain) external view returns(address)
224
+ {
225
+ return _service[serviceVersion][serviceDomain];
226
+ }
227
+
228
+ function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
229
+ {
230
+ return _release[releaseVersion];
231
+ }
232
+
233
+ function getNextVersion() public view returns(VersionPart)
234
+ {
235
+ uint256 latest = _latest.toInt();
236
+
237
+ return latest == 0 ?
238
+ _initial : // no active releases yet
239
+ VersionPartLib.toVersionPart(latest + 1);
240
+ }
241
+
242
+ function getLatestVersion() external view returns(VersionPart) {
243
+ return _latest;
244
+ }
245
+
246
+ function getInitialVersion() external view returns(VersionPart) {
247
+ return _initial;
248
+ }
249
+
250
+ //--- private functions ----------------------------------------------------//
251
+
252
+ function _registerService(address service, VersionPart version, ObjectType serviceDomain)
253
+ internal
254
+ {
255
+ if(_service[version][serviceDomain] > address(0)) {
256
+ revert ServiceAlreadyRegistered(service);
257
+ }
258
+
259
+ _service[version][serviceDomain] = service;
260
+
261
+ emit LogServiceRegistration(version, serviceDomain);
262
+ }
263
+
264
+ function _getAndVerifyContractInfo(
265
+ IService service,
266
+ ObjectType expectedType,
267
+ address expectedOwner // assume alway valid, can not be 0
268
+ )
269
+ internal
270
+ view
271
+ returns(
272
+ IRegistry.ObjectInfo memory info,
273
+ bytes memory data
274
+ )
275
+ {
276
+ (info, data) = service.getInitialInfo();
277
+ info.objectAddress = address(service);
278
+ info.isInterceptor = false; // service is never interceptor, at least now
279
+
280
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
281
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
282
+ }
283
+
284
+ address owner = info.initialOwner;
285
+
286
+ if(owner != expectedOwner) { // registerable owner protection
287
+ revert NotRegisterableOwner(expectedOwner);
288
+ }
289
+
290
+ if(owner == address(service)) {
291
+ revert SelfRegistration();
292
+ }
293
+
294
+ /*if(owner == address(0)) { // never 0
295
+ revert();// RegisterableOwnerIsZero();
296
+ }*/
297
+
298
+ if(_registry.isRegistered(owner)) {
299
+ revert RegisterableOwnerIsRegistered();
300
+ }
301
+
302
+ /*NftId parentNftId = info.parentNftId;
303
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
304
+
305
+ if(parentInfo.objectType != parentType) { // parent registration + type
306
+ revert InvalidParent(parentNftId);
307
+ }*/
308
+
309
+ return(info, data);
310
+ }
311
+
312
+ function _verifyServiceInfo(
313
+ IRegistry.ObjectInfo memory info,
314
+ VersionPart expectedVersion,
315
+ ObjectType expectedType
316
+ )
317
+ internal
318
+ view
319
+ returns(ObjectType)
320
+ {
321
+ (
322
+ ObjectType serviceDomain,
323
+ VersionPart serviceVersion
324
+ ) = abi.decode(info.data, (ObjectType, VersionPart));
325
+
326
+ if(serviceVersion != expectedVersion) {
327
+ revert UnexpectedServiceVersion(expectedVersion, serviceVersion);
328
+ }
329
+
330
+ if(expectedType != zeroObjectType()) {
331
+ if(serviceDomain != expectedType) {
332
+ revert UnexpectedServiceDomain(expectedType, serviceDomain);
333
+ }
334
+ }
335
+
336
+ return serviceDomain;
337
+ }
338
+
339
+ function _verifyAndStoreConfig(bytes memory configBytes)
340
+ internal
341
+ {
342
+ VersionPart nextVersion = getNextVersion();
343
+ IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
344
+
345
+ if(config.length == 0) {
346
+ revert ConfigMissing();
347
+ }
348
+ // always in release
349
+ _release[nextVersion].types.push(SERVICE());
350
+
351
+ for(uint idx = 0; idx < config.length; idx++)
352
+ {
353
+ ObjectType serviceDomain = config[idx].serviceDomain;
354
+ bytes4[] memory selector = config[idx].selector;
355
+
356
+ // not "registry service" type
357
+ if(serviceDomain == SERVICE()) { revert ConfigServiceTypeInvalid(); }
358
+
359
+ // at least one selector exists
360
+ if(selector.length == 0) { revert ConfigSelectorMissing(); }
361
+
362
+ // no zero selectors
363
+ for(uint jdx = 0; jdx < selector.length; jdx++) {
364
+ if(selector[jdx] == 0) { revert ConfigSelectorZero(); }
365
+ }
366
+
367
+ // no overwrite
368
+ if(_config[nextVersion][serviceDomain].selector.length > 0) {
369
+ revert ConfigSelectorAlreadyExists(nextVersion, serviceDomain);
370
+ }
371
+
372
+ _config[nextVersion][serviceDomain].selector = selector;
373
+ _release[nextVersion].types.push(serviceDomain);
374
+ }
375
+
376
+ _awaitingRegistration = config.length;
377
+ }
378
+ }
@@ -0,0 +1,110 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
6
+
7
+ import {IRegisterable} from "../shared/IRegisterable.sol";
8
+ import {IRegistry} from "./IRegistry.sol";
9
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
10
+ import {ObjectType, SERVICE} from "../types/ObjectType.sol";
11
+ import {NftOwnable} from "../shared/NftOwnable.sol";
12
+
13
+ /// @title contract to register token per GIF major release.
14
+ contract TokenRegistry is
15
+ NftOwnable
16
+ {
17
+ event LogRegistered(address token, string symbol, uint256 decimals);
18
+ event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
19
+
20
+ error NotContract(address account);
21
+ error NotToken(address account);
22
+ error TokenDecimalsZero();
23
+ error TokenMajorVersionInvalid(VersionPart majorVersion);
24
+
25
+ address [] internal _token;
26
+ mapping(address token => bool registered) internal _registered;
27
+ mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
28
+
29
+ constructor()
30
+ NftOwnable()
31
+ { }
32
+
33
+
34
+ /// @dev link ownership of token registry to nft owner of registry service
35
+ function linkToNftOwnable(address registryAddress)
36
+ external
37
+ onlyOwner
38
+ {
39
+ IRegistry registry = IRegistry(registryAddress);
40
+ // TODO use _latest instead of next version -> _latest is 0 before first release activation
41
+ address registryServiceAddress = registry.getServiceAddress(SERVICE(), registry.getMajorVersionMax());
42
+
43
+ _linkToNftOwnable(registryAddress, registryServiceAddress);
44
+ }
45
+
46
+ /// @dev token state is informative, registry have no clue about used tokens
47
+ // component owner is responsible for token selection and operations
48
+ // service MUST deny registration of component with inactive token
49
+ function setActive(address token, VersionPart majorVersion, bool active)
50
+ external
51
+ onlyOwner
52
+ {
53
+ // verify that token is registered
54
+ if (!_registered[token]) {
55
+ _registerToken(token);
56
+ }
57
+
58
+ // verify valid major version
59
+ // ensure major version increments is one
60
+ uint256 version = majorVersion.toInt();
61
+ if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
62
+ revert TokenMajorVersionInvalid(majorVersion);
63
+ }
64
+
65
+ _active[token][majorVersion] = active;
66
+
67
+ emit LogTokenStateSet(token, majorVersion, active);
68
+ }
69
+
70
+ function tokens() external view returns (uint256) {
71
+ return _token.length;
72
+ }
73
+
74
+ function getToken(uint256 idx) external view returns (IERC20Metadata token) {
75
+ return IERC20Metadata(_token[idx]);
76
+ }
77
+
78
+ function isRegistered(address token) external view returns (bool) {
79
+ return _registered[token];
80
+ }
81
+
82
+ function isActive(address token, VersionPart majorVersion) external view returns (bool) {
83
+ return _active[token][majorVersion];
84
+ }
85
+
86
+ /// @dev some sanity checks to prevent unintended registration
87
+ function _registerToken(address token) internal {
88
+
89
+ // MUST be contract
90
+ if(token.code.length == 0) {
91
+ revert NotContract(token);
92
+ }
93
+
94
+ // MUST not be GIF registerable
95
+ if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
96
+ revert NotToken(token);
97
+ }
98
+
99
+ // MUST have decimals > 0
100
+ IERC20Metadata erc20 = IERC20Metadata(token);
101
+ if(erc20.decimals() == 0) {
102
+ revert TokenDecimalsZero();
103
+ }
104
+
105
+ _registered[token] = true;
106
+ _token.push(token);
107
+
108
+ emit LogRegistered(token, erc20.symbol(), erc20.decimals());
109
+ }
110
+ }
@@ -0,0 +1,72 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ library ContractDeployerLib {
5
+
6
+ event LogContractDeployed(address contractAddress);
7
+
8
+ error ErrorCreationCodeHashMismatch(bytes32 expectedHash, bytes32 actualHash);
9
+
10
+ /// @dev deploys a new contract using the provided creation code
11
+ function deploy(
12
+ bytes memory creationCode,
13
+ bytes32 expectedCreationCodeHash
14
+ )
15
+ public
16
+ returns (address contractAdress)
17
+ {
18
+ // check against expected hash, if provided
19
+ if (expectedCreationCodeHash != bytes32(0)) {
20
+ bytes32 creationCodeHash = getHash(creationCode);
21
+ if (creationCodeHash != expectedCreationCodeHash) {
22
+ revert ErrorCreationCodeHashMismatch(expectedCreationCodeHash, creationCodeHash);
23
+ }
24
+ }
25
+
26
+ // solhint-disable no-inline-assembly
27
+ assembly {
28
+ contractAdress := create(0, add(creationCode, 0x20), mload(creationCode))
29
+
30
+ if iszero(extcodesize(contractAdress)) {
31
+ revert(0, 0)
32
+ }
33
+ }
34
+ // solhint enable
35
+
36
+ emit LogContractDeployed(contractAdress);
37
+ }
38
+
39
+ /// @dev gets the creation code for the new contract
40
+ // for terminology see eg https://www.rareskills.io/post/ethereum-contract-creation-code
41
+ function getCreationCode(
42
+ bytes memory byteCodeWithInitCode, // what you get with type(<Contract>).creationCode
43
+ bytes memory encodedConstructorArguments // what you get with
44
+ )
45
+ public
46
+ pure
47
+ returns (bytes memory creationCode)
48
+ {
49
+ return abi.encodePacked(byteCodeWithInitCode, encodedConstructorArguments);
50
+ }
51
+
52
+
53
+ function matchesWithHash(
54
+ bytes memory creationCode,
55
+ bytes32 expectedHash
56
+ )
57
+ public
58
+ pure
59
+ returns (bool isMatching)
60
+ {
61
+ return getHash(creationCode) == expectedHash;
62
+ }
63
+
64
+
65
+ function getHash(bytes memory creationCode)
66
+ public
67
+ pure
68
+ returns (bytes32 hash)
69
+ {
70
+ return keccak256(creationCode);
71
+ }
72
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ contract ERC165 is IERC165 {
7
+ mapping(bytes4 => bool) private _isSupported;
8
+
9
+ constructor() {
10
+ _initializeERC165();
11
+ }
12
+
13
+ function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
14
+ return _isSupported[interfaceId];
15
+ }
16
+
17
+ // @dev register support for ERC165 itself
18
+ function _initializeERC165() internal {
19
+ _isSupported[type(IERC165).interfaceId] = true;
20
+ }
21
+
22
+ function _registerInterface(bytes4 interfaceId) internal {
23
+ _isSupported[interfaceId] = true;
24
+ }
25
+ }
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+ import {NftId} from "../types/NftId.sol";
6
+
7
+ interface INftOwnable {
8
+ error ErrorNotOwner(address account);
9
+
10
+ error ErrorAlreadyLinked(address registry, NftId nftId);
11
+ error ErrorRegistryAlreadyInitialized(address registry);
12
+ error ErrorRegistryNotInitialized();
13
+ error ErrorRegistryAddressZero();
14
+ error ErrorNotRegistry(address registryAddress);
15
+ error ErrorContractNotRegistered(address contractAddress);
16
+
17
+ function linkToRegisteredNftId() external;
18
+
19
+ function getRegistry() external view returns (IRegistry);
20
+ function getNftId() external view returns (NftId);
21
+ function getOwner() external view returns (address);
22
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {INftOwnable} from "./INftOwnable.sol";
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+ import {ObjectType} from "../types/ObjectType.sol";
10
+
11
+ interface IRegisterable is IERC165, INftOwnable {
12
+
13
+ function getInitialInfo()
14
+ external
15
+ view
16
+ returns (IRegistry.ObjectInfo memory, bytes memory data);
17
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {VersionPart} from "../types/Version.sol";
5
+ import {ObjectType} from "../types/ObjectType.sol";
6
+
7
+ import {IRegisterable} from "./IRegisterable.sol";
8
+ import {IVersionable} from "./IVersionable.sol";
9
+
10
+ interface IService is
11
+ IRegisterable,
12
+ IVersionable
13
+ {
14
+ function getDomain() external pure returns(ObjectType serviceDomain);
15
+ function getMajorVersion() external view returns(VersionPart majorVersion);
16
+ }