@etherisc/gif-next 0.0.2-e5a2253-213 → 0.0.2-e69072e-892

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 (337) 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/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +340 -59
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +804 -211
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +95 -56
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +699 -22
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +814 -60
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +519 -4
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +896 -298
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +442 -129
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  21. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +910 -289
  23. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +110 -171
  25. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  26. package/artifacts/contracts/instance/Instance.sol/Instance.json +874 -557
  27. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +52 -115
  29. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +101 -168
  31. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +346 -263
  33. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +319 -86
  35. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  37. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  38. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +119 -189
  39. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  43. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +13 -13
  47. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  53. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  54. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  55. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  56. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  57. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +258 -283
  59. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +305 -80
  61. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  62. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  63. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  64. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  65. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +983 -221
  67. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +441 -72
  69. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  70. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  71. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +130 -217
  73. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IClaimService.sol/IClaimService.json} +146 -179
  75. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +552 -140
  77. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +40 -292
  79. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +22 -174
  81. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +22 -174
  83. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +161 -407
  85. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +311 -114
  87. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +139 -237
  89. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +302 -77
  91. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +139 -237
  93. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +302 -77
  95. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  96. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  97. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -5
  98. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +112 -198
  100. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  101. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registry.json +112 -27
  103. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  104. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
  105. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +216 -234
  107. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  109. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +70 -53
  111. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
  113. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  114. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  115. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  116. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  117. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  118. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  119. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  122. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  123. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  124. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IService.sol/IService.json +22 -174
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  130. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  131. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  132. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  133. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  134. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  136. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  137. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  138. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Service.sol/Service.json +114 -157
  140. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  141. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  142. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  145. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  148. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  150. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestService.sol/TestService.json +135 -214
  152. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  156. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  157. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  158. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  161. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  162. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  164. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  170. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  171. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  174. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  176. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  178. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  180. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  182. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  184. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  187. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  191. package/contracts/components/Component.sol +221 -0
  192. package/contracts/components/Distribution.sol +206 -67
  193. package/contracts/components/IComponent.sol +68 -0
  194. package/contracts/components/IDistributionComponent.sol +44 -9
  195. package/contracts/components/IPoolComponent.sol +124 -39
  196. package/contracts/components/IProductComponent.sol +8 -3
  197. package/contracts/components/Pool.sol +284 -164
  198. package/contracts/components/Product.sol +110 -116
  199. package/contracts/instance/BundleManager.sol +8 -12
  200. package/contracts/instance/IInstance.sol +41 -9
  201. package/contracts/instance/IInstanceService.sol +20 -1
  202. package/contracts/instance/Instance.sol +90 -61
  203. package/contracts/instance/InstanceAccessManager.sol +18 -24
  204. package/contracts/instance/InstanceReader.sol +3 -25
  205. package/contracts/instance/InstanceService.sol +195 -50
  206. package/contracts/instance/InstanceServiceManager.sol +1 -1
  207. package/contracts/instance/ObjectManager.sol +7 -24
  208. package/contracts/instance/base/{ComponentServiceBase.sol → ComponentService.sol} +9 -13
  209. package/contracts/instance/module/IAccess.sol +3 -4
  210. package/contracts/instance/module/IBundle.sol +2 -1
  211. package/contracts/instance/module/IDistribution.sol +2 -0
  212. package/contracts/instance/module/IPolicy.sol +30 -3
  213. package/contracts/instance/module/ISetup.sol +10 -10
  214. package/contracts/instance/service/ApplicationService.sol +350 -0
  215. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  216. package/contracts/instance/service/BundleService.sol +17 -12
  217. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  218. package/contracts/instance/service/ClaimService.sol +151 -0
  219. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  220. package/contracts/instance/service/DistributionService.sol +312 -33
  221. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  222. package/contracts/instance/service/IApplicationService.sol +82 -0
  223. package/contracts/instance/service/IBundleService.sol +14 -3
  224. package/contracts/instance/service/IClaimService.sol +61 -0
  225. package/contracts/instance/service/IDistributionService.sol +74 -0
  226. package/contracts/instance/service/IPolicyService.sol +26 -50
  227. package/contracts/instance/service/PolicyService.sol +127 -262
  228. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  229. package/contracts/instance/service/PoolService.sol +12 -45
  230. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  231. package/contracts/instance/service/ProductService.sol +50 -26
  232. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  233. package/contracts/registry/IRegistry.sol +16 -8
  234. package/contracts/registry/IRegistryService.sol +19 -10
  235. package/contracts/registry/Registry.sol +120 -52
  236. package/contracts/registry/RegistryAccessManager.sol +31 -25
  237. package/contracts/registry/RegistryService.sol +91 -128
  238. package/contracts/registry/RegistryServiceManager.sol +13 -13
  239. package/contracts/registry/ReleaseManager.sol +86 -106
  240. package/contracts/registry/TokenRegistry.sol +19 -13
  241. package/contracts/shared/ERC165.sol +14 -12
  242. package/contracts/shared/INftOwnable.sol +11 -10
  243. package/contracts/shared/IPolicyHolder.sol +26 -0
  244. package/contracts/shared/IRegisterable.sol +4 -4
  245. package/contracts/shared/IRegistryLinked.sol +12 -0
  246. package/contracts/shared/IService.sol +2 -0
  247. package/contracts/shared/IVersionable.sol +4 -47
  248. package/contracts/shared/NftOwnable.sol +66 -80
  249. package/contracts/shared/PolicyHolder.sol +81 -0
  250. package/contracts/shared/ProxyManager.sol +100 -25
  251. package/contracts/shared/Registerable.sol +16 -32
  252. package/contracts/shared/RegistryLinked.sol +48 -0
  253. package/contracts/shared/Service.sol +19 -19
  254. package/contracts/shared/Versionable.sol +4 -92
  255. package/contracts/test/TestRegisterable.sol +1 -1
  256. package/contracts/test/TestService.sol +1 -1
  257. package/contracts/types/ClaimId.sol +52 -0
  258. package/contracts/types/DistributorType.sol +2 -2
  259. package/contracts/types/ObjectType.sol +9 -5
  260. package/contracts/types/PayoutId.sol +54 -0
  261. package/contracts/types/RoleId.sol +12 -7
  262. package/contracts/types/Seconds.sol +54 -0
  263. package/contracts/types/Timestamp.sol +12 -13
  264. package/package.json +3 -3
  265. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  266. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  267. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  268. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  269. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  270. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  271. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  272. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  273. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  274. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  275. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  276. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  277. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  278. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  279. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  280. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  281. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  282. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  283. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  284. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  285. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  286. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  287. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  288. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  289. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  290. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  291. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  292. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  293. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  294. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  295. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  296. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  297. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  298. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  299. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  300. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  302. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  304. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  306. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  307. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  308. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  309. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  310. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  311. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  312. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  313. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  314. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -100
  315. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  316. package/contracts/components/BaseComponent.sol +0 -168
  317. package/contracts/components/IBaseComponent.sol +0 -35
  318. package/contracts/experiment/cloning/Cloner.sol +0 -47
  319. package/contracts/experiment/errors/Require.sol +0 -38
  320. package/contracts/experiment/errors/Revert.sol +0 -44
  321. package/contracts/experiment/inheritance/A.sol +0 -53
  322. package/contracts/experiment/inheritance/B.sol +0 -28
  323. package/contracts/experiment/inheritance/C.sol +0 -34
  324. package/contracts/experiment/inheritance/IA.sol +0 -13
  325. package/contracts/experiment/inheritance/IB.sol +0 -10
  326. package/contracts/experiment/inheritance/IC.sol +0 -12
  327. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  328. package/contracts/experiment/statemachine/ISM.sol +0 -25
  329. package/contracts/experiment/statemachine/SM.sol +0 -57
  330. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  331. package/contracts/experiment/types/TypeA.sol +0 -47
  332. package/contracts/experiment/types/TypeB.sol +0 -29
  333. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  334. package/contracts/instance/IInstanceBase.sol +0 -25
  335. package/contracts/instance/InstanceBase.sol +0 -39
  336. package/contracts/instance/base/IInstanceBase.sol +0 -21
  337. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -21,7 +21,7 @@ contract ReleaseManager is AccessManaged
