@etherisc/gif-next 0.0.2-868e698-559 → 0.0.2-86dae40-160

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 (457) hide show
  1. package/README.md +49 -4
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +95 -252
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/{registry → authorization}/IServiceAuthorization.sol/IServiceAuthorization.json +29 -10
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1500 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +46 -292
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +214 -90
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +71 -55
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +91 -149
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +103 -16
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -19
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +32 -44
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +35 -96
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1208 -290
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +132 -140
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +65 -125
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +35 -59
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +90 -219
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  61. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  63. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  71. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  72. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  73. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  74. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1137 -0
  75. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  76. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  77. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
  79. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  80. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +43 -26
  81. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  83. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +40 -157
  84. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  85. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -32
  86. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +34 -34
  88. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  89. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1406 -0
  90. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  91. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  92. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +394 -62
  94. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +107 -43
  96. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  97. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  98. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  99. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -278
  100. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  101. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +158 -54
  102. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/Pool.sol/Pool.json +44 -417
  104. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  105. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +226 -90
  106. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +52 -36
  108. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  109. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +33 -44
  110. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +32 -40
  112. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  113. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1254 -0
  114. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  115. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  116. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  117. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +88 -72
  118. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +54 -54
  120. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  121. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  122. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  123. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  124. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  125. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +188 -108
  126. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  127. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  128. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +32 -68
  129. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  130. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  131. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +260 -167
  132. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +59 -43
  134. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  135. package/artifacts/contracts/product/PricingService.sol/PricingService.json +63 -58
  136. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  137. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +47 -47
  138. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  139. package/artifacts/contracts/product/Product.sol/Product.json +32 -217
  140. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  141. package/artifacts/contracts/product/ProductService.sol/ProductService.json +20 -20
  142. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +28 -28
  144. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  145. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  146. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  147. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -46
  148. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  149. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  150. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  151. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  152. package/artifacts/contracts/registry/Registry.sol/Registry.json +101 -73
  153. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  154. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +234 -389
  155. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  156. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -18
  157. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  158. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -27
  159. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  160. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  161. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  162. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  163. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  164. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +43 -16
  165. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  166. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  167. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  168. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  169. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  170. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +327 -86
  171. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  172. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -61
  173. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  175. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  176. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  177. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  178. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  179. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +32 -26
  180. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +11 -5
  182. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  183. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +0 -5
  184. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  185. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  186. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  187. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  188. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  189. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  190. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  191. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  192. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  193. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +32 -117
  194. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  195. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +15 -89
  196. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  197. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +4 -65
  198. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  200. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  201. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -6
  202. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  203. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +6 -6
  204. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  205. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -8
  206. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  207. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  208. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  209. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  210. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +240 -16
  211. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  212. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  213. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  214. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +40 -113
  216. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  217. package/artifacts/contracts/staking/Staking.sol/Staking.json +127 -119
  218. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  219. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  220. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  221. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +82 -46
  222. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  223. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  224. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  225. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -26
  226. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  227. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +31 -31
  228. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  229. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +146 -165
  230. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  231. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +27 -22
  232. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  233. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  234. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  236. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  238. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  240. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  242. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
  244. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  245. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  246. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +4 -4
  248. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  249. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  250. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +55 -2
  252. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  254. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  256. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
  258. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  260. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +117 -14
  262. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  264. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +2 -2
  266. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  268. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  270. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/String.sol/StrLib.json +2 -2
  272. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  274. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  276. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +58 -2
  278. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  280. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  282. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  283. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  284. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  285. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  286. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  287. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  288. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  289. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  290. package/contracts/{shared → authorization}/AccessAdmin.sol +135 -303
  291. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  292. package/contracts/authorization/Authorization.sol +218 -0
  293. package/contracts/authorization/IAccess.sol +48 -0
  294. package/contracts/{shared → authorization}/IAccessAdmin.sol +22 -54
  295. package/contracts/authorization/IAuthorization.sol +54 -0
  296. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  297. package/contracts/{registry → authorization}/IServiceAuthorization.sol +8 -5
  298. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  299. package/contracts/{registry → authorization}/ServiceAuthorization.sol +21 -17
  300. package/contracts/distribution/BasicDistribution.sol +138 -0
  301. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  302. package/contracts/distribution/Distribution.sol +144 -110
  303. package/contracts/distribution/DistributionService.sol +57 -32
  304. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  305. package/contracts/distribution/IDistributionComponent.sol +25 -39
  306. package/contracts/distribution/IDistributionService.sol +15 -1
  307. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  308. package/contracts/instance/IInstance.sol +8 -9
  309. package/contracts/instance/IInstanceService.sol +13 -18
  310. package/contracts/instance/Instance.sol +61 -70
  311. package/contracts/instance/InstanceAdmin.sol +202 -267
  312. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  313. package/contracts/instance/InstanceReader.sol +32 -16
  314. package/contracts/instance/InstanceService.sol +104 -76
  315. package/contracts/instance/InstanceServiceManager.sol +2 -6
  316. package/contracts/instance/InstanceStore.sol +13 -5
  317. package/contracts/instance/base/ObjectLifecycle.sol +105 -0
  318. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -12
  319. package/contracts/instance/module/IBundle.sol +1 -1
  320. package/contracts/instance/module/IComponents.sol +1 -7
  321. package/contracts/instance/module/IDistribution.sol +0 -1
  322. package/contracts/instance/module/IPolicy.sol +1 -1
  323. package/contracts/mock/Dip.sol +1 -1
  324. package/contracts/oracle/BasicOracle.sol +48 -0
  325. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  326. package/contracts/oracle/IOracle.sol +16 -0
  327. package/contracts/oracle/IOracleComponent.sol +2 -1
  328. package/contracts/oracle/Oracle.sol +72 -51
  329. package/contracts/oracle/OracleServiceManager.sol +2 -5
  330. package/contracts/pool/BasicPool.sol +166 -0
  331. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  332. package/contracts/pool/BundleService.sol +181 -41
  333. package/contracts/pool/BundleServiceManager.sol +2 -5
  334. package/contracts/pool/IBundleService.sol +32 -5
  335. package/contracts/pool/IPoolComponent.sol +6 -60
  336. package/contracts/pool/IPoolService.sol +14 -17
  337. package/contracts/pool/Pool.sol +166 -137
  338. package/contracts/pool/PoolService.sol +152 -86
  339. package/contracts/pool/PoolServiceManager.sol +2 -5
  340. package/contracts/product/ApplicationService.sol +49 -53
  341. package/contracts/product/ApplicationServiceManager.sol +2 -2
  342. package/contracts/product/BasicProduct.sol +52 -0
  343. package/contracts/product/BasicProductAuthorization.sol +43 -0
  344. package/contracts/product/ClaimService.sol +13 -39
  345. package/contracts/product/ClaimServiceManager.sol +2 -2
  346. package/contracts/product/IApplicationService.sol +1 -0
  347. package/contracts/product/IClaimService.sol +1 -0
  348. package/contracts/product/IPolicyService.sol +23 -17
  349. package/contracts/product/IProductComponent.sol +7 -9
  350. package/contracts/product/IProductService.sol +1 -0
  351. package/contracts/product/PolicyService.sol +242 -131
  352. package/contracts/product/PolicyServiceManager.sol +2 -5
  353. package/contracts/product/PricingService.sol +5 -1
  354. package/contracts/product/PricingServiceManager.sol +2 -5
  355. package/contracts/product/Product.sol +128 -92
  356. package/contracts/product/ProductService.sol +7 -32
  357. package/contracts/product/ProductServiceManager.sol +2 -5
  358. package/contracts/registry/IRegistry.sol +26 -16
  359. package/contracts/registry/IRegistryService.sol +6 -6
  360. package/contracts/registry/Registry.sol +81 -87
  361. package/contracts/registry/RegistryAdmin.sol +118 -86
  362. package/contracts/registry/RegistryService.sol +4 -18
  363. package/contracts/registry/RegistryServiceManager.sol +2 -2
  364. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  365. package/contracts/registry/ReleaseRegistry.sol +485 -0
  366. package/contracts/registry/ServiceAuthorizationV3.sol +14 -14
  367. package/contracts/registry/TokenRegistry.sol +2 -2
  368. package/contracts/shared/Component.sol +24 -37
  369. package/contracts/shared/ComponentService.sol +92 -70
  370. package/contracts/shared/ComponentServiceManager.sol +2 -2
  371. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  372. package/contracts/shared/IComponent.sol +4 -4
  373. package/contracts/shared/IComponentService.sol +15 -9
  374. package/contracts/shared/IInstanceLinkedComponent.sol +10 -0
  375. package/contracts/shared/IKeyValueStore.sol +1 -0
  376. package/contracts/shared/ILifecycle.sol +1 -2
  377. package/contracts/shared/IService.sol +1 -1
  378. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  379. package/contracts/shared/InstanceLinkedComponent.sol +47 -19
  380. package/contracts/shared/KeyValueStore.sol +6 -2
  381. package/contracts/shared/Lifecycle.sol +16 -69
  382. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  383. package/contracts/shared/NftOwnable.sol +2 -2
  384. package/contracts/shared/PolicyHolder.sol +2 -5
  385. package/contracts/shared/Service.sol +3 -4
  386. package/contracts/shared/TokenHandler.sol +91 -17
  387. package/contracts/staking/IStaking.sol +1 -2
  388. package/contracts/staking/IStakingService.sol +12 -5
  389. package/contracts/staking/StakeManagerLib.sol +0 -25
  390. package/contracts/staking/Staking.sol +19 -36
  391. package/contracts/staking/StakingLifecycle.sol +23 -0
  392. package/contracts/staking/StakingManager.sol +2 -6
  393. package/contracts/staking/StakingReader.sol +12 -16
  394. package/contracts/staking/StakingService.sol +8 -12
  395. package/contracts/staking/StakingServiceManager.sol +2 -2
  396. package/contracts/staking/StakingStore.sol +15 -23
  397. package/contracts/type/Amount.sol +12 -5
  398. package/contracts/type/Blocknumber.sol +7 -1
  399. package/contracts/type/ObjectType.sol +37 -7
  400. package/contracts/type/Referral.sol +1 -0
  401. package/contracts/type/RoleId.sol +55 -82
  402. package/contracts/type/Seconds.sol +13 -1
  403. package/contracts/type/Timestamp.sol +11 -1
  404. package/contracts/type/UFixed.sol +34 -9
  405. package/contracts/type/Version.sol +3 -1
  406. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  407. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  408. package/package.json +6 -3
  409. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  410. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
  411. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  412. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
  413. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  414. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
  415. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
  416. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  417. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1218
  418. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
  419. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -171
  420. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
  421. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1559
  422. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  423. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
  424. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  425. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
  426. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  427. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
  428. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  429. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
  430. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  431. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
  432. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  433. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  434. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
  435. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  436. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
  437. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  438. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
  439. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  440. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  441. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
  442. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  443. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  444. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  445. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  446. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  447. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
  448. package/contracts/registry/ReleaseManager.sol +0 -527
  449. package/contracts/shared/AccessManagerCustom.sol +0 -741
  450. package/contracts/shared/AccessManagerExtended.sol +0 -481
  451. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  452. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
  453. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  454. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  455. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
  456. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  457. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -6,13 +6,14 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
