@etherisc/gif-next 0.0.2-d5522f6-712 → 0.0.2-d5b7b78-706

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 (374) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +747 -103
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +137 -114
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +737 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +692 -178
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +517 -135
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1003 -393
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +194 -197
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1015 -781
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +440 -176
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -263
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +369 -299
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +330 -89
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +178 -158
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +61 -78
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +363 -301
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +305 -80
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1211 -172
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +456 -71
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +275 -185
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +155 -245
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → instance/service/IClaimService.sol/IClaimService.json} +159 -147
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +728 -161
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +60 -291
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +81 -152
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +22 -174
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +244 -379
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +311 -114
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +289 -192
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +313 -76
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +206 -206
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +117 -5
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +112 -198
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +131 -27
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +216 -234
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +70 -69
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +22 -174
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +114 -157
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +135 -214
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  208. package/contracts/components/Component.sol +251 -0
  209. package/contracts/components/Distribution.sol +199 -83
  210. package/contracts/components/IComponent.sol +74 -0
  211. package/contracts/components/IDistributionComponent.sol +44 -17
  212. package/contracts/components/IPoolComponent.sol +88 -41
  213. package/contracts/components/IProductComponent.sol +10 -5
  214. package/contracts/components/Pool.sol +209 -182
  215. package/contracts/components/Product.sol +118 -126
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  217. package/contracts/instance/BundleManager.sol +14 -16
  218. package/contracts/instance/Cloneable.sol +7 -2
  219. package/contracts/instance/IInstance.sol +52 -16
  220. package/contracts/instance/IInstanceService.sol +37 -5
  221. package/contracts/instance/Instance.sol +126 -75
  222. package/contracts/instance/InstanceAccessManager.sol +383 -164
  223. package/contracts/instance/InstanceReader.sol +9 -34
  224. package/contracts/instance/InstanceService.sol +277 -127
  225. package/contracts/instance/InstanceServiceManager.sol +1 -1
  226. package/contracts/instance/ObjectManager.sol +10 -29
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/base/KeyValueStore.sol +5 -2
  229. package/contracts/instance/base/Lifecycle.sol +11 -2
  230. package/contracts/instance/module/IAccess.sol +22 -16
  231. package/contracts/instance/module/IBundle.sol +2 -1
  232. package/contracts/instance/module/IComponents.sol +35 -0
  233. package/contracts/instance/module/IDistribution.sol +2 -0
  234. package/contracts/instance/module/IPolicy.sol +30 -3
  235. package/contracts/instance/module/ISetup.sol +7 -20
  236. package/contracts/instance/service/ApplicationService.sol +350 -0
  237. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  238. package/contracts/instance/service/BundleService.sol +84 -42
  239. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  240. package/contracts/instance/service/ClaimService.sol +151 -0
  241. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  242. package/contracts/instance/service/DistributionService.sol +393 -46
  243. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +30 -12
  246. package/contracts/instance/service/IClaimService.sol +61 -0
  247. package/contracts/instance/service/IDistributionService.sol +86 -0
  248. package/contracts/instance/service/IPolicyService.sol +27 -49
  249. package/contracts/instance/service/IPoolService.sol +17 -2
  250. package/contracts/instance/service/PolicyService.sol +149 -285
  251. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  252. package/contracts/instance/service/PoolService.sol +136 -61
  253. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  254. package/contracts/instance/service/ProductService.sol +62 -34
  255. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  256. package/contracts/registry/ChainNft.sol +8 -0
  257. package/contracts/registry/IRegistry.sol +18 -8
  258. package/contracts/registry/IRegistryService.sol +19 -10
  259. package/contracts/registry/ITransferInterceptor.sol +1 -0
  260. package/contracts/registry/Registry.sol +142 -71
  261. package/contracts/registry/RegistryAccessManager.sol +31 -25
  262. package/contracts/registry/RegistryService.sol +94 -130
  263. package/contracts/registry/RegistryServiceManager.sol +13 -13
  264. package/contracts/registry/ReleaseManager.sol +94 -120
  265. package/contracts/registry/TokenRegistry.sol +19 -13
  266. package/contracts/shared/ERC165.sol +14 -12
  267. package/contracts/shared/INftOwnable.sol +11 -10
  268. package/contracts/shared/IPolicyHolder.sol +26 -0
  269. package/contracts/shared/IRegisterable.sol +4 -6
  270. package/contracts/shared/IRegistryLinked.sol +12 -0
  271. package/contracts/shared/IService.sol +2 -0
  272. package/contracts/shared/IVersionable.sol +4 -47
  273. package/contracts/shared/NftOwnable.sol +66 -80
  274. package/contracts/shared/PolicyHolder.sol +81 -0
  275. package/contracts/shared/ProxyManager.sol +100 -25
  276. package/contracts/shared/Registerable.sol +16 -32
  277. package/contracts/shared/RegistryLinked.sol +48 -0
  278. package/contracts/shared/Service.sol +19 -19
  279. package/contracts/shared/TokenHandler.sol +11 -5
  280. package/contracts/shared/Versionable.sol +4 -92
  281. package/contracts/test/TestRegisterable.sol +1 -1
  282. package/contracts/test/TestService.sol +1 -1
  283. package/contracts/types/Blocknumber.sol +1 -0
  284. package/contracts/types/ClaimId.sol +52 -0
  285. package/contracts/types/DistributorType.sol +2 -2
  286. package/contracts/types/Fee.sol +1 -0
  287. package/contracts/types/NftId.sol +8 -0
  288. package/contracts/types/ObjectType.sol +10 -5
  289. package/contracts/types/PayoutId.sol +54 -0
  290. package/contracts/types/Referral.sol +4 -0
  291. package/contracts/types/RoleId.sol +18 -11
  292. package/contracts/types/Seconds.sol +54 -0
  293. package/contracts/types/StateId.sol +1 -0
  294. package/contracts/types/Timestamp.sol +13 -13
  295. package/contracts/types/UFixed.sol +1 -0
  296. package/contracts/types/Version.sol +1 -0
  297. package/package.json +3 -3
  298. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  299. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  306. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  308. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  310. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  312. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  314. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  316. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  318. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  320. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  322. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  325. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  327. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  329. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  331. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  335. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  337. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  339. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  340. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  341. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  342. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  343. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  344. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  345. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  346. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  348. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  349. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  350. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  351. package/contracts/components/BaseComponent.sol +0 -159
  352. package/contracts/components/IBaseComponent.sol +0 -34
  353. package/contracts/experiment/cloning/Cloner.sol +0 -47
  354. package/contracts/experiment/errors/Require.sol +0 -38
  355. package/contracts/experiment/errors/Revert.sol +0 -44
  356. package/contracts/experiment/inheritance/A.sol +0 -53
  357. package/contracts/experiment/inheritance/B.sol +0 -28
  358. package/contracts/experiment/inheritance/C.sol +0 -34
  359. package/contracts/experiment/inheritance/IA.sol +0 -13
  360. package/contracts/experiment/inheritance/IB.sol +0 -10
  361. package/contracts/experiment/inheritance/IC.sol +0 -12
  362. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  363. package/contracts/experiment/statemachine/ISM.sol +0 -25
  364. package/contracts/experiment/statemachine/SM.sol +0 -57
  365. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  366. package/contracts/experiment/types/TypeA.sol +0 -47
  367. package/contracts/experiment/types/TypeB.sol +0 -29
  368. package/contracts/instance/IInstanceBase.sol +0 -26
  369. package/contracts/instance/InstanceBase.sol +0 -41
  370. package/contracts/instance/base/ComponentServiceBase.sol +0 -76
  371. package/contracts/instance/base/IInstanceBase.sol +0 -23
  372. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  373. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  374. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,134 +1,120 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {INftOwnable} from "./INftOwnable.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {NftId, zeroNftId} from "../types/NftId.sol";
