@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f4f2d93-430

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 (382) hide show
  1. package/README.md +75 -14
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +948 -229
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +295 -132
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +864 -49
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +849 -247
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +637 -224
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2200 -184
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +368 -156
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1005 -1175
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +593 -180
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +242 -210
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +666 -190
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +392 -75
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  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} +276 -150
  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 +71 -45
  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 +1039 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1798 -0
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +217 -208
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +606 -0
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +437 -154
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +90 -391
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1237 -0
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +661 -0
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +840 -0
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +653 -0
  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 +373 -61
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +223 -229
  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 +333 -188
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +227 -330
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +304 -138
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  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 +86 -172
  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 +191 -163
  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 +210 -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/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  210. package/contracts/components/Component.sol +253 -0
  211. package/contracts/components/Distribution.sol +200 -86
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -16
  214. package/contracts/components/IPoolComponent.sol +88 -37
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +225 -181
  217. package/contracts/components/Product.sol +130 -134
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  219. package/contracts/instance/BundleManager.sol +127 -0
  220. package/contracts/instance/Cloneable.sol +51 -0
  221. package/contracts/instance/IInstance.sol +81 -11
  222. package/contracts/instance/IInstanceService.sol +56 -1
  223. package/contracts/instance/Instance.sol +157 -265
  224. package/contracts/instance/InstanceAccessManager.sol +414 -175
  225. package/contracts/instance/InstanceReader.sol +40 -29
  226. package/contracts/instance/InstanceService.sol +447 -54
  227. package/contracts/instance/InstanceServiceManager.sol +11 -13
  228. package/contracts/instance/ObjectManager.sol +82 -0
  229. package/contracts/instance/base/ComponentService.sol +121 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +11 -2
  232. package/contracts/instance/module/IAccess.sol +36 -20
  233. package/contracts/instance/module/IBundle.sol +8 -4
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +30 -3
  237. package/contracts/instance/module/ISetup.sol +9 -19
  238. package/contracts/instance/service/ApplicationService.sol +350 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +431 -0
  241. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  242. package/contracts/instance/service/ClaimService.sol +151 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +435 -0
  245. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  246. package/contracts/instance/service/IApplicationService.sol +82 -0
  247. package/contracts/instance/service/IBundleService.sol +93 -0
  248. package/contracts/instance/service/IClaimService.sol +61 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +72 -0
  251. package/contracts/instance/service/IPoolService.sol +79 -17
  252. package/contracts/instance/service/IProductService.sol +6 -73
  253. package/contracts/instance/service/PolicyService.sol +362 -0
  254. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  255. package/contracts/instance/service/PoolService.sol +303 -0
  256. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  257. package/contracts/instance/service/ProductService.sol +210 -0
  258. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  259. package/contracts/registry/ChainNft.sol +9 -1
  260. package/contracts/registry/IRegistry.sol +52 -8
  261. package/contracts/registry/IRegistryService.sol +47 -14
  262. package/contracts/registry/ITransferInterceptor.sol +1 -0
  263. package/contracts/registry/Registry.sol +270 -226
  264. package/contracts/registry/RegistryAccessManager.sol +216 -0
  265. package/contracts/registry/RegistryService.sol +111 -268
  266. package/contracts/registry/RegistryServiceManager.sol +24 -26
  267. package/contracts/registry/ReleaseManager.sol +324 -0
  268. package/contracts/registry/TokenRegistry.sol +116 -0
  269. package/contracts/shared/ERC165.sol +14 -8
  270. package/contracts/shared/INftOwnable.sol +11 -10
  271. package/contracts/shared/IPolicyHolder.sol +26 -0
  272. package/contracts/shared/IRegisterable.sol +4 -6
  273. package/contracts/shared/IRegistryLinked.sol +12 -0
  274. package/contracts/shared/IService.sol +5 -4
  275. package/contracts/shared/IVersionable.sol +4 -47
  276. package/contracts/shared/NftOwnable.sol +67 -83
  277. package/contracts/shared/PolicyHolder.sol +81 -0
  278. package/contracts/shared/ProxyManager.sol +100 -25
  279. package/contracts/shared/Registerable.sol +16 -31
  280. package/contracts/shared/RegistryLinked.sol +48 -0
  281. package/contracts/shared/Service.sol +42 -24
  282. package/contracts/shared/TokenHandler.sol +11 -5
  283. package/contracts/shared/Versionable.sol +4 -92
  284. package/contracts/test/TestRegisterable.sol +1 -1
  285. package/contracts/test/TestService.sol +4 -3
  286. package/contracts/types/Amount.sol +60 -0
  287. package/contracts/types/Blocknumber.sol +1 -0
  288. package/contracts/types/ClaimId.sol +52 -0
  289. package/contracts/types/DistributorType.sol +2 -2
  290. package/contracts/types/Fee.sol +13 -5
  291. package/contracts/types/NftId.sol +8 -0
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/ObjectType.sol +10 -5
  294. package/contracts/types/PayoutId.sol +54 -0
  295. package/contracts/types/Referral.sol +4 -0
  296. package/contracts/types/RoleId.sol +26 -11
  297. package/contracts/types/Seconds.sol +54 -0
  298. package/contracts/types/StateId.sol +5 -0
  299. package/contracts/types/Timestamp.sol +13 -13
  300. package/contracts/types/UFixed.sol +1 -0
  301. package/contracts/types/Version.sol +5 -1
  302. package/package.json +3 -3
  303. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  304. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
  305. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  306. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  311. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  313. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  315. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  317. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  319. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  321. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  323. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  327. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  329. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  332. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  336. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  338. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  340. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  342. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  344. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  346. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  347. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  348. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  349. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  350. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  351. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  352. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  353. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  354. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  356. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  357. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  358. package/contracts/components/BaseComponent.sol +0 -86
  359. package/contracts/components/IBaseComponent.sol +0 -24
  360. package/contracts/experiment/cloning/Cloner.sol +0 -47
  361. package/contracts/experiment/errors/Require.sol +0 -38
  362. package/contracts/experiment/errors/Revert.sol +0 -44
  363. package/contracts/experiment/inheritance/A.sol +0 -53
  364. package/contracts/experiment/inheritance/B.sol +0 -28
  365. package/contracts/experiment/inheritance/C.sol +0 -34
  366. package/contracts/experiment/inheritance/IA.sol +0 -13
  367. package/contracts/experiment/inheritance/IB.sol +0 -10
  368. package/contracts/experiment/inheritance/IC.sol +0 -12
  369. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  370. package/contracts/experiment/statemachine/ISM.sol +0 -25
  371. package/contracts/experiment/statemachine/SM.sol +0 -57
  372. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  373. package/contracts/experiment/types/TypeA.sol +0 -47
  374. package/contracts/experiment/types/TypeB.sol +0 -29
  375. package/contracts/instance/AccessManagedSimple.sol +0 -114
  376. package/contracts/instance/AccessManagerSimple.sol +0 -682
  377. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  378. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  379. package/contracts/instance/base/IInstanceBase.sol +0 -23
  380. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  381. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  382. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,324 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