7
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
8
 
9
+ import {Amount} from "../type/Amount.sol";
9
10
  import {Component} from "./Component.sol";
10
11
  import {IComponentService} from "./IComponentService.sol";
11
12
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
13
+ import {IAuthorization} from "../authorization/IAuthorization.sol";
12
14
  import {IComponents} from "../instance/module/IComponents.sol";
13
15
  import {IInstanceService} from "../instance/IInstanceService.sol";
14
16
  import {IInstance} from "../instance/IInstance.sol";
15
- import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
16
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
17
18
  import {IRegistry} from "../registry/IRegistry.sol";
18
19
  import {NftId} from "../type/NftId.sol";
@@ -35,6 +36,39 @@ abstract contract InstanceLinkedComponent is
35
36
  struct InstanceLinkedComponentStorage {
36
37
  IInstance _instance; // instance for this component
37
38
  InstanceReader _instanceReader; // instance reader for this component
39
+ IAuthorization _initialAuthorization;
40
+ IComponentService _componentService;
41
+ }
42
+
43
+ function lock() external onlyOwner {
44
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
45
+ }
46
+
47
+ function unlock() external onlyOwner {
48
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
49
+ }
50
+
51
+ function getInstance() public view override returns (IInstance instance) {
52
+ return _getInstanceLinkedComponentStorage()._instance;
53
+ }
54
+
55
+ function getProductNftId() public view override returns (NftId productNftId) {
56
+ return getComponentInfo().productNftId;
57
+ }
58
+
59
+ function getAuthorization() external view returns (IAuthorization authorization) {
60
+ return _getInstanceLinkedComponentStorage()._initialAuthorization;
61
+ }
62
+
63
+ /// @inheritdoc IInstanceLinkedComponent
64
+ function withdrawFees(Amount amount)
65
+ external
66
+ virtual
67
+ onlyOwner()
68
+ restricted()
69
+ returns (Amount withdrawnAmount)
70
+ {
71
+ return _withdrawFees(amount);
38
72
  }