21
21
  {
22
22
  using ObjectTypeLib for ObjectType;
23
23
 
24
- event LogReleaseCreation(VersionPart version, IService registryService);
24
+ event LogReleaseCreation(VersionPart version);
25
25
  event LogReleaseActivation(VersionPart version);
26
26
 
27
27
  // createNextRelease
@@ -32,8 +32,8 @@ contract ReleaseManager is AccessManaged
32
32
  error NotService();
33
33
 
34
34
  // activateNextRelease
35
- //error ReleaseNotCreated();
36
- //error ReleaseRegistrationNotFinished();
35
+ error ReleaseNotCreated();
36
+ error ReleaseRegistrationNotFinished();
37
37
 
38
38
  // _getAndVerifyContractInfo
39
39
  error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
@@ -41,7 +41,7 @@ contract ReleaseManager is AccessManaged
41
41
  error SelfRegistration();
42
42
  error RegisterableOwnerIsRegistered();
43
43
 
44
- // _verifyServiceInfo
44
+ // _verifyService
45
45
  error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
46
46
  error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
47
47
 
@@ -55,17 +55,20 @@ contract ReleaseManager is AccessManaged
55
55
  RegistryAccessManager private immutable _accessManager;
56
56
  IRegistry private immutable _registry;
57
57
 
58
+ VersionPart immutable _initial;// first active version
58
59
  VersionPart _latest;// latest active version
59
- VersionPart immutable _initial;// first active version
60
+ VersionPart _next;// version to create and activate
60
61
 
61
62
  mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
62
63
 
63
- mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
64
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
64
65
 
65
66
  uint _awaitingRegistration; // "services left to register" counter
66
67
 
67
68
  mapping(address registryService => bool isActive) _active;
68
69
 
70
+ mapping(VersionPart version => bool isValid) _valid; // TODO refactor to use _active only
71
+
69
72
  constructor(
70
73
  RegistryAccessManager accessManager,
71
74
  VersionPart initialVersion)
@@ -76,20 +79,63 @@ contract ReleaseManager is AccessManaged
76
79
  _accessManager = accessManager;
77
80
 
78
81
  _initial = initialVersion;
82
+ _next = initialVersion;
79
83
 
80
84
  _registry = new Registry();
81
85
  }