+
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {RoleId} from "../types/RoleId.sol";
8
+ import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
9
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../types/Version.sol";
10
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
+
12
+ import {IService} from "../shared/IService.sol";
13
+
14
+ import {IRegistry} from "./IRegistry.sol";
15
+ import {Registry} from "./Registry.sol";
16
+ import {IRegistryService} from "./IRegistryService.sol";
17
+ import {RegistryAccessManager} from "./RegistryAccessManager.sol";
18
+
19
+
20
+ contract ReleaseManager is AccessManaged
21
+ {
22
+ using ObjectTypeLib for ObjectType;
23
+
24
+ event LogReleaseCreation(VersionPart version);
25
+ event LogReleaseActivation(VersionPart version);
26
+
27
+ // createNextRelease
28
+ error NotRegistryService();
29
+ error UnexpectedServiceAuthority(address expected, address found);
30
+
31
+ // registerService
32
+ error NotService();
33
+
34
+ // activateNextRelease
35
+ error ReleaseNotCreated();
36
+ error ReleaseRegistrationNotFinished();
37
+
38
+ // _getAndVerifyContractInfo
39
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
40
+ error NotRegisterableOwner(address notOwner);
41
+ error SelfRegistration();
42
+ error RegisterableOwnerIsRegistered();
43
+
44
+ // _verifyService
45
+ error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
46
+ error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
47
+
48
+ // _verifyAndStoreConfig
49
+ error ConfigMissing();
50
+ error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
51
+ error ConfigSelectorZero(uint configArrayIndex);
52
+ error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
53
+
54
+
55
+ RegistryAccessManager private immutable _accessManager;
56
+ IRegistry private immutable _registry;
57
+
58
+ VersionPart immutable _initial;// first active major version
59
+ VersionPart _latest;// latest active major version
60
+ VersionPart _next;// major version to create and activate
61
+
62
+ mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
63
+
64
+ mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
65
+
66
+ uint _awaitingRegistration; // "services left to register" counter
67
+
68
+ mapping(address registryService => bool isActive) _active;
69
+
70
+ mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
71
+
72
+ constructor(
73
+ RegistryAccessManager accessManager,
74
+ VersionPart initialVersion)
75
+ AccessManaged(accessManager.authority())
76
+ {
77
+ require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
78
+
79
+ _accessManager = accessManager;
80
+
81
+ _initial = initialVersion;
82
+ _next = initialVersion;
83
+
84
+ _registry = new Registry();
85
+ }
86
+
87
+ /// @dev skips previous release if was not activated
88
+ function createNextRelease()
89
+ external
90
+ restricted // GIF_ADMIN_ROLE
91
+ {
92
+ // allow to register new registry service for next version
93
+ VersionPartLib.toVersionPart(_next.toInt() + 1);
94
+ // disallow registration of regular services for next version while registry service is not registered
95
+ _awaitingRegistration = 0;
96
+
97
+ emit LogReleaseCreation(_next);
98
+ }
99
+
100
+ function activateNextRelease()
101
+ external
102
+ restricted // GIF_ADMIN_ROLE
103
+ {
104
+ VersionPart version = _next;
105
+ address service = _registry.getServiceAddress(REGISTRY(), version);
106
+
107
+ // release was created
108
+ if(service == address(0)) {
109
+ revert ReleaseNotCreated();
110
+ }
111
+
112
+ // release fully deployed
113
+ if(_awaitingRegistration > 0) {
114
+ revert ReleaseRegistrationNotFinished();
115
+ }
116
+
117
+ //setTargetClosed(service, false);
118
+
119
+ _latest = version;
120
+
121
+ _active[service] = true;
122
+ _valid[version] = true;
123
+
124
+ emit LogReleaseActivation(version);
125
+ }
126
+
127
+ // TODO deploy proxy and initialize with given implementation instead of using given proxy?
128
+ // IMPORTANT: MUST never be possible to create with access/release manager, token registry
129
+ // callable once per release after release creation, can not register regular services while registry service is not registered
130
+ function registerRegistryService(IRegistryService service)
131
+ external
132
+ restricted // GIF_MANAGER_ROLE
133
+ returns(NftId nftId)
134
+ {
135
+ if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
136
+ revert NotRegistryService();
137
+ }
138
+
139
+ // TODO unreliable! MUST guarantee the same authority -> how?
140
+ address serviceAuthority = service.authority();
141
+ if(serviceAuthority != authority()) {
142
+ revert UnexpectedServiceAuthority(
143
+ authority(),
144
+ serviceAuthority);
145
+ }
146
+
147
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
148
+
149
+ VersionPart majorVersion = _next;
150
+ ObjectType domain = REGISTRY();
151
+ _verifyService(service, majorVersion, domain);
152
+ _createRelease(service.getFunctionConfigs());
153
+
154
+ nftId = _registry.registerService(info, majorVersion, domain);
155
+
156
+ // external call
157
+ service.linkToRegisteredNftId();
158
+ }
159
+
160
+ // TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
161
+ // TODO removing service from release? -> set _active to false forever, but keep all other records?
162
+ function registerService(IService service)
163
+ external
164
+ restricted // GIF_MANAGER_ROLE
165
+ returns(NftId nftId)
166
+ {
167
+ if(!service.supportsInterface(type(IService).interfaceId)) {
168
+ revert NotService();
169
+ }
170
+
171
+ IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
172
+ VersionPart majorVersion = getNextVersion();
173
+ ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
174
+ _verifyService(service, majorVersion, domain);
175
+
176
+ // setup and grant unique role if service does registrations
177
+ bytes4[] memory selectors = _selectors[majorVersion][domain];
178
+ address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
179
+ if(selectors.length > 0) {
180
+ _accessManager.setAndGrantUniqueRole(
181
+ address(service),
182
+ registryService,
183
+ selectors);
184
+ }
185
+
186
+ _awaitingRegistration--;
187
+
188
+ nftId = _registry.registerService(info, majorVersion, domain);
189
+
190
+ // external call
191
+ service.linkToRegisteredNftId();
192
+ }
193
+
194
+ //--- view functions ----------------------------------------------------//
195
+
196
+ function isActiveRegistryService(address service) external view returns(bool)
197
+ {
198
+ return _active[service];
199
+ }
200
+
201
+ function isValidRelease(VersionPart version) external view returns(bool)
202
+ {
203
+ return _valid[version];
204
+ }
205
+
206
+ function getRegistry() external view returns(address)
207
+ {
208
+ return (address(_registry));
209
+ }
210
+
211
+ function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
212
+ {
213
+ return _release[version];
214
+ }
215
+
216
+ function getNextVersion() public view returns(VersionPart)
217
+ {
218
+ return _next;
219
+ }
220
+
221
+ function getLatestVersion() external view returns(VersionPart) {
222
+ return _latest;
223
+ }
224
+
225
+ function getInitialVersion() external view returns(VersionPart) {
226
+ return _initial;
227
+ }
228
+
229
+ //--- private functions ----------------------------------------------------//
230
+
231
+ function _getAndVerifyContractInfo(
232
+ IService service,
233
+ ObjectType expectedType,
234
+ address expectedOwner // assume always valid, can not be 0
235
+ )
236
+ internal
237
+ // view
238
+ returns(
239
+ IRegistry.ObjectInfo memory info
240
+ )
241
+ {
242
+ info = service.getInitialInfo();
243
+ info.objectAddress = address(service);
244
+ info.isInterceptor = false; // service is never interceptor, at least now
245
+
246
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
247
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
248
+ }
249
+
250
+ address owner = info.initialOwner;
251
+
252
+ if(owner != expectedOwner) { // registerable owner protection
253
+ revert NotRegisterableOwner(expectedOwner);
254
+ }
255
+
256
+ if(owner == address(service)) {
257
+ revert SelfRegistration();
258
+ }
259
+
260
+ if(_registry.isRegistered(owner)) {
261
+ revert RegisterableOwnerIsRegistered();
262
+ }
263
+ }
264
+
265
+ function _verifyService(
266
+ IService service,
267
+ VersionPart expectedVersion,
268
+ ObjectType expectedDomain
269
+ )
270
+ internal
271
+ view
272
+ returns(ObjectType)
273
+ {
274
+ Version version = service.getVersion();
275
+ VersionPart majorVersion = version.toMajorPart();
276
+ if(majorVersion != expectedVersion) {
277
+ revert UnexpectedServiceVersion(expectedVersion, majorVersion);
278
+ }
279
+
280
+ if(service.getDomain() != expectedDomain) {
281
+ revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
282
+ }
283
+
284
+ return expectedDomain;
285
+ }
286
+
287
+ // TODO check if registry supports types specified in the config array
288
+ function _createRelease(IRegistryService.FunctionConfig[] memory config)
289
+ internal
290
+ {
291
+ VersionPart version = getNextVersion();
292
+
293
+ if(config.length == 0) {
294
+ revert ConfigMissing();
295
+ }
296
+ // always in release
297
+ _release[version].domains.push(REGISTRY());
298
+ for(uint idx = 0; idx < config.length; idx++)
299
+ {
300
+ ObjectType domain = config[idx].serviceDomain;
301
+ // not "registry service" / zero domain
302
+ if(
303
+ domain == REGISTRY() ||
304
+ domain.eqz()
305
+ ) { revert ConfigServiceDomainInvalid(idx, domain); }
306
+
307
+ bytes4[] memory selectors = config[idx].selectors;
308
+
309
+ // 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
310
+ // no overwrite
311
+ if(_selectors[version][domain].length > 0) {
312
+ revert SelectorAlreadyExists(version, domain);
313
+ }
314
+
315
+ _selectors[version][domain] = selectors;
316
+ _release[version].domains.push(domain);
317
+ }
318
+ // TODO set when activated?
319
+ _release[version].createdAt = TimestampLib.blockTimestamp();
320
+ //_release[version].updatedAt = TimestampLib.blockTimestamp();
321
+
322
+ _awaitingRegistration = config.length;
323
+ }
324
+ }
@@ -0,0 +1,116 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
6
+
7
+ import {IRegisterable} from "../shared/IRegisterable.sol";
8
+ import {IRegistry} from "./IRegistry.sol";
9
+ import {VersionPart} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
+ import {NftOwnable} from "../shared/NftOwnable.sol";
12
+
13
+ /// @title contract to register token per GIF major release.
14
+ contract TokenRegistry is
15
+ NftOwnable
16
+ {
17
+ event LogRegistered(address token, string symbol, uint256 decimals);
18
+ event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
19
+
20
+ error NotContract(address account);
21
+ error NotToken(address account);
22
+ error TokenDecimalsZero();
23
+ error TokenMajorVersionInvalid(VersionPart majorVersion);
24
+
25
+ address [] internal _token;
26
+ mapping(address token => bool registered) internal _registered;
27
+ mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
28
+
29
+ constructor(
30
+ 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
+ }
42
+
43
+
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
46
+ function linkToNftOwnable(address registryAddress)
47
+ external
48
+ onlyOwner
49
+ {
50
+ IRegistry registry = IRegistry(registryAddress);
51
+ // TODO use _latest instead of _initial -> but _latest is 0 before first release activation
52
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
53
+
54
+ _linkToNftOwnable(registryServiceAddress);
55
+ }
56
+
57
+ /// @dev token state is informative, registry have no clue about used tokens
58
+ // component owner is responsible for token selection and operations
59
+ // service MUST deny registration of component with inactive token
60
+ function setActive(address token, VersionPart majorVersion, bool active)
61
+ external
62
+ onlyOwner
63
+ {
64
+ // verify that token is registered
65
+ if (!_registered[token]) {
66
+ _registerToken(token);
67
+ }
68
+
69
+ // verify valid major version
70
+ // ensure major version increments is one
71
+ uint256 version = majorVersion.toInt();
72
+ if (!getRegistry().isValidRelease(majorVersion)) {
73
+ revert TokenMajorVersionInvalid(majorVersion);
74
+ }
75
+
76
+ _active[token][majorVersion] = active;
77
+
78
+ emit LogTokenStateSet(token, majorVersion, active);
79
+ }
80
+
81
+ function tokens() external view returns (uint256) {
82
+ return _token.length;
83
+ }
84
+
85
+ function getToken(uint256 idx) external view returns (IERC20Metadata token) {
86
+ return IERC20Metadata(_token[idx]);
87
+ }
88
+
89
+ function isRegistered(address token) external view returns (bool) {
90
+ return _registered[token];
91
+ }
92
+
93
+ function isActive(address token, VersionPart majorVersion) external view returns (bool) {
94
+ return _active[token][majorVersion];
95
+ }
96
+
97
+ /// @dev some sanity checks to prevent unintended registration
98
+ function _registerToken(address token) internal {
99
+
100
+ // MUST be contract
101
+ if(token.code.length == 0) {
102
+ revert NotContract(token);
103
+ }
104
+
105
+ // MUST have decimals > 0 (indicator that this is in fact an erc20 token)
106
+ IERC20Metadata erc20 = IERC20Metadata(token);
107
+ if(erc20.decimals() == 0) {
108
+ revert TokenDecimalsZero();
109
+ }
110
+
111
+ _registered[token] = true;
112
+ _token.push(token);
113
+
114
+ emit LogRegistered(token, erc20.symbol(), erc20.decimals());
115
+ }
116
+ }
@@ -2,20 +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
- // register support for ERC165
11
- _registerInterface(type(IERC165).interfaceId);
13
+ // @dev initializes with support for ERC165
14
+ function initializeERC165() public onlyInitializing() {
15
+ _isSupported[type(IERC165).interfaceId] = true;
12
16
  }