39
73
 
40
74
  function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
@@ -43,18 +77,19 @@ abstract contract InstanceLinkedComponent is
43
77
  }
44
78
  }
45
79
 
46
- function initializeInstanceLinkedComponent(
80
+ function _initializeInstanceLinkedComponent(
47
81
  address registry,
48
82
  NftId instanceNftId,
49
83
  string memory name,
50
84
  address token,
51
85
  ObjectType componentType,
86
+ IAuthorization authorization,
52
87
  bool isInterceptor,
53
88
  address initialOwner,
54
89
  bytes memory registryData, // writeonly data that will saved in the object info record of the registry
55
90
  bytes memory componentData // data that will saved with the component info in the instance store
56
91
  )
57
- public
92
+ internal
58
93
  virtual
59
94
  onlyInitializing()
60
95
  {
@@ -82,6 +117,8 @@ abstract contract InstanceLinkedComponent is
82
117
 
83
118
  // set component state
84
119
  $._instanceReader = $._instance.getInstanceReader();
120
+ $._initialAuthorization = authorization;
121
+ $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
85
122
 
86
123
  registerInterface(type(IAccessManaged).interfaceId);
87
124
  registerInterface(type(IInstanceLinkedComponent).interfaceId);
@@ -93,22 +130,6 @@ abstract contract InstanceLinkedComponent is
93
130
  IComponentService(_getServiceAddress(COMPONENT())).setWallet(newWallet);
94
131
  }
95
132
 
96
- function lock() external onlyOwner {
97
- IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
98
- }
99
-
100
- function unlock() external onlyOwner {
101
- IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
102
- }
103
-
104
- function getInstance() public view override returns (IInstance instance) {
105
- return _getInstanceLinkedComponentStorage()._instance;
106
- }
107
-
108
- function getProductNftId() public view override returns (NftId productNftId) {
109
- return getComponentInfo().productNftId;
110
- }
111
-
112
133
 
113
134
  function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
114
135
  NftId componentNftId = getRegistry().getNftId(address(this));
@@ -134,6 +155,13 @@ abstract contract InstanceLinkedComponent is
134
155
  return _getInstanceLinkedComponentStorage()._instanceReader;
135
156
  }