82
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
+
83
127
  // TODO deploy proxy and initialize with given implementation instead of using given proxy?
84
128
  // IMPORTANT: MUST never be possible to create with access/release manager, token registry
85
- function createNextRelease(IRegistryService service)
129
+ // callable once per release after release creation, can not register regular services while registry service is not registered
130
+ function registerRegistryService(IRegistryService service)
86
131
  external
87
- restricted // GIF_ADMIN_ROLE
132
+ restricted // GIF_MANAGER_ROLE
88
133
  returns(NftId nftId)
89
134
  {
90
135
  if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
91
136
  revert NotRegistryService();
92
137
  }
138
+
93
139
  // TODO unreliable! MUST guarantee the same authority -> how?
94
140
  address serviceAuthority = service.authority();
95
141
  if(serviceAuthority != authority()) {
@@ -98,25 +144,17 @@ contract ReleaseManager is AccessManaged
98
144
  serviceAuthority);
99
145
  }
100
146
 
101
- (
102
- IRegistry.ObjectInfo memory info,
103
- bytes memory data
104
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
147
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
105
148
 
106
- VersionPart version = getNextVersion();
149
+ VersionPart version = _next;
107
150
  ObjectType domain = REGISTRY();
108
- _verifyServiceInfo(info, version, domain);
109
-
110
- _createRelease(data);
111
-
112
- //setTargetClosed(service, true);
151
+ _verifyService(service, version, domain);
152
+ _createRelease(service.getFunctionConfigs());
113
153
 
114
154
  nftId = _registry.registerService(info, version, domain);
115
155
 
116
156
  // external call
117
157
  service.linkToRegisteredNftId();
118
-
119
- emit LogReleaseCreation(version, service);
120
158
  }
