@etherisc/gif-next 0.0.2-f7be756-963 → 0.0.2-f7eda15-119

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 (408) hide show
  1. package/README.md +331 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +491 -40
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +849 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +244 -241
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +648 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +769 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +748 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +760 -118
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +738 -135
  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/BundleManager.sol/BundleManager.dbg.json +4 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  46. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1310 -809
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +586 -0
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +2242 -908
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1034 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1381 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1024 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +473 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +603 -0
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  74. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  78. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  80. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  82. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  84. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  86. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  88. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
  90. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +772 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
  96. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +715 -0
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +441 -0
  100. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
  102. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +494 -0
  104. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +531 -0
  106. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
  108. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +806 -0
  112. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
  114. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +856 -0
  116. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
  118. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +567 -31
  122. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +981 -0
  124. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  126. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/Registry.sol/Registry.json +644 -74
  128. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  129. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  130. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1200 -0
  132. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +464 -0
  134. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  135. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  136. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  137. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -0
  138. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  139. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  140. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  141. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  142. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +196 -0
  146. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  147. package/artifacts/contracts/shared/IService.sol/IService.json +416 -0
  148. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +171 -0
  152. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  153. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +362 -0
  154. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +282 -0
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/shared/Service.sol/Service.json +476 -0
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  159. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +313 -0
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  170. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestService.sol/TestService.json +608 -0
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  179. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  181. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  182. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  210. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  212. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  216. package/contracts/components/Component.sol +186 -47
  217. package/contracts/components/Distribution.sol +150 -0
  218. package/contracts/components/IComponent.sol +43 -0
  219. package/contracts/components/IDistributionComponent.sol +47 -0
  220. package/contracts/components/IPoolComponent.sol +60 -0
  221. package/contracts/components/IProductComponent.sol +39 -0
  222. package/contracts/components/Pool.sol +200 -25
  223. package/contracts/components/Product.sol +222 -46
  224. package/contracts/experiment/cloning/Cloner.sol +47 -0
  225. package/contracts/instance/BundleManager.sol +125 -0
  226. package/contracts/instance/Cloneable.sol +46 -0
  227. package/contracts/instance/IInstance.sol +71 -24
  228. package/contracts/instance/IInstanceService.sol +41 -0
  229. package/contracts/instance/Instance.sol +248 -51
  230. package/contracts/instance/InstanceAccessManager.sol +298 -0
  231. package/contracts/instance/InstanceReader.sol +293 -0
  232. package/contracts/instance/InstanceService.sol +435 -0
  233. package/contracts/instance/InstanceServiceManager.sol +54 -0
  234. package/contracts/instance/ObjectManager.sol +84 -0
  235. package/contracts/instance/base/ComponentService.sol +134 -0
  236. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  237. package/contracts/instance/base/ILifecycle.sol +30 -0
  238. package/contracts/instance/base/KeyValueStore.sol +172 -0
  239. package/contracts/instance/base/Lifecycle.sol +100 -0
  240. package/contracts/instance/module/IAccess.sol +48 -0
  241. package/contracts/instance/module/IBundle.sol +20 -0
  242. package/contracts/instance/module/IDistribution.sol +39 -0
  243. package/contracts/instance/module/IPolicy.sol +45 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/BundleService.sol +293 -0
  248. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  249. package/contracts/instance/service/DistributionService.sol +106 -0
  250. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  251. package/contracts/instance/service/IBundleService.sol +44 -0
  252. package/contracts/instance/service/IDistributionService.sol +12 -0
  253. package/contracts/instance/service/IPolicyService.sol +94 -0
  254. package/contracts/instance/service/IPoolService.sol +20 -0
  255. package/contracts/instance/service/IProductService.sol +40 -0
  256. package/contracts/instance/service/PolicyService.sol +538 -0
  257. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  258. package/contracts/instance/service/PoolService.sol +110 -0
  259. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  260. package/contracts/instance/service/ProductService.sol +234 -0
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +129 -62
  263. package/contracts/registry/IRegistry.sol +72 -41
  264. package/contracts/registry/IRegistryService.sol +65 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +401 -131
  267. package/contracts/registry/RegistryAccessManager.sol +216 -0
  268. package/contracts/registry/RegistryService.sol +262 -0
  269. package/contracts/registry/RegistryServiceManager.sol +62 -0
  270. package/contracts/registry/ReleaseManager.sol +332 -0
  271. package/contracts/registry/TokenRegistry.sol +112 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +25 -0
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +15 -0
  276. package/contracts/shared/IService.sol +16 -0
  277. package/contracts/shared/IVersionable.sol +96 -0
  278. package/contracts/shared/NftOwnable.sol +139 -0
  279. package/contracts/shared/ProxyManager.sol +94 -0
  280. package/contracts/shared/Registerable.sol +86 -0
  281. package/contracts/shared/Service.sol +60 -0
  282. package/contracts/shared/TokenHandler.sol +27 -0
  283. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  284. package/contracts/shared/Versionable.sol +147 -0
  285. package/contracts/test/TestFee.sol +25 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +25 -0
  289. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  290. package/contracts/test/TestVersion.sol +44 -0
  291. package/contracts/test/TestVersionable.sol +17 -0
  292. package/contracts/{mock → test}/Usdc.sol +1 -1
  293. package/contracts/types/AddressSet.sol +58 -0
  294. package/contracts/types/DistributorType.sol +55 -0
  295. package/contracts/types/Fee.sol +44 -20
  296. package/contracts/types/Key32.sol +50 -0
  297. package/contracts/types/NftId.sol +22 -1
  298. package/contracts/types/NftIdSet.sol +62 -0
  299. package/contracts/types/NumberId.sol +52 -0
  300. package/contracts/types/ObjectType.sol +60 -15
  301. package/contracts/types/Referral.sol +85 -0
  302. package/contracts/types/RiskId.sol +43 -0
  303. package/contracts/types/RoleId.sol +90 -0
  304. package/contracts/types/StateId.sol +18 -4
  305. package/contracts/types/Timestamp.sol +29 -4
  306. package/contracts/types/UFixed.sol +138 -23
  307. package/contracts/types/Version.sol +107 -0
  308. package/package.json +11 -5
  309. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  310. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  311. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  313. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  314. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  315. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  320. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  321. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  322. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  324. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  326. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  330. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  331. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  333. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  334. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  335. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  336. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  337. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  338. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  339. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  342. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  343. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  345. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  347. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  348. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  350. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  352. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  354. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  356. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  358. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  359. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  360. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  361. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  363. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  364. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  365. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  367. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  368. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  369. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  370. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  371. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  372. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  373. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  374. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  375. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  376. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  377. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  378. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  379. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  380. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  381. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  382. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  383. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  384. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  385. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  386. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  387. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  388. package/contracts/components/IPool.sol +0 -15
  389. package/contracts/components/IProduct.sol +0 -16
  390. package/contracts/experiment/statemachine/README.md +0 -112
  391. package/contracts/instance/access/Access.sol +0 -165
  392. package/contracts/instance/access/IAccess.sol +0 -63
  393. package/contracts/instance/component/ComponentModule.sol +0 -274
  394. package/contracts/instance/component/IComponent.sol +0 -74
  395. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  396. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  397. package/contracts/instance/policy/IPolicy.sol +0 -50
  398. package/contracts/instance/policy/PolicyModule.sol +0 -114
  399. package/contracts/instance/pool/IPoolModule.sol +0 -23
  400. package/contracts/instance/pool/PoolModule.sol +0 -81
  401. package/contracts/instance/product/IProductService.sol +0 -36
  402. package/contracts/instance/product/ProductService.sol +0 -136
  403. package/contracts/instance/treasury/ITreasury.sol +0 -91
  404. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  405. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  406. package/contracts/mock/TestPool.sol +0 -16
  407. package/contracts/mock/TestProduct.sol +0 -39
  408. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,332 @@
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
+
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {RoleId} from "../types/RoleId.sol";
8
+ import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
9
+ import {VersionPart, VersionPartLib} from "../types/Version.sol";
10
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
+
12
+ import {IService} from "../shared/IService.sol";
13
+
14
+ import {IRegistry} from "./IRegistry.sol";
15
+ import {Registry} from "./Registry.sol";
16
+ import {IRegistryService} from "./IRegistryService.sol";
17
+ import {RegistryAccessManager} from "./RegistryAccessManager.sol";
18
+
19
+
20
+ contract ReleaseManager is AccessManaged
21
+ {
22
+ using ObjectTypeLib for ObjectType;
23
+
24
+ event LogReleaseCreation(VersionPart version);
25
+ event LogReleaseActivation(VersionPart version);
26
+
27
+ // createNextRelease
28
+ error NotRegistryService();
29
+ error UnexpectedServiceAuthority(address expected, address found);
30
+
31
+ // registerService
32
+ error NotService();
33
+
34
+ // activateNextRelease
35
+ error ReleaseNotCreated();
36
+ error ReleaseRegistrationNotFinished();
37
+
38
+ // _getAndVerifyContractInfo
39
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
40
+ error NotRegisterableOwner(address notOwner);
41
+ error SelfRegistration();
42
+ error RegisterableOwnerIsRegistered();
43
+
44
+ // _verifyServiceInfo
45
+ error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
46
+ error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
47
+
48
+ // _verifyAndStoreConfig
49
+ error ConfigMissing();
50
+ error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
51
+ error ConfigSelectorZero(uint configArrayIndex);
52
+ error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
53
+
54
+
55
+ RegistryAccessManager private immutable _accessManager;
56
+ IRegistry private immutable _registry;
57
+
58
+ VersionPart immutable _initial;// first active version
59
+ VersionPart _latest;// latest active version
60
+ VersionPart _next;// version to create and activate
61
+
62
+ mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
63
+
64
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
65
+
66
+ uint _awaitingRegistration; // "services left to register" counter
67
+
68
+ mapping(address registryService => bool isActive) _active;
69
+
70
+ mapping(VersionPart version => bool isValid) _valid; // TODO refactor to use _active only
71
+
72
+ constructor(
73
+ RegistryAccessManager accessManager,
74
+ VersionPart initialVersion)
75
+ AccessManaged(accessManager.authority())
76
+ {
77
+ require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
78
+
79
+ _accessManager = accessManager;
80
+
81
+ _initial = initialVersion;
82
+ _next = initialVersion;
83
+
84
+ _registry = new Registry();
85
+ }
86
+
87
+ /// @dev skips previous release if was not activated
88
+ function createNextRelease()
89
+ external
90
+ restricted // GIF_ADMIN_ROLE
91
+ {
92
+ // allow to register new registry service for next version
93
+ VersionPartLib.toVersionPart(_next.toInt() + 1);
94
+ // disallow registration of regular services for next version while registry service is not registered
95
+ _awaitingRegistration = 0;
96
+
97
+ emit LogReleaseCreation(_next);
98
+ }
99
+
100
+ function activateNextRelease()
101
+ external
102
+ restricted // GIF_ADMIN_ROLE
103
+ {
104
+ VersionPart version = _next;
105
+ address service = _registry.getServiceAddress(REGISTRY(), version);
106
+
107
+ // release was created
108
+ if(service == address(0)) {
109
+ revert ReleaseNotCreated();
110
+ }
111
+
112
+ // release fully deployed
113
+ if(_awaitingRegistration > 0) {
114
+ revert ReleaseRegistrationNotFinished();
115
+ }
116
+
117
+ //setTargetClosed(service, false);
118
+
119
+ _latest = version;
120
+
121
+ _active[service] = true;
122
+ _valid[version] = true;
123
+
124
+ emit LogReleaseActivation(version);
125
+ }
126
+
127
+ // TODO deploy proxy and initialize with given implementation instead of using given proxy?
128
+ // IMPORTANT: MUST never be possible to create with access/release manager, token registry
129
+ // callable once per release after release creation, can not register regular services while registry service is not registered
130
+ function registerRegistryService(IRegistryService service)
131
+ external
132
+ restricted // GIF_MANAGER_ROLE
133
+ returns(NftId nftId)
134
+ {
135
+ if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
136
+ revert NotRegistryService();
137
+ }
138
+
139
+ // TODO unreliable! MUST guarantee the same authority -> how?
140
+ address serviceAuthority = service.authority();
141
+ if(serviceAuthority != authority()) {
142
+ revert UnexpectedServiceAuthority(
143
+ authority(),
144
+ serviceAuthority);
145
+ }
146
+
147
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
148
+
149
+ VersionPart version = _next;
150
+ ObjectType domain = REGISTRY();
151
+ _verifyServiceInfo(info, version, domain);
152
+
153
+ // data: config bytes
154
+ _createRelease(service.getFunctionConfigs());
155
+
156
+ //setTargetClosed(service, true);
157
+
158
+ nftId = _registry.registerService(info, version, domain);
159
+
160
+ // external call
161
+ service.linkToRegisteredNftId();
162
+ }
163
+
164
+ // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
165
+ // TODO removing service from release? -> set _active to false forever, but keep all other records?
166
+ function registerService(IService service)
167
+ external
168
+ restricted // GIF_MANAGER_ROLE
169
+ returns(NftId nftId)
170
+ {
171
+ if(!service.supportsInterface(type(IService).interfaceId)) {
172
+ revert NotService();
173
+ }
174
+
175
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
176
+ VersionPart version = getNextVersion();
177
+ ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
178
+ _verifyServiceInfo(info, version, domain);
179
+
180
+ // setup and grant unique role if service does registrations
181
+ bytes4[] memory selector = new bytes4[](1);
182
+ selector[0] = _selector[version][domain];
183
+ address registryService = _registry.getServiceAddress(REGISTRY(), version);
184
+ if(selector[0] != 0) {
185
+ _accessManager.setAndGrantUniqueRole(
186
+ address(service),
187
+ registryService,
188
+ selector);
189
+ }
190
+
191
+ _awaitingRegistration--;
192
+
193
+ nftId = _registry.registerService(info, version, domain);
194
+
195
+ // external call
196
+ service.linkToRegisteredNftId();
197
+ }
198
+
199
+ //--- view functions ----------------------------------------------------//
200
+
201
+ function isActiveRegistryService(address service) external view returns(bool)
202
+ {
203
+ return _active[service];
204
+ }
205
+
206
+ function isValidRelease(VersionPart version) external view returns(bool)
207
+ {
208
+ return _valid[version];
209
+ }
210
+
211
+ function getRegistry() external view returns(address)
212
+ {
213
+ return (address(_registry));
214
+ }
215
+
216
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
217
+ {
218
+ return _release[version];
219
+ }
220
+
221
+ function getNextVersion() public view returns(VersionPart)
222
+ {
223
+ return _next;
224
+ }
225
+
226
+ function getLatestVersion() external view returns(VersionPart) {
227
+ return _latest;
228
+ }
229
+
230
+ function getInitialVersion() external view returns(VersionPart) {
231
+ return _initial;
232
+ }
233
+
234
+ //--- private functions ----------------------------------------------------//
235
+
236
+ function _getAndVerifyContractInfo(
237
+ IService service,
238
+ ObjectType expectedType,
239
+ address expectedOwner // assume always valid, can not be 0
240
+ )
241
+ internal
242
+ // view
243
+ returns(
244
+ IRegistry.ObjectInfo memory info
245
+ )
246
+ {
247
+ info = service.getInitialInfo();
248
+ info.objectAddress = address(service);
249
+ info.isInterceptor = false; // service is never interceptor, at least now
250
+
251
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
252
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
253
+ }
254
+
255
+ address owner = info.initialOwner;
256
+
257
+ if(owner != expectedOwner) { // registerable owner protection
258
+ revert NotRegisterableOwner(expectedOwner);
259
+ }
260
+
261
+ if(owner == address(service)) {
262
+ revert SelfRegistration();
263
+ }
264
+
265
+ if(_registry.isRegistered(owner)) {
266
+ revert RegisterableOwnerIsRegistered();
267
+ }
268
+ }
269
+
270
+ function _verifyServiceInfo(
271
+ IRegistry.ObjectInfo memory info,
272
+ VersionPart expectedVersion,
273
+ ObjectType expectedDomain
274
+ )
275
+ internal
276
+ view
277
+ returns(ObjectType)
278
+ {
279
+ (
280
+ ObjectType domain,
281
+ VersionPart version
282
+ ) = abi.decode(info.data, (ObjectType, VersionPart));
283
+
284
+ if(version != expectedVersion) {
285
+ revert UnexpectedServiceVersion(expectedVersion, version);
286
+ }
287
+
288
+ if(domain != expectedDomain) {
289
+ revert UnexpectedServiceDomain(expectedDomain, domain);
290
+ }
291
+
292
+ return domain;
293
+ }
294
+
295
+ // TODO check if registry supports types specified in the config array
296
+ function _createRelease(IRegistryService.FunctionConfig[] memory config)
297
+ internal
298
+ {
299
+ VersionPart version = getNextVersion();
300
+
301
+ if(config.length == 0) {
302
+ revert ConfigMissing();
303
+ }
304
+ // always in release
305
+ _release[version].domains.push(REGISTRY());
306
+ for(uint idx = 0; idx < config.length; idx++)
307
+ {
308
+ ObjectType domain = config[idx].serviceDomain;
309
+ bytes4 selector = config[idx].selector;
310
+
311
+ // not "registry service" / zero domain
312
+ if(
313
+ domain == REGISTRY() ||
314
+ domain.eqz()
315
+ ) { revert ConfigServiceDomainInvalid(idx, domain); }
316
+
317
+ // TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
318
+ // no overwrite
319
+ if(_selector[version][domain] > 0) {
320
+ revert SelectorAlreadyExists(version, domain);
321
+ }
322
+
323
+ _selector[version][domain] = selector;
324
+ _release[version].domains.push(domain);
325
+ }
326
+ // TODO set when activated?
327
+ _release[version].createdAt = TimestampLib.blockTimestamp();
328
+ //_release[version].updatedAt = TimestampLib.blockTimestamp();
329
+
330
+ _awaitingRegistration = config.length;
331
+ }
332
+ }
@@ -0,0 +1,112 @@
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 {VersionPart} from "../types/Version.sol";
10
+ import {REGISTRY} 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
+ // TODO latter registry service will get new release, new address, new nft, TokenRegistry will not catch that -> use AccessManaged only for services
36
+ function linkToNftOwnable(address registryAddress)
37
+ external
38
+ onlyOwner
39
+ {
40
+ IRegistry registry = IRegistry(registryAddress);
41
+ // TODO use _latest instead of _initial -> but _latest is 0 before first release activation
42
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
43
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getInitialVersion());
44
+
45
+ _linkToNftOwnable(registryAddress, registryServiceAddress);
46
+ }
47
+
48
+ /// @dev token state is informative, registry have no clue about used tokens
49
+ // component owner is responsible for token selection and operations
50
+ // service MUST deny registration of component with inactive token
51
+ function setActive(address token, VersionPart majorVersion, bool active)
52
+ external
53
+ onlyOwner
54
+ {
55
+ // verify that token is registered
56
+ if (!_registered[token]) {
57
+ _registerToken(token);
58
+ }
59
+
60
+ // verify valid major version
61
+ // ensure major version increments is one
62
+ uint256 version = majorVersion.toInt();
63
+ if (!_registry.isValidRelease(majorVersion)) {
64
+ revert TokenMajorVersionInvalid(majorVersion);
65
+ }
66
+
67
+ _active[token][majorVersion] = active;
68
+
69
+ emit LogTokenStateSet(token, majorVersion, active);
70
+ }
71
+
72
+ function tokens() external view returns (uint256) {
73
+ return _token.length;
74
+ }
75
+
76
+ function getToken(uint256 idx) external view returns (IERC20Metadata token) {
77
+ return IERC20Metadata(_token[idx]);
78
+ }
79
+
80
+ function isRegistered(address token) external view returns (bool) {
81
+ return _registered[token];
82
+ }
83
+
84
+ function isActive(address token, VersionPart majorVersion) external view returns (bool) {
85
+ return _active[token][majorVersion];
86
+ }
87
+
88
+ /// @dev some sanity checks to prevent unintended registration
89
+ function _registerToken(address token) internal {
90
+
91
+ // MUST be contract
92
+ if(token.code.length == 0) {
93
+ revert NotContract(token);
94
+ }
95
+
96
+ // MUST not be GIF registerable
97
+ if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
98
+ revert NotToken(token);
99
+ }
100
+
101
+ // MUST have decimals > 0
102
+ IERC20Metadata erc20 = IERC20Metadata(token);
103
+ if(erc20.decimals() == 0) {
104
+ revert TokenDecimalsZero();
105
+ }
106
+
107
+ _registered[token] = true;
108
+ _token.push(token);
109
+
110
+ emit LogRegistered(token, erc20.symbol(), erc20.decimals());
111
+ }
112
+ }
@@ -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,15 @@
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
+
9
+ interface IRegisterable is IERC165, INftOwnable {
10
+
11
+ function getInitialInfo()
12
+ external
13
+ view
14
+ returns (IRegistry.ObjectInfo memory);
15
+ }
@@ -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
+ }
@@ -0,0 +1,96 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Blocknumber} from "../types/Blocknumber.sol";
5
+ import {Timestamp} from "../types/Timestamp.sol";
6
+ import {Version} from "../types/Version.sol";
7
+
8
+
9
+ /// IMPORTANT
10
+ // Upgradeable contract MUST:
11
+ // 1) inherit from Versionable
12
+ // 2) implement version() function
13
+ // 3) implement internal _initialize() function with onlyInitializing modifier
14
+ // 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
15
+ // 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
16
+ // 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
17
+ // 7) use namespace storage
18
+ // 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
19
+ // Upgradeable contract SHOULD:
20
+ // 9) define all non private methods as virtual (in order to be able to upgrade them latter)
21
+ // otherwise, it is still possible to upgrade contract, but everyone who is using it will have to switch to a new fucntions
22
+ // in some cases this ok but not in the others...
23
+ //
24
+ // IMPORTANT
25
+ // Each version MUST:
26
+ // 1) define namespace storage struct if accessing storage
27
+ // - DO NOT use structs inside, except
28
+ // - CAN use structs ONLY inside mappings
29
+ // 2) ALWAYS define private getter if accessing storage
30
+ // - MUST use default implementation, CAN change ONLY return type
31
+ // - MUST use the same "LOCATION_V1"
32
+
33
+ interface IVersionable {
34
+
35
+ struct VersionInfo {
36
+ Version version;
37
+ address implementation;
38
+ address activatedBy;
39
+ Timestamp activatedAt;
40
+ Blocknumber activatedIn;
41
+ }
42
+
43
+ event LogVersionableInitialized(Version version, address implementation, address activatedBy);
44
+
45
+ // TODO uncomment when all implementations are ready
46
+ /**
47
+ * @dev IMPORTANT
48
+ * implementation MUST be guarded by initializer modifier
49
+ * implementation MUST call internal function Versionable._updateVersionHistory
50
+ * new version MUST inherit from previous version
51
+ */
52
+ function initialize(address implementation, address activatedBy, bytes memory activationData) external;
53
+
54
+ /**
55
+ * @dev
56
+ * implementation MUST be guarded by reinitializer(version().toUint64()) modifier
57
+ * implementation MUST call internal function Versionable._updateVersionHistory
58
+ * new version MUST inherit from previous version
59
+ * the first verion MUST revert
60
+ */
61
+ function upgrade(address implementation, address activatedBy, bytes memory upgradeData) external;
62
+
63
+ /**
64
+ * @dev returns true if the specified version has been activated for the current contract
65
+ */
66
+ function isInitialized(Version version) external view returns(bool);
67
+
68
+ /**
69
+ * @dev returns version of this contract
70
+ * each new implementation MUST implement this function
71
+ * version number MUST increase
72
+ */
73
+ function getVersion() external pure returns(Version);
74
+
75
+ /**
76
+ * @dev returns the number of all deployed versions of this contract
77
+ */
78
+ function getVersionCount() external view returns(uint256 numberOfVersions);
79
+
80
+ /**
81
+ * @dev returns the i-th (index) version of this contract
82
+ */
83
+ function getVersion(uint256 index) external view returns(Version version);
84
+
85
+ /**
86
+ * @dev returns the i-th (index) version info of this contract
87
+ */
88
+ function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
89
+
90
+ // TODO make sure it is needed here
91
+ /**
92
+ * @dev returns currently active version
93
+ */
94
+ function getInitializedVersion() external view returns(uint64);
95
+
96
+ }