136
157
 
158
+ function _withdrawFees(Amount amount)
159
+ internal
160
+ returns (Amount withdrawnAmount)
161
+ {
162
+ return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
163
+ }
164
+
137
165
 
138
166
  /// @dev returns the service address for the specified domain
139
167
  /// gets address via lookup from registry using the major version form the linked instance
@@ -11,7 +11,7 @@ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
11
11
  import {Lifecycle} from "./Lifecycle.sol";
12
12
  import {IKeyValueStore} from "./IKeyValueStore.sol";
13
13
 
14
- contract KeyValueStore is
14
+ abstract contract KeyValueStore is
15
15
  Lifecycle,
16
16
  IKeyValueStore
17
17
  {
@@ -34,8 +34,12 @@ contract KeyValueStore is
34
34
  revert ErrorKeyValueStoreAlreadyCreated(key32, objectType);
35
35
  }
36
36
 
37
+ if(!hasLifecycle(objectType)) {
38
+ revert ErrorKeyValueStoreNoLifecycle(objectType);
39
+ }
40
+
37
41
  Blocknumber blocknumber = blockBlocknumber();
38
- StateId initialState = hasLifecycle(objectType) ? getInitialState(objectType) : ACTIVE();
42
+ StateId initialState = getInitialState(objectType);
39
43
 
40
44
  // set metadata
41
45
  metadata.objectType = objectType;
@@ -1,15 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
-
6
- import {NftId} from "../type/NftId.sol";
7
- import {ObjectType, COMPONENT, BUNDLE, POLICY, REQUEST, RISK, CLAIM, PAYOUT} from "../type/ObjectType.sol";
8
- import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED, EXPECTED, PAID, FULFILLED, FAILED, CANCELLED} from "../type/StateId.sol";
4
+ import {ObjectType} from "../type/ObjectType.sol";
5
+ import {StateId, zeroStateId} from "../type/StateId.sol";
9
6
  import {ILifecycle} from "./ILifecycle.sol";
10
7
 
11
- contract Lifecycle is
12
- Initializable,
8
+ abstract contract Lifecycle is
13
9
  ILifecycle