121
159
 
122
160
  // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
@@ -130,67 +168,29 @@ contract ReleaseManager is AccessManaged
130
168
  revert NotService();
131
169
  }
132
170
 
133
- (
134
- IRegistry.ObjectInfo memory info,
135
- //bytes memory data
136
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
137
-
171
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
138
172
  VersionPart version = getNextVersion();
139
173
  ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
140
- _verifyServiceInfo(info, version, domain);
174
+ _verifyService(service, version, domain);
141
175
 
142
176
  // setup and grant unique role if service does registrations
177
+ bytes4[] memory selectors = _selectors[version][domain];
143
178
  address registryService = _registry.getServiceAddress(REGISTRY(), version);
144
- bytes4[] memory selector = new bytes4[](1);
145
- selector[0] = _selector[version][domain];
146
- if(selector[0] != 0) {
179
+ if(selectors.length > 0) {
147
180
  _accessManager.setAndGrantUniqueRole(
148
181
  address(service),
149
182
  registryService,
150
- selector);
183
+ selectors);
151
184
  }
152
-
185
+
153
186
  _awaitingRegistration--;
154
187
 
155
- // activate release
156
- if(_awaitingRegistration == 0) {
157
- _latest = version;
158
- _active[registryService] = true;
159
-
160
- emit LogReleaseActivation(version);
161
- }
162
-
163
188
  nftId = _registry.registerService(info, version, domain);
164
189
 
165
190
  // external call
166
191
  service.linkToRegisteredNftId();
167
192
  }
168
193
 
169
- /*function activateNextRelease()
170
- external
171
- restricted // GIF_ADMIN_ROLE
172
- {
173
- VersionPart version = getNextVersion();
174
- address service = _registry.getServiceAddress(REGISTRY(), version);
175
-
176
- // release was created
177
- if(service == address(0)) {
178
- revert ReleaseNotCreated();
179
- }
180
-
181
- // release fully deployed
182
- if(_awaitingRegistration > 0) {
183
- revert ReleaseRegistrationNotFinished();
184
- }
185
-
186
- //setTargetClosed(service, false);
187
-
188
- _latest = version;
189
- _active[service] = true;
190
-
191
- LogReleaseActivation(version);
192
- }*/
193
-
194
194
  //--- view functions ----------------------------------------------------//
195
195
 
196
196
  function isActiveRegistryService(address service) external view returns(bool)
@@ -198,6 +198,11 @@ contract ReleaseManager is AccessManaged
198
198
  return _active[service];
199
199
  }
200
200
 
201
+ function isValidRelease(VersionPart version) external view returns(bool)
202
+ {
203
+ return _valid[version];
204
+ }
205
+
201
206
  function getRegistry() external view returns(address)
