@etherisc/gif-next 0.0.2-f7eda15-119 → 0.0.2-f831797-539

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