13
17
 
14
- function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
15
- return _isSupported[interfaceId];
18
+ // @dev register support for provided interfaceId
19
+ // includes initialization for ERC165_ID if not yet done
20
+ function registerInterface(bytes4 interfaceId) public onlyInitializing() {
21
+ _isSupported[interfaceId] = true;
16
22
  }
17
23
 
18
- function _registerInterface(bytes4 interfaceId) internal {
19
- _isSupported[interfaceId] = true;
24
+ function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
25
+ return _isSupported[interfaceId];
20
26
  }
21
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,17 +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
- import {NftId} from "../types/NftId.sol";
9
- import {ObjectType} from "../types/ObjectType.sol";
10
6
 
11
- interface IRegisterable is IERC165, INftOwnable {
7
+ interface IRegisterable is
8
+ INftOwnable
9
+ {
12
10
 
13
11
  function getInitialInfo()
14
12
  external
15
13
  view
16
- returns (IRegistry.ObjectInfo memory, bytes memory data);
14
+ returns (IRegistry.ObjectInfo memory);
17
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
+ }
@@ -1,15 +1,16 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {VersionPart} from "../types/Version.sol";
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
5
 
6
6
  import {IRegisterable} from "./IRegisterable.sol";
7
7
  import {IVersionable} from "./IVersionable.sol";
8
+ import {ObjectType} from "../types/ObjectType.sol";
8
9
 
9
10
  interface IService is
10
11
  IRegisterable,
11
- IVersionable
12
+ IVersionable,
13
+ IAccessManaged
12
14
  {
13
- function getName() external pure returns(string memory name);
14
- function getMajorVersion() external view returns(VersionPart majorVersion);
15
+ function getDomain() external pure returns(ObjectType serviceDomain);
15
16
  }