14
10
  {
15
11
  mapping(ObjectType objectType => StateId initialState)
@@ -18,16 +14,17 @@ contract Lifecycle is
18
14
  mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
19
15
  private _isValidTransition;
20
16
 
21
- function initializeLifecycle()
22
- public
23
- onlyInitializing
24
- {
25
- _setupBundleLifecycle();
26
- _setupComponentLifecycle();
27
- _setupPolicyLifecycle();
28
- _setupClaimAndPayoutLifecycle();
29
- _setupRiskLifecycle();
30
- _setupRequestLifecycle();
17
+ /// @dev child class must implement and CALL setup func at deployment/initializaton time
18
+ function _setupLifecycle() internal virtual;
19
+
20
+ function setInitialState(ObjectType ttype, StateId state) internal virtual {
21
+ assert(_initialState[ttype] == zeroStateId());
22
+ _initialState[ttype] = state;
23
+ }
24
+
25
+ function setStateTransition(ObjectType ttype, StateId oldState, StateId newState) internal virtual {
26
+ assert(_isValidTransition[ttype][oldState][newState] == false);
27
+ _isValidTransition[ttype][oldState][newState] = true;
31
28
  }
32
29
 
33
30
  function hasLifecycle(
@@ -59,9 +56,9 @@ contract Lifecycle is
59
56
  public
60
57
  view
61
58
  {
62
- // return if no life cycle support
59
+ // revert if no life cycle support
63
60
  if (_initialState[objectType].eqz()) {
64
- return;
61
+ revert ErrorNoLifecycle(objectType);
65
62
  }
66
63
 
67
64
  // enforce valid state transition
@@ -77,54 +74,4 @@ contract Lifecycle is
77
74
  ) public view returns (bool) {
78
75
  return _isValidTransition[objectType][fromId][toId];
79
76
  }
80
-
81
- function _setupComponentLifecycle() internal {
82
- _initialState[COMPONENT()] = ACTIVE();
83
- _isValidTransition[COMPONENT()][ACTIVE()][PAUSED()] = true;
84
- _isValidTransition[COMPONENT()][PAUSED()][ACTIVE()] = true;
85
- _isValidTransition[COMPONENT()][PAUSED()][ARCHIVED()] = true;
86
- }
87
-
88
- function _setupBundleLifecycle() internal {
89
- _initialState[BUNDLE()] = ACTIVE();
90
- _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
91
- _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
92
- _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
93
- _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
94
- }
95
-
96
- function _setupPolicyLifecycle() internal {
97
- _initialState[POLICY()] = APPLIED();
98
- _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
99
- _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
100
- _isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
101
- _isValidTransition[POLICY()][APPLIED()][ACTIVE()] = true;
102
- _isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
103
- _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
104
- }
105
-
106
- function _setupClaimAndPayoutLifecycle() internal {
107
- _initialState[CLAIM()] = SUBMITTED();
108
- _isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
109
- _isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
110
- _isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
111
-
112
- _initialState[PAYOUT()] = EXPECTED();
113
- _isValidTransition[PAYOUT()][EXPECTED()][PAID()] = true;
114
- }
115
-
116
- function _setupRiskLifecycle() internal {
117
- _initialState[RISK()] = ACTIVE();
118
- _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
119
- _isValidTransition[RISK()][PAUSED()][ACTIVE()] = true;
120
- _isValidTransition[RISK()][PAUSED()][ARCHIVED()] = true;
121
- }
122
-
123
- function _setupRequestLifecycle() internal {
124
- _initialState[REQUEST()] = ACTIVE();
125
- _isValidTransition[REQUEST()][ACTIVE()][FULFILLED()] = true;
126
- _isValidTransition[REQUEST()][ACTIVE()][FAILED()] = true;
127
- _isValidTransition[REQUEST()][FAILED()][FULFILLED()] = true;
128
- _isValidTransition[REQUEST()][ACTIVE()][CANCELLED()] = true;
129
- }
130
77
  }
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {LibNftIdSet} from "../type/NftIdSet.sol";
5
5
  import {NftId} from "../type/NftId.sol";
6
6
 
7
- contract NftIdSetManager {
7
+ contract NftIdSet {
8
8
 
9
9
  error ErrorNftIdSetManagerNotOwner(address owner, address sender);
10
10
  error ErrorNftIdSetManagerOwnerAlreadySet(address owner);
@@ -1,13 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {ERC165} from "./ERC165.sol";
4
+ import {InitializableERC165} from "./InitializableERC165.sol";
5
5
  import {INftOwnable} from "./INftOwnable.sol";
6
6
  import {NftId} from "../type/NftId.sol";
7
7
  import {RegistryLinked} from "./RegistryLinked.sol";
8
8
 
9
9
  contract NftOwnable is
10
- ERC165,
10
+ InitializableERC165,
11
11
  RegistryLinked,
12
12
  INftOwnable
13
13
  {
@@ -1,22 +1,19 @@
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
4
  import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
6
- import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
7
5
 
8
6
  import {Amount} from "../type/Amount.sol";
9
7
  import {ClaimId} from "../type/ClaimId.sol";
10
- import {ERC165} from "./ERC165.sol";
8
+ import {InitializableERC165} from "./InitializableERC165.sol";
11
9
  import {IPolicyHolder} from "./IPolicyHolder.sol";
12
10
  import {NftId} from "../type/NftId.sol";
13
11
  import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
14
12
  import {RegistryLinked} from "./RegistryLinked.sol";
15
- import {IRegistry} from "../registry/IRegistry.sol";
16
13
 
17
14
  /// @dev template implementation for IPolicyHolder
18
15
  contract PolicyHolder is
19
- ERC165,
16
+ InitializableERC165,
20
17
  RegistryLinked, // TODO need upgradeable version
21
18
  IPolicyHolder
22
19
  {
@@ -6,13 +6,12 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
 
7
7
  import {IRegistry} from "../registry/IRegistry.sol";
8
8
  import {IService} from "./IService.sol";
9
- import {IVersionable} from "./IVersionable.sol";
10
- import {NftId} from "../type/NftId.sol";
9
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
11
10
  import {ObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
12
11
  import {Registerable} from "./Registerable.sol";
13
12
  import {RoleId, RoleIdLib} from "../type/RoleId.sol";
14
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../type/Version.sol";
15
- import {Versionable} from "./Versionable.sol";
13
+ import {Version, VersionLib, VersionPartLib} from "../type/Version.sol";
14
+ import {Versionable} from "../upgradeability/Versionable.sol";
16
15
 
17
16
 
18
17
  /// @dev service base contract
@@ -10,49 +10,123 @@ import {Amount} from "../type/Amount.sol";
10
10
  /// a default token contract is provided via contract constructor
11
11
  /// relies internally on oz SafeERC20.safeTransferFrom
12
12
  contract TokenHandler {
13
+ error ErrorTokenHandlerAmountIsZero();
14
+ error ErrorTokenHandlerBalanceTooLow(address token, address from, uint256 balance, uint256 expectedBalance);
15
+ error ErrorTokenHandlerAllowanceTooSmall(address token, address from, address spender, uint256 allowance, uint256 expectedAllowance);
16
+ error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
17
+
18
+ event LogTokenHandlerTokenTransfer(address token, address from, address to, uint256 amountTransferred);
19
+
13
20
  IERC20Metadata private _token;
14
21
 
15
22
  constructor(address token) {
16
23
  _token = IERC20Metadata(token);
17
24
  }
18
25
 
19
- /// @dev transfer amount default tokens
20
- function transfer(
26
+ /// @dev returns the default token defined for this TokenHandler
27
+ function getToken()
28
+ external
29
+ view
30
+ returns (IERC20Metadata)
31
+ {
32
+ return _token;
33
+ }
34
+
35
+ /// @dev collect tokens from outside of the gif and transfer them to one wallet within the scope of gif.
36
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
37
+ function collectTokens(
21
38
  address from,
22
39
  address to,
23
40
  Amount amount
24
41
  )
25
42
  external
26
43
  {
27
- SafeERC20.safeTransferFrom(
28
- _token,
29
- from,
30
- to,
31
- amount.toInt());
44
+ _transfer(from, to, amount);
45
+ }
46
+
47
+ /// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
48
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
49
+ function collectTokens(
50
+ address from,
51
+ address to,
52
+ Amount amount,
53
+ address to2,
54
+ Amount amount2,
55
+ address to3,
56
+ Amount amount3
57
+ )
58
+ external
59
+ {
60
+ if (to == to2 || to == to3 || to2 == to3) {
61
+ revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
62
+ }
63
+
64
+ _checkPreconditions(from, amount + amount2 + amount3);
65
+
66
+ if (amount.gtz()) {
67
+ _transfer(from, to, amount);
68
+ }
69
+ if (amount2.gtz()) {
70
+ _transfer(from, to2, amount2);
71
+ }
72
+ if (amount3.gtz()) {
73
+ _transfer(from, to3, amount3);
74
+ }
32
75
  }
33
76
 
34
- /// @dev transfer amount of the specified token
35
- function safeTransferFrom(
36
- address token,
77
+ /// @dev distribute tokens from a wallet within the scope of gif to an external address.
78
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
79
+ function distributeTokens(
37
80
  address from,
38
81
  address to,
39
82
  Amount amount
40
83
  )
41
84
  external
42
85
  {
86
+ _transfer(from, to, amount);
87
+ }
88
+
89
+ function _transfer(
90
+ address from,
91
+ address to,
92
+ Amount amount
93
+ )
94
+ internal
95
+ {
96
+ // check amount > 0, balance >= amount and allowance >= amount
97
+ _checkPreconditions(from, amount);
98
+
99
+ // transfer the tokens
100
+ emit LogTokenHandlerTokenTransfer(address(_token), from, to, amount.toInt());
43
101
  SafeERC20.safeTransferFrom(
44
- IERC20Metadata(token),
102
+ _token,
45
103
  from,
46
104
  to,
47
105
  amount.toInt());
48
106
  }
49
107
 
50
- /// @dev returns the default token defined for this TokenHandler
51
- function getToken()
52
- external
53
- view
54
- returns (IERC20Metadata)
108
+ function _checkPreconditions(
109
+ address from,
110
+ Amount amount
111
+ )
112
+ internal
113
+ view
55
114
  {
56
- return _token;
115
+ // amount must be greater than zero
116
+ if (amount.eqz()) {
117
+ revert ErrorTokenHandlerAmountIsZero();
118
+ }
119
+
120
+ // balance must be >= amount
121
+ uint256 balance = _token.balanceOf(from);
122
+ if (balance < amount.toInt()) {
123
+ revert ErrorTokenHandlerBalanceTooLow(address(_token), from, balance, amount.toInt());
124
+ }
125
+
126
+ // allowance must be >= amount
127
+ uint256 allowance = _token.allowance(from, address(this));
128
+ if (allowance < amount.toInt()) {
129
+ revert ErrorTokenHandlerAllowanceTooSmall(address(_token), from, address(this), allowance, amount.toInt());
130
+ }
57
131
  }
58
132
  }
@@ -3,9 +3,8 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount} from "../type/Amount.sol";
5
5
  import {IComponent} from "../shared/IComponent.sol";
6
- import {IVersionable} from "../shared/IVersionable.sol";
6
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
- import {NftIdSetManager} from "../shared/NftIdSetManager.sol";
9
8
  import {ObjectType} from "../type/ObjectType.sol";
10
9
  import {Seconds} from "../type/Seconds.sol";
11
10
  import {StakingReader} from "./StakingReader.sol";
@@ -44,6 +44,13 @@ interface IStakingService is IService
44
44
  error ErrorStakingServiceDipBalanceInsufficient(NftId targetNftId, uint256 amount, uint256 balance);
45
45
  error ErrorStakingServiceDipAllowanceInsufficient(NftId targetNftId, address tokenHandler, uint256 amount, uint256 allowance);
46
46
 
47
+ /// @dev Set the protocol reward rate stake locking period to the specified duration.
48
+ /// Permissioned: only staking owner
49
+ // TODO implement
50
+ // function setProtocolRewardRate(UFixed rewardRate) external;
51
+ // function setProtocolLockingPeriod(Seconds lockingPeriod) external;
52
+ // TODO also make sure that protocol rewards can be refilled and withdrawn
53
+
47
54
  /// @dev creates/registers an on-chain instance staking target.
48
55
  /// function granted to instance service
49
56
  function createInstanceTarget(
@@ -53,11 +60,11 @@ interface IStakingService is IService
53
60
  ) external;
54
61
 
55
62
  /// @dev Set the instance stake locking period to the specified duration.
56
- /// permissioned: only the owner of the specified target may set the locking period
63
+ /// Permissioned: Only owner of the specified target.
57
64
  function setInstanceLockingPeriod(NftId instanceNftId, Seconds lockingPeriod) external;
58
65
 
59
- /// @dev Set the instance reward rate to the specified value
60
- /// permissioned: only the owner of the specified target may set the locking period
66
+ /// @dev Set the instance reward rate to the specified value.
67
+ /// Permissioned: Only owner of the specified target.
61
68
  function setInstanceRewardRate(NftId instanceNftId, UFixed rewardRate) external;
62
69
 
63
70
  /// @dev (Re)fills the staking reward reserves for the specified target using the dips provided by the reward provider.
@@ -68,8 +75,8 @@ interface IStakingService is IService
68
75
  /// unpermissioned: anybody may fill up staking reward reserves
69
76
  function refillRewardReservesBySender(NftId targetNftId, Amount dipAmount) external returns (Amount newBalance);
70
77
 
71
- /// @dev defunds the staking reward reserves for the specified target
72
- /// permissioned: only the target owner may call this function
78
+ /// @dev Defunds the staking reward reserves for the specified target
79
+ /// Permissioned: only the target owner may call this function
73
80
  function withdrawInstanceRewardReserves(NftId instanceNftId, Amount dipAmount) external returns (Amount newBalance);
74
81
 
75
82
  /// @dev create a new stake with amount DIP to the specified target
@@ -153,31 +153,6 @@ library StakeManagerLib {
153
153
  // TODO add check for target specific max dip amount (min stake + tvl * stake rate + buffer)
154
154
  }
155
155
 
156
-
157
- function checkDipBalanceAndAllowance(
158
- IERC20Metadata dip,
159
- address owner,
160
- address tokenHandlerAddress,
161
- Amount dipAmount
162
- )
163
- public
164
- view
165
- {
166
- // check balance
167
- uint256 amount = dipAmount.toInt();
168
- uint256 dipBalance = dip.balanceOf(owner);
169
- if (dipBalance < amount) {
170
- revert IStaking.ErrorStakingDipBalanceInsufficient(owner, amount, dipBalance);
171
- }
172
-
173
- // check allowance
174
- uint256 dipAllowance = dip.allowance(owner, tokenHandlerAddress);
175
- if (dipAllowance < amount) {
176
- revert IStaking.ErrorStakingDipAllowanceInsufficient(owner, tokenHandlerAddress, amount, dipAllowance);
177
- }
178
- }
179
-
180
-
181
156
  function calculateRewardIncrease(
182
157
  StakingReader stakingReader,
183
158
  NftId stakeNftId,
@@ -1,29 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {ChainNft} from "../registry/ChainNft.sol";
6
- import {Component} from "../shared/Component.sol";
7
4
  import {IRegistry} from "../registry/IRegistry.sol";
8
5
  import {IRegistryService} from "../registry/IRegistryService.sol";
9
6
  import {IStaking} from "./IStaking.sol";
10
- import {IVersionable} from "../shared/IVersionable.sol";
11
- import {Key32} from "../type/Key32.sol";
12
- import {LibNftIdSet} from "../type/NftIdSet.sol";
13
- import {NftId, NftIdLib} from "../type/NftId.sol";
14
- import {NftIdSetManager} from "../shared/NftIdSetManager.sol";
15
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
16
- import {Seconds, SecondsLib} from "../type/Seconds.sol";
7
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
8
+
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
+ import {Component} from "../shared/Component.sol";
11
+ import {IComponent} from "../shared/IComponent.sol";
12
+ import {NftId} from "../type/NftId.sol";
13
+ import {ObjectType, STAKING} from "../type/ObjectType.sol";
14
+ import {Seconds} from "../type/Seconds.sol";
17
15
  import {StakeManagerLib} from "./StakeManagerLib.sol";
18
16
  import {StakingReader} from "./StakingReader.sol";
19
17
  import {StakingStore} from "./StakingStore.sol";
20
18
  import {TargetManagerLib} from "./TargetManagerLib.sol";
21
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
19
+ import {Timestamp} from "../type/Timestamp.sol";
22
20
  import {TokenHandler} from "../shared/TokenHandler.sol";
23
21
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
24
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
22
+ import {UFixed} from "../type/UFixed.sol";
25
23
  import {Version, VersionLib} from "../type/Version.sol";
26
- import {Versionable} from "../shared/Versionable.sol";
24
+ import {Versionable} from "../upgradeability/Versionable.sol";
27
25
 
28
26
  contract Staking is
29
27
  Component,
@@ -39,6 +37,7 @@ contract Staking is
39
37
  struct StakingStorage {
40
38
  IRegistryService _registryService;
41
39
  TokenRegistry _tokenRegistry;
40
+ TokenHandler _tokenHandler;
42
41
  StakingStore _store;
43
42
  StakingReader _reader;
44
43
  NftId _protocolNftId;
@@ -54,7 +53,7 @@ contract Staking is
54
53
 
55
54
 
56
55
  modifier onlyTarget(NftId targetNftId) {
57
- if (!_getStakingStorage()._store.getTargetManager().exists(targetNftId)) {
56
+ if (!_getStakingStorage()._store.getTargetNftIdSet().exists(targetNftId)) {
58
57
  revert ErrorStakingNotTarget(targetNftId);
59
58
  }
60
59
  _;
@@ -378,16 +377,7 @@ contract Staking is
378
377
  external
379
378
  restricted() // only staking service
380
379
  {
381
- TokenHandler tokenHandler = getTokenHandler();
382
- address stakingWallet = getWallet();
383
-
384
- StakeManagerLib.checkDipBalanceAndAllowance(
385
- getToken(),
386
- from,
387
- address(tokenHandler),
388
- dipAmount);
389
-
390
- tokenHandler.transfer(from, stakingWallet, dipAmount);
380
+ getTokenHandler().collectTokens(from, getWallet(), dipAmount);
391
381
  }
392
382
 
393
383
 
@@ -395,16 +385,7 @@ contract Staking is
395
385
  external
396
386
  restricted() // only staking service
397
387
  {
398
- TokenHandler tokenHandler = getTokenHandler();
399
- address stakingWallet = getWallet();
400
-
401
- StakeManagerLib.checkDipBalanceAndAllowance(
402
- getToken(),
403
- stakingWallet,
404
- address(tokenHandler),
405
- dipAmount);
406
-
407
- tokenHandler.transfer(stakingWallet, to, dipAmount);
388
+ getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
408
389
  }
409
390
 
410
391
 
@@ -422,6 +403,9 @@ contract Staking is
422
403
  return address(_getStakingStorage()._tokenRegistry);
423
404
  }
424
405
 
406
+ function getTokenHandler() public virtual override(Component, IComponent) view returns (TokenHandler tokenHandler) {
407
+ return _getStakingStorage()._tokenHandler;
408
+ }
425
409
 
426
410
  // from Versionable
427
411
  function getVersion()
@@ -492,14 +476,13 @@ contract Staking is
492
476
  "", // registry data
493
477
  ""); // component data
494
478
 
495
- _createAndSetTokenHandler();
496
-
497
479
  // wiring to external contracts
498
480
  StakingStorage storage $ = _getStakingStorage();
499
481
  $._protocolNftId = getRegistry().getProtocolNftId();
500
482
  $._store = StakingStore(stakingStoreAddress);
501
483
  $._reader = StakingStore(stakingStoreAddress).getStakingReader();
502
484
  $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
485
+ $._tokenHandler = new TokenHandler(address(getToken()));
503
486
 
504
487
  registerInterface(type(IStaking).interfaceId);
505
488
  }