202
207
  {
203
208
  return (address(_registry));
@@ -210,11 +215,7 @@ contract ReleaseManager is AccessManaged
210
215
 
211
216
  function getNextVersion() public view returns(VersionPart)
212
217
  {
213
- uint256 latest = _latest.toInt();
214
-
215
- return latest == 0 ?
216
- _initial : // no active releases yet
217
- VersionPartLib.toVersionPart(latest + 1);
218
+ return _next;
218
219
  }
219
220
 
220
221
  function getLatestVersion() external view returns(VersionPart) {
@@ -233,13 +234,12 @@ contract ReleaseManager is AccessManaged
233
234
  address expectedOwner // assume always valid, can not be 0
234
235
  )
235
236
  internal
236
- view
237
+ // view
237
238
  returns(
238
- IRegistry.ObjectInfo memory info,
239
- bytes memory data
239
+ IRegistry.ObjectInfo memory info
240
240
  )
241
241
  {
242
- (info, data) = service.getInitialInfo();
242
+ info = service.getInitialInfo();
243
243
  info.objectAddress = address(service);
244
244
  info.isInterceptor = false; // service is never interceptor, at least now
245
245
 
@@ -256,27 +256,14 @@ contract ReleaseManager is AccessManaged
256
256
  if(owner == address(service)) {
257
257
  revert SelfRegistration();
258
258
  }
259
-
260
- /*if(owner == address(0)) { // never 0
261
- revert();// RegisterableOwnerIsZero();
262
- }*/
263
259
 
264
260
  if(_registry.isRegistered(owner)) {
265
261
  revert RegisterableOwnerIsRegistered();
266
262
  }
267
-
268
- /*NftId parentNftId = info.parentNftId;
269
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
270
-
271
- if(parentInfo.objectType != parentType) { // parent registration + type
272
- revert InvalidParent(parentNftId);
273
- }*/
274
-
275
- return(info, data);
276
263
  }
277
264
 
278
- function _verifyServiceInfo(
279
- IRegistry.ObjectInfo memory info,
265
+ function _verifyService(
266
+ IService service,
280
267
  VersionPart expectedVersion,
281
268
  ObjectType expectedDomain
282
269
  )
@@ -284,30 +271,22 @@ contract ReleaseManager is AccessManaged
284
271
  view
285
272
  returns(ObjectType)
286
273
  {
287
- (
288
- ObjectType domain,
289
- VersionPart version
290
- ) = abi.decode(info.data, (ObjectType, VersionPart));
291
-
292
- if(version != expectedVersion) {
293
- revert UnexpectedServiceVersion(expectedVersion, version);
274
+ if(service.getMajorVersion() != expectedVersion) {
275
+ revert UnexpectedServiceVersion(expectedVersion, service.getMajorVersion());
294
276
  }
295
277
 
296
- if(expectedDomain.gtz()) {
297
- if(domain != expectedDomain) {
298
- revert UnexpectedServiceDomain(expectedDomain, domain);
299
- }
278
+ if(service.getDomain() != expectedDomain) {
279
+ revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
300
280
  }
301
281
 
302
- return domain;
282
+ return expectedDomain;
303
283
  }
304
284
 
305
285
  // TODO check if registry supports types specified in the config array
306
- function _createRelease(bytes memory configBytes)
286
+ function _createRelease(IRegistryService.FunctionConfig[] memory config)
307
287
  internal
308
288
  {
309
289
  VersionPart version = getNextVersion();
310
- IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
311
290
 
312
291
  if(config.length == 0) {
313
292
  revert ConfigMissing();
@@ -317,20 +296,21 @@ contract ReleaseManager is AccessManaged
317
296
  for(uint idx = 0; idx < config.length; idx++)
318
297
  {
319
298
  ObjectType domain = config[idx].serviceDomain;
320
- bytes4 selector = config[idx].selector;
321
-
322
299
  // not "registry service" / zero domain
323
300
  if(
324
301
  domain == REGISTRY() ||
325
302
  domain.eqz()
326
303
  ) { revert ConfigServiceDomainInvalid(idx, domain); }
327
304
 
305
+ bytes4[] memory selectors = config[idx].selectors;
306
+
307
+ // 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
328
308
  // no overwrite
329
- if(_selector[version][domain] > 0) {
309
+ if(_selectors[version][domain].length > 0) {
330
310
  revert SelectorAlreadyExists(version, domain);
331
311
  }
332
312
 
333
- _selector[version][domain] = selector;
313
+ _selectors[version][domain] = selectors;
334
314
  _release[version].domains.push(domain);
335
315
  }
336
316
  // TODO set when activated?
@@ -26,21 +26,32 @@ contract TokenRegistry is
26
26
  mapping(address token => bool registered) internal _registered;
27
27
  mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
28
28
 
29
- constructor()
30
- NftOwnable()
31
- { }
29
+ constructor(
30
+ address registry
31
+ )
32
+ {
33
+ initialize(registry);
34
+ }
35
+
36
+ function initialize(address registry)
37
+ public
38
+ initializer()
39
+ {
40
+ initializeNftOwnable(msg.sender, registry);
41
+ }
32
42
 
33
43
 
34
44
  /// @dev link ownership of token registry to nft owner of registry service
45
+ // TODO latter registry service will get new release, new address, new nft, TokenRegistry will not catch that -> use AccessManaged only for services
35
46
  function linkToNftOwnable(address registryAddress)
36
47
  external
37
48
  onlyOwner
38
49
  {
39
50
  IRegistry registry = IRegistry(registryAddress);
40
- // TODO use _latest instead of `next version` -> but _latest is 0 before first release activation
41
- address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getMajorVersionMax());
51
+ // TODO use _latest instead of _initial -> but _latest is 0 before first release activation
52
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
42
53
 
43
- _linkToNftOwnable(registryAddress, registryServiceAddress);
54
+ _linkToNftOwnable(registryServiceAddress);
44
55
  }
45
56
 
46
57
  /// @dev token state is informative, registry have no clue about used tokens
@@ -58,7 +69,7 @@ contract TokenRegistry is
58
69
  // verify valid major version
59
70
  // ensure major version increments is one
60
71
  uint256 version = majorVersion.toInt();
61
- if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
72
+ if (!getRegistry().isValidRelease(majorVersion)) {
62
73
  revert TokenMajorVersionInvalid(majorVersion);
63
74
  }
64
75
 
@@ -91,12 +102,7 @@ contract TokenRegistry is
91
102
  revert NotContract(token);
92
103
  }
93
104
 
94
- // MUST not be GIF registerable
95
- if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
96
- revert NotToken(token);
97
- }
98
-
99
- // MUST have decimals > 0
105
+ // MUST have decimals > 0 (indicator that this is in fact an erc20 token)
100
106
  IERC20Metadata erc20 = IERC20Metadata(token);
101
107
  if(erc20.decimals() == 0) {
102
108
  revert TokenDecimalsZero();
@@ -2,24 +2,26 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
6
 
6
- contract ERC165 is IERC165 {
7
+ contract ERC165 is
8
+ Initializable,
9
+ IERC165
10
+ {
7
11
  mapping(bytes4 => bool) private _isSupported;
8
12
 
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 {
13
+ // @dev initializes with support for ERC165
14
+ function initializeERC165() public onlyInitializing() {
19
15
  _isSupported[type(IERC165).interfaceId] = true;
20
16
  }
21
17
 
22
- function _registerInterface(bytes4 interfaceId) internal {
18
+ // @dev register support for provided interfaceId
19
+ // includes initialization for ERC165_ID if not yet done
20
+ function registerInterface(bytes4 interfaceId) public onlyInitializing() {
23
21
  _isSupported[interfaceId] = true;
24
22
  }
23
+
24
+ function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
25
+ return _isSupported[interfaceId];
26
+ }
25
27
  }
@@ -1,22 +1,23 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegistry} from "../registry/IRegistry.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {IRegistryLinked} from "./IRegistryLinked.sol";
5
7
  import {NftId} from "../types/NftId.sol";
6
8
 
7
- interface INftOwnable {
8
- error ErrorNotOwner(address account);
9
+ interface INftOwnable is
10
+ IERC165,
11
+ IRegistryLinked
12
+ {
13
+ error ErrorNftOwnableInitialOwnerZero();
14
+ error ErrorNftOwnableNotOwner(address account);
9
15
 
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
+ error ErrorNftOwnableAlreadyLinked(NftId nftId);
17
+ error ErrorNftOwnableContractNotRegistered(address contractAddress);
16
18
 
17
19
  function linkToRegisteredNftId() external;
18
20
 
19
- function getRegistry() external view returns (IRegistry);
20
21
  function getNftId() external view returns (NftId);
21
22
  function getOwner() external view returns (address);
22
23
  }
@@ -0,0 +1,26 @@
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
+
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+ import {NumberId} from "../types/NumberId.sol";
10
+
11
+ /// @dev generic interface for contracts that need to hold policies and receive payouts
12
+ /// GIF will notify policy holder contracts for policy creation and payout execution
13
+ ///
14
+
15
+ interface IPolicyHolder is IERC165, IERC721Receiver {
16
+
17
+ /// @dev callback function that will be called after successful policy creation
18
+ function policyCreatedCallback(NftId policyNftId) external;
19
+
20
+ /// @dev callback function that will be called after a successful payout
21
+ function payoutExecutedCallback(NftId policyNftId, NumberId payoutId, address beneficiary, uint256 amount) external;
22
+
23
+ /// @dev determines beneficiary address that will be used in payouts targeting this contract
24
+ /// returned address will override GIF default where the policy nft holder is treated as beneficiary
25
+ function getBeneficiary(NftId policyId, NumberId claimId) external view returns (address beneficiary);
26
+ }
@@ -1,15 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
-
6
4
  import {INftOwnable} from "./INftOwnable.sol";
7
5
  import {IRegistry} from "../registry/IRegistry.sol";
8
6
 
9
- interface IRegisterable is IERC165, INftOwnable {
7
+ interface IRegisterable is
8
+ INftOwnable
9
+ {
10
10
 
11
11
  function getInitialInfo()
12
12
  external
13
13
  view
14
- returns (IRegistry.ObjectInfo memory, bytes memory data);
14
+ returns (IRegistry.ObjectInfo memory);
15
15
  }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+
6
+ interface IRegistryLinked {
7
+
8
+ error ErrorNotRegistry(address registryAddress);
9
+
10
+ function getRegistry() external view returns (IRegistry);
11
+ function getRegistryAddress() external view returns (address);
12
+ }
@@ -11,6 +11,8 @@ interface IService is
11
11
  IRegisterable,
12
12
  IVersionable
13
13
  {
14
+ error ErrorIServiceCallerUnknown(address caller);
15
+
14
16
  function getDomain() external pure returns(ObjectType serviceDomain);
15
17
  function getMajorVersion() external view returns(VersionPart majorVersion);
16
18
  }
@@ -1,11 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Blocknumber} from "../types/Blocknumber.sol";
5
- import {Timestamp} from "../types/Timestamp.sol";
6
4
  import {Version} from "../types/Version.sol";
7
5
 
8
-
9
6
  /// IMPORTANT
10
7
  // Upgradeable contract MUST:
11
8
  // 1) inherit from Versionable
@@ -14,7 +11,7 @@ import {Version} from "../types/Version.sol";
14
11
  // 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
15
12
  // 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
16
13
  // 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
17
- // 7) use namespace storage
14
+ // 7) use namespace storage (should this be needed)
18
15
  // 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
19
16
  // Upgradeable contract SHOULD:
20
17
  // 9) define all non private methods as virtual (in order to be able to upgrade them latter)
@@ -22,48 +19,29 @@ import {Version} from "../types/Version.sol";
22
19
  // in some cases this ok but not in the others...
23
20
  //
24
21
  // IMPORTANT
25
- // Each version MUST:
22
+ // If introducting/amending storage related to Versionable version MUST:
26
23
  // 1) define namespace storage struct if accessing storage
27
24
  // - DO NOT use structs inside, except
28
25
  // - CAN use structs ONLY inside mappings
29
26
  // 2) ALWAYS define private getter if accessing storage
30
27
  // - MUST use default implementation, CAN change ONLY return type
31
- // - MUST use the same "LOCATION_V1"
32
28
 
33
29
  interface IVersionable {
34
30
 
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
31
  /**
47
32
  * @dev IMPORTANT
48
33
  * implementation MUST be guarded by initializer modifier
49
- * implementation MUST call internal function Versionable._updateVersionHistory
50
34
  * new version MUST inherit from previous version
51
35
  */
52
- function initialize(address implementation, address activatedBy, bytes memory activationData) external;
36
+ function initializeVersionable(address activatedBy, bytes memory activationData) external;
53
37
 
54
38
  /**
55
39
  * @dev
56
40
  * implementation MUST be guarded by reinitializer(version().toUint64()) modifier
57
- * implementation MUST call internal function Versionable._updateVersionHistory
58
41
  * new version MUST inherit from previous version
59
42
  * the first verion MUST revert
60
43
  */
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);
44
+ function upgradeVersionable(bytes memory upgradeData) external;
67
45
 
68
46
  /**
69
47
  * @dev returns version of this contract
@@ -72,25 +50,4 @@ interface IVersionable {
72
50
  */
73
51
  function getVersion() external pure returns(Version);
74
52
 
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
53
  }