7
-
8
- contract NftOwnable is INftOwnable {
4
+ // import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
9
5
 
10
- IRegistry internal _registry;
11
- NftId private _nftId;
12
- address private _initialOwner;
6
+ import {ERC165} from "./ERC165.sol";
7
+ import {INftOwnable} from "./INftOwnable.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+ import {RegistryLinked} from "./RegistryLinked.sol";
10
+
11
+ contract NftOwnable is
12
+ ERC165,
13
+ RegistryLinked,
14
+ INftOwnable
15
+ {
16
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.NftOwnable")) - 1)) & ~bytes32(uint256(0xff));
17
+ bytes32 public constant NFT_OWNABLE_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
18
+
19
+ struct NftOwnableStorage {
20
+ NftId _nftId;
21
+ address _initialOwner;
22
+ }
13
23
 
14
24
  /// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
15
25
  modifier onlyOwner() {
16
26
  if (msg.sender != getOwner()) {
17
- revert ErrorNotOwner(msg.sender);
27
+ revert ErrorNftOwnableNotOwner(msg.sender);
18
28
  }
19
29
  _;
20
30
  }
21
31
 
22
- constructor() {
23
- _initialOwner = msg.sender;
32
+
33
+ /// @dev initialization for upgradable contracts
34
+ // used in _initializeRegisterable
35
+ function initializeNftOwnable(
36
+ address initialOwner,
37
+ address registryAddress
38
+ )
39
+ public
40
+ virtual
41
+ onlyInitializing()
42
+ {
43
+ initializeRegistryLinked(registryAddress);
44
+ initializeERC165();
45
+
46
+ if(initialOwner == address(0)) {
47
+ revert ErrorNftOwnableInitialOwnerZero();
48
+ }
49
+
50
+ _getNftOwnableStorage()._initialOwner = initialOwner;
24
51
  }
25
52
 
53
+
26
54
  /// @dev links this contract to nft after registration
27
55
  // needs to be done once per registered contract and
28
56
  // reduces registry calls to check ownership
29
57
  // does not need any protection as function can only do the "right thing"
30
- function linkToRegisteredNftId() public {
31
- if (_nftId.gtz()) {
32
- revert ErrorAlreadyLinked(address(_registry), _nftId);
33
- }
58
+ function linkToRegisteredNftId()
59
+ public
60
+ virtual
61
+ {
62
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
34
63
 
35
- if (address(_registry) == address(0)) {
36
- revert ErrorRegistryNotInitialized();
64
+ if ($._nftId.gtz()) {
65
+ revert ErrorNftOwnableAlreadyLinked($._nftId);
37
66
  }
38
67
 
39
68
  address contractAddress = address(this);
40
69
 
41
- if (!_registry.isRegistered(contractAddress)) {
42
- revert ErrorContractNotRegistered(contractAddress);
70
+ if (!getRegistry().isRegistered(contractAddress)) {
71
+ revert ErrorNftOwnableContractNotRegistered(contractAddress);
43
72
  }
44
73
 
45
- _nftId = _registry.getNftId(contractAddress);
46
- }
47
-
48
-
49
- function getRegistry() public view virtual override returns (IRegistry) {
50
- return _registry;
74
+ $._nftId = getRegistry().getNftId(contractAddress);
51
75
  }
52
76
 
53
-
54
77
  function getNftId() public view virtual override returns (NftId) {
55
- return _nftId;
78
+ return _getNftOwnableStorage()._nftId;
56
79
  }
57
80
 
58
-
59
81
  function getOwner() public view virtual override returns (address) {
60
- if (_nftId.gtz()) {
61
- return _registry.ownerOf(_nftId);
62
- }
63
-
64
- return _initialOwner;
65
- }
82
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
66
83
 
84
+ if ($._nftId.gtz()) {
85
+ return getRegistry().ownerOf($._nftId);
86
+ }
67
87
 
68
- /// @dev initialization for upgradable contracts
69
- // used in _initializeRegisterable
70
- function _initializeNftOwnable(
71
- address initialOwner,
72
- address registryAddress
73
- )
74
- internal
75
- virtual
76
- {
77
- require(initialOwner > address(0), "NftOwnable: initial owner is 0");
78
- _initialOwner = initialOwner;
79
- _setRegistry(registryAddress);
88
+ return $._initialOwner;
80
89
  }
81
90
 
82
-
83
91
  /// @dev used in constructor of registry service manager
84
92
  // links ownership of registry service manager ot nft owner of registry service
85
93
  function _linkToNftOwnable(
86
- address registryAddress,
87
94
  address nftOwnableAddress
88
95
  )
89
96
  internal
90
- onlyOwner()
91
97
  returns (NftId)
92
98
  {
93
- if (_nftId.gtz()) {
94
- revert ErrorAlreadyLinked(address(_registry), _nftId);
95
- }
96
-
97
- _setRegistry(registryAddress);
99
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
98
100
 
99
- if (!_registry.isRegistered(nftOwnableAddress)) {
100
- revert ErrorContractNotRegistered(nftOwnableAddress);
101
+ if ($._nftId.gtz()) {
102
+ revert ErrorNftOwnableAlreadyLinked($._nftId);
101
103
  }
102
104
 
103
- _nftId = _registry.getNftId(nftOwnableAddress);
104
-
105
- return _nftId;
106
- }
107
-
108
-
109
- function _setRegistry(address registryAddress)
110
- private
111
- {
112
- if (address(_registry) != address(0)) {
113
- revert ErrorRegistryAlreadyInitialized(address(_registry));
105
+ if (!getRegistry().isRegistered(nftOwnableAddress)) {
106
+ revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
114
107
  }
115
108
 
116
- if (registryAddress == address(0)) {
117
- revert ErrorRegistryAddressZero();
118
- }
109
+ $._nftId = getRegistry().getNftId(nftOwnableAddress);
119
110
 
120
- if (registryAddress.code.length == 0) {
121
- revert ErrorNotRegistry(registryAddress);
122
- }
111
+ return $._nftId;
112
+ }
123
113
 
124
- _registry = IRegistry(registryAddress);
125
114
 
126
- try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
127
- if (!isRegistry) {
128
- revert ErrorNotRegistry(registryAddress);
129
- }
130
- } catch {
131
- revert ErrorNotRegistry(registryAddress);
115
+ function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
116
+ assembly {
117
+ $.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
132
118
  }
133
119
  }
134
120
  }
@@ -0,0 +1,81 @@
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
+ import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
6
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
7
+
8
+ import {ERC165} from "./ERC165.sol";
9
+ import {IPolicyHolder} from "./IPolicyHolder.sol";
10
+ import {IRegistry} from "../registry/IRegistry.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+ import {NumberId} from "../types/NumberId.sol";
13
+ import {RegistryLinked} from "./RegistryLinked.sol";
14
+
15
+ /// @dev template implementation for IPolicyHolder
16
+ contract PolicyHolder is
17
+ ERC165,
18
+ RegistryLinked,
19
+ IPolicyHolder
20
+ {
21
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.PolicyHolder")) - 1)) & ~bytes32(uint256(0xff));
22
+ // TODO fix address
23
+ bytes32 public constant POLICY_HOLDER_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
24
+
25
+ // TODO uncomment/fix/refactor
26
+ struct PolicyHolderStorage {
27
+ // mapping(NftId policyId => mapping(NumberId claimId => address beneficiary)) private _claimBeneficiary;
28
+ // mapping(NftId policyId => address beneficiary) private _beneficiary;
29
+ bool dummy;
30
+ }
31
+
32
+ function initializePolicyHolder(
33
+ address registryAddress
34
+ )
35
+ public
36
+ virtual
37
+ onlyInitializing()
38
+ {
39
+ initializeRegistryLinked(registryAddress);
40
+ }
41
+
42
+ /// @dev empty default implementation
43
+ function policyCreatedCallback(NftId policyNftId) external virtual { }
44
+
45
+ /// @dev empty default implementation
46
+ function payoutExecutedCallback(NftId policyNftId, NumberId payoutId, address beneficiary, uint256 amount) external virtual { }
47
+
48
+ /// @dev determines beneficiary address that will be used in payouts targeting this contract
49
+ /// returned address will override GIF default where the policy nft holder is treated as beneficiary
50
+ function getBeneficiary(NftId policyId, NumberId claimId) external virtual view returns (address beneficiary) {
51
+ // TODO add implementation
52
+ }
53
+
54
+ //--- IERC165 functions ---------------//
55
+ function onERC721Received(
56
+ address, // operator
57
+ address, // from
58
+ uint256, // tokenId
59
+ bytes calldata // data
60
+ )
61
+ external
62
+ virtual
63
+ returns (bytes4)
64
+ {
65
+ return IERC721Receiver.onERC721Received.selector;
66
+ }
67
+
68
+ function _setBeneficiary(address beneficiary) internal {
69
+
70
+ }
71
+
72
+ function _setBeneficiary(NftId policyId, address beneficiary) internal {
73
+
74
+ }
75
+
76
+ function _getPolicyHolderStorage() private pure returns (PolicyHolderStorage storage $) {
77
+ assembly {
78
+ $.slot := POLICY_HOLDER_STORAGE_LOCATION_V1
79
+ }
80
+ }
81
+ }
@@ -1,34 +1,57 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
- import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
6
4
  import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
7
5
 
6
+ import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
8
7
  import {IVersionable} from "./IVersionable.sol";
9
8
  import {NftOwnable} from "./NftOwnable.sol";
9
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
10
+ import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
11
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
10
12
  import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
13
+ import {Version, VersionLib} from "../types/Version.sol";
11
14
 
12
15
  /// @dev manages proxy deployments for upgradable contracs of type IVersionable
13
16
  contract ProxyManager is
14
17
  NftOwnable
15
18
  {
16
19
 
17
- event LogProxyDeployed(address indexed proxy, address initialImplementation);
18
- event LogProxyDeployedWithSalt(address indexed proxy, address initialImplementation);
19
- event LogProxyUpgraded(address indexed proxy, address upgradedImplementation);
20
+ struct VersionInfo {
21
+ Version version;
22
+ address implementation;
23
+ address activatedBy;
24
+ Timestamp activatedAt;
25
+ Blocknumber activatedIn;
26
+ }
27
+
28
+ event LogProxyManagerVersionableDeployed(address indexed proxy, address initialImplementation);
29
+ event LogProxyManagerVersionableUpgraded(address indexed proxy, address upgradedImplementation);
30
+
31
+ error ErrorProxyManagerAlreadyDeployed();
32
+ error ErrorProxyManagerNotYetDeployed();
20
33
 
21
- error ErrorAlreadyDeployed();
22
- error ErrorAlreadyDeployedWithSalt();
23
- error ErrorNotYetDeployed();
34
+ error ErrorProxyManagerZeroVersion();
35
+ error ErrorProxyManagerNextVersionNotIncreasing(Version nextVersion);
24
36
 
25
37
  UpgradableProxyWithAdmin internal _proxy;
26
- bool internal _isDeployed;
38
+
39
+ // state to keep version history
40
+ mapping(Version version => VersionInfo info) _versionHistory;
41
+ Version [] _versions;
27
42
 
28
43
  /// @dev only used to capture proxy owner
29
- constructor()
30
- NftOwnable()
31
- { }
44
+ constructor(address registry)
45
+ {
46
+ initializeProxyManager(registry);
47
+ }
48
+
49
+ function initializeProxyManager(address registry)
50
+ public
51
+ initializer()
52
+ {
53
+ initializeNftOwnable(msg.sender, registry);
54
+ }
32
55
 
33
56
  /// @dev deploy initial contract
34
57
  function deploy(address initialImplementation, bytes memory initializationData)
@@ -37,22 +60,23 @@ contract ProxyManager is
37
60
  onlyOwner()
38
61
  returns (IVersionable versionable)
39
62
  {
40
- if (_isDeployed) { revert ErrorAlreadyDeployed(); }
41
- _isDeployed = true;
63
+ if (_versions.length > 0) {
64
+ revert ErrorProxyManagerAlreadyDeployed();
65
+ }
42
66
 
43
67
  address currentProxyOwner = getOwner(); // used by implementation
44
68
  address initialProxyAdminOwner = address(this); // used by proxy
45
- bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
46
69
 
47
70
  _proxy = new UpgradableProxyWithAdmin(
48
71
  initialImplementation,
49
72
  initialProxyAdminOwner,
50
- data
73
+ getDeployData(currentProxyOwner, initializationData)
51
74
  );
52
75
 
53
76
  versionable = IVersionable(address(_proxy));
77
+ _updateVersionHistory(versionable.getVersion(), initialImplementation, currentProxyOwner);
54
78
 
55
- emit LogProxyDeployed(address(_proxy), initialImplementation);
79
+ emit LogProxyManagerVersionableDeployed(address(_proxy), initialImplementation);
56
80
  }
57
81
 
58
82
  /// @dev upgrade existing contract
@@ -62,33 +86,84 @@ contract ProxyManager is
62
86
  onlyOwner()
63
87
  returns (IVersionable versionable)
64
88
  {
65
- if (!_isDeployed) { revert ErrorNotYetDeployed(); }
89
+ if (_versions.length == 0) {
90
+ revert ErrorProxyManagerNotYetDeployed();
91
+ }
66
92
 
67
93
  address currentProxyOwner = getOwner();
68
94
  ProxyAdmin proxyAdmin = getProxy().getProxyAdmin();
69
95
  ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
70
- bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
71
96
 
72
97
  proxyAdmin.upgradeAndCall(
73
98
  proxy,
74
99
  newImplementation,
75
- data);
100
+ getUpgradeData(upgradeData));
76
101
 
77
102
  versionable = IVersionable(address(_proxy));
103
+ _updateVersionHistory(versionable.getVersion(), newImplementation, currentProxyOwner);
78
104
 
79
- emit LogProxyUpgraded(address(_proxy), newImplementation);
105
+ emit LogProxyManagerVersionableUpgraded(address(_proxy), newImplementation);
80
106
 
81
107
  }
82
108
 
83
- function getDeployData(address implementation, address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
84
- return abi.encodeWithSelector(IVersionable.initialize.selector, implementation, proxyOwner, deployData);
109
+ function getDeployData(address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
110
+ return abi.encodeWithSelector(
111
+ IVersionable.initializeVersionable.selector,
112
+ proxyOwner,
113
+ deployData);
85
114
  }
86
115
 
87
- function getUpgradeData(address implementation, address proxyOwner, bytes memory upgradeData) public pure returns (bytes memory data) {
88
- return abi.encodeWithSelector(IVersionable.upgrade.selector, implementation, proxyOwner, upgradeData);
116
+ function getUpgradeData(bytes memory upgradeData) public pure returns (bytes memory data) {
117
+ return abi.encodeWithSelector(
118
+ IVersionable.upgradeVersionable.selector,
119
+ upgradeData);
89
120
  }
90
121
 
91
122
  function getProxy() public returns (UpgradableProxyWithAdmin) {
92
123
  return _proxy;
93
124
  }
125
+
126
+ function getVersion() external view virtual returns(Version) {
127
+ return IVersionable(address(_proxy)).getVersion();
128
+ }
129
+
130
+ function getVersionCount() external view returns(uint256) {
131
+ return _versions.length;
132
+ }
133
+
134
+ function getVersion(uint256 idx) external view returns(Version) {
135
+ return _versions[idx];
136
+ }
137
+
138
+ function getVersionInfo(Version _version) external view returns(VersionInfo memory) {
139
+ return _versionHistory[_version];
140
+ }
141
+
142
+ function _updateVersionHistory(
143
+ Version newVersion,
144
+ address implementation,
145
+ address activatedBy
146
+ )
147
+ private
148
+ {
149
+ if(newVersion == VersionLib.zeroVersion()) {
150
+ revert ErrorProxyManagerZeroVersion();
151
+ }
152
+
153
+ if(_versions.length > 0) {
154
+ if(newVersion.toInt() <= _versions[_versions.length-1].toInt()) {
155
+ revert ErrorProxyManagerNextVersionNotIncreasing(newVersion);
156
+ }
157
+ }
158
+
159
+ // update version history
160
+ _versions.push(newVersion);
161
+ _versionHistory[newVersion] = VersionInfo(
162
+ newVersion,
163
+ implementation,
164
+ activatedBy,
165
+ TimestampLib.blockTimestamp(),
166
+ blockNumber()
167
+ );
168
+ }
94
169
  }
@@ -11,19 +11,13 @@ import {IRegistry} from "../registry/IRegistry.sol";
11
11
  import {IRegisterable} from "./IRegisterable.sol";
12
12
  import {Versionable} from "./Versionable.sol";
13
13
 
14
- import {ERC165} from "./ERC165.sol";
15
-
16
14
  contract Registerable is
17
- ERC165,
18
- Initializable,
19
15
  NftOwnable,
20
16
  IRegisterable
21
17
  {
22
18
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Registerable.sol")) - 1)) & ~bytes32(uint256(0xff));
23
19
  bytes32 public constant REGISTERABLE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
24
20
 
25
- error ErrorRegisterableNotRegistry(address registryAddress);
26
-
27
21
  struct RegisterableStorage {
28
22
  NftId _parentNftId;
29
23
  ObjectType _objectType;
@@ -37,33 +31,27 @@ contract Registerable is
37
31
  }
38
32
  }
39
33
 
40
- function _initializeRegisterable(
34
+ function initializeRegisterable(
41
35
  address registryAddress,
42
36
  NftId parentNftId,
43
37
  ObjectType objectType,
44
38
  bool isInterceptor,
45
39
  address initialOwner,
46
- bytes memory data
40
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
47
41
  )
48
- internal
49
- //onlyInitializing//TODO uncomment when "fully" upgradeable
42
+ public
50
43
  virtual
44
+ onlyInitializing
51
45
  {
52
- _initializeERC165();
53
- _initializeNftOwnable(
46
+ initializeNftOwnable(
54
47
  initialOwner,
55
48
  registryAddress);
56
49
 
57
- // TODO check parentNftId -> registry.isRegistered(parentNftId)
58
- // TODO check object-parent type pair -> registry.isValidTypeCombo() or something...verify with registry that setup will be able to register...
59
-
60
50
  RegisterableStorage storage $ = _getRegisterableStorage();
61
51
  $._parentNftId = parentNftId;
62
52
  $._objectType = objectType;
63
53
  $._isInterceptor = isInterceptor;
64
- $._data = data;
65
-
66
- _registerInterface(type(IRegisterable).interfaceId);
54
+ $._data = registryData;
67
55
  }
68
56
 
69
57
 
@@ -71,20 +59,16 @@ contract Registerable is
71
59
  public
72
60
  view
73
61
  virtual
74
- returns (IRegistry.ObjectInfo memory, bytes memory data)
62
+ returns (IRegistry.ObjectInfo memory info)
75
63
  {
76
- RegisterableStorage storage $ = _getRegisterableStorage();
77
- return (
78
- IRegistry.ObjectInfo(
79
- getNftId(),
80
- $._parentNftId,
81
- $._objectType,
82
- $._isInterceptor,
83
- address(this),
84
- getOwner(),
85
- $._data
86
- ),
87
- bytes("")
88
- );
64
+ RegisterableStorage memory $ = _getRegisterableStorage();
65
+ info = IRegistry.ObjectInfo(
66
+ zeroNftId(),
67
+ $._parentNftId,
68
+ $._objectType,
69
+ $._isInterceptor,
70
+ address(this),
71
+ getOwner(),
72
+ $._data);
89
73
  }
90
74
  }
@@ -0,0 +1,48 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
+ import {IRegistry} from "../registry/IRegistry.sol";
6
+ import {IRegistryLinked} from "./IRegistryLinked.sol";
7
+
8
+ contract RegistryLinked is
9
+ Initializable,
10
+ IRegistryLinked
11
+ {
12
+
13
+ IRegistry private _registry;
14
+
15
+ /// @dev initialization for upgradable contracts
16
+ // used in _initializeRegisterable
17
+ function initializeRegistryLinked(
18
+ address registryAddress
19
+ )
20
+ public
21
+ virtual
22
+ onlyInitializing()
23
+ {
24
+ if (registryAddress.code.length == 0) {
25
+ revert ErrorNotRegistry(registryAddress);
26
+ }
27
+
28
+ _registry = IRegistry(registryAddress);
29
+
30
+ try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
31
+ if (!isRegistry) {
32
+ revert ErrorNotRegistry(registryAddress);
33
+ }
34
+ } catch {
35
+ revert ErrorNotRegistry(registryAddress);
36
+ }
37
+ }
38
+
39
+
40
+ function getRegistry() public view returns (IRegistry) {
41
+ return _registry;
42
+ }
43
+
44
+
45
+ function getRegistryAddress() public view returns (address) {
46
+ return address(_registry);
47
+ }
48
+ }
@@ -3,25 +3,28 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {ObjectType, SERVICE} from "../types/ObjectType.sol";
5
5
  import {NftId, zeroNftId} from "../types/NftId.sol";
6
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
6
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
7
7
 
8
8
  import {Versionable} from "./Versionable.sol";
9
9
  import {IService} from "./IService.sol";
10
10
  import {IVersionable} from "./IVersionable.sol";
11
- import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
11
+ import {Versionable} from "./Versionable.sol";
12
+ import {Registerable} from "./Registerable.sol";
12
13
 
13
14
  import {IRegistry} from "../registry/IRegistry.sol";
14
15
 
15
16
 
16
17
  /// @dev service base contract
17
18
  abstract contract Service is
18
- RegisterableUpgradable,
19
+ Registerable,
20
+ Versionable,
19
21
  IService
20
22
  {
21
23
  function getDomain() public pure virtual override returns(ObjectType);
22
24
 
25
+ // version major version MUST be consistent with major version of getVersion()
23
26
  function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
24
- return getVersion().toMajorPart();
27
+ return VersionPartLib.toVersionPart(3);
25
28
  }
26
29
 
27
30
  // from Versionable
@@ -34,25 +37,22 @@ abstract contract Service is
34
37
  return VersionLib.toVersion(3,0,0);
35
38
  }
36
39
 
37
- function _initializeService(
40
+ function initializeService(
38
41
  address registry,
39
42
  address initialOwner
40
43
  )
41
- internal
44
+ public
42
45
  virtual
43
- //onlyInitializing //TODO uncomment when "fully" upgradeable
46
+ onlyInitializing()
44
47
  {
45
- // service must provide its name and version upon registration
46
- bytes memory data = abi.encode(getDomain(), getMajorVersion());
47
- NftId registryNftId = _getRegistryNftId(registry);
48
- bool isInterceptor = false;
49
-
50
- _initializeRegisterable(registry, registryNftId, SERVICE(), isInterceptor, initialOwner, data);
51
- _registerInterface(type(IService).interfaceId);
52
- }
53
-
54
- // this is just a conveniene function, actual validation will be done upon registration
55
- function _getRegistryNftId(address registryAddress) internal view returns (NftId) {
56
- return IRegistry(registryAddress).getNftId(registryAddress);
48
+ initializeRegisterable(
49
+ registry,
50
+ IRegistry(registry).getNftId(),
51
+ SERVICE(),
52
+ false, // is interceptor
53
+ initialOwner,
54
+ ""); // data
55
+
56
+ registerInterface(type(IService).interfaceId);
57
57
  }
58
58
  }