@etherisc/gif-next 0.0.2-e8ea17d-715 → 0.0.2-e8ea5fe-337

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 (380) hide show
  1. package/README.md +19 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +85 -101
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -75
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +223 -105
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +50 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +54 -54
  38. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +238 -123
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +16 -16
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +9 -9
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +215 -219
  48. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  50. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  55. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  56. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  57. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  63. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  64. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  65. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  66. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -88
  67. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  69. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -37
  72. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  74. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -72
  75. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  76. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  77. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  79. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  80. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +55 -137
  81. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  82. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  83. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  84. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +391 -51
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +94 -26
  87. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  88. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  89. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  90. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +45 -95
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -100
  93. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  94. package/artifacts/contracts/pool/Pool.sol/Pool.json +45 -133
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +264 -136
  97. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +23 -19
  99. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  100. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +19 -38
  101. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +8 -20
  103. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  104. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +22 -78
  105. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  107. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  108. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +194 -72
  109. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +41 -37
  111. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  113. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +114 -0
  115. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  116. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -119
  117. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  119. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  120. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -37
  121. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  122. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  123. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  124. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +242 -209
  125. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +38 -38
  127. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  128. package/artifacts/contracts/product/PricingService.sol/PricingService.json +107 -147
  129. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +40 -60
  131. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  132. package/artifacts/contracts/product/Product.sol/Product.json +22 -78
  133. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  134. package/artifacts/contracts/product/{ProductService.sol/ProductService.json → RiskService.sol/RiskService.json} +4 -17
  135. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  136. package/artifacts/contracts/product/{ProductServiceManager.sol/ProductServiceManager.json → RiskServiceManager.sol/RiskServiceManager.json} +12 -12
  137. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  138. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  139. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +1 -1
  140. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  141. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  142. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  143. package/artifacts/contracts/registry/Registry.sol/Registry.json +15 -15
  144. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  145. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +28 -28
  146. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  147. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  148. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  150. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  151. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  152. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  153. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  154. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  155. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  156. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  158. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  160. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  161. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +255 -62
  162. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  163. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +52 -32
  164. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  167. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  169. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -37
  171. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  172. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  173. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  175. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  177. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  178. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  179. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  180. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  181. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  182. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -75
  183. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  184. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  185. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  186. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  187. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  188. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  189. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  190. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  191. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  193. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  194. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  195. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  196. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  197. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  198. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  199. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  200. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  201. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +27 -27
  202. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  203. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  205. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  206. package/artifacts/contracts/staking/Staking.sol/Staking.json +77 -107
  207. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  208. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  209. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  210. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +26 -22
  211. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  213. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  214. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  215. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  216. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  217. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  218. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  219. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  220. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  221. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  222. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  224. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  226. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  228. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  230. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  232. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  234. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  236. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  237. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  238. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  240. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  242. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  244. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  246. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  248. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  250. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  252. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  256. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  259. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  261. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  263. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  265. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  266. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  267. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  268. package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
  269. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  270. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  271. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  272. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  273. package/contracts/authorization/Authorization.sol +0 -1
  274. package/contracts/distribution/BasicDistribution.sol +4 -15
  275. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  276. package/contracts/distribution/Distribution.sol +22 -10
  277. package/contracts/distribution/DistributionService.sol +67 -33
  278. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  279. package/contracts/distribution/IDistributionComponent.sol +8 -4
  280. package/contracts/distribution/IDistributionService.sol +18 -2
  281. package/contracts/instance/IInstance.sol +7 -30
  282. package/contracts/instance/Instance.sol +8 -33
  283. package/contracts/instance/InstanceAdmin.sol +23 -4
  284. package/contracts/instance/InstanceAuthorizationV3.sol +5 -3
  285. package/contracts/instance/InstanceReader.sol +32 -7
  286. package/contracts/instance/InstanceService.sol +57 -33
  287. package/contracts/instance/InstanceServiceManager.sol +2 -6
  288. package/contracts/instance/InstanceStore.sol +12 -1
  289. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  290. package/contracts/instance/module/IBundle.sol +1 -1
  291. package/contracts/instance/module/IComponents.sol +1 -7
  292. package/contracts/instance/module/IDistribution.sol +0 -1
  293. package/contracts/instance/module/IPolicy.sol +22 -22
  294. package/contracts/mock/Dip.sol +1 -1
  295. package/contracts/oracle/IOracleComponent.sol +2 -1
  296. package/contracts/oracle/Oracle.sol +16 -6
  297. package/contracts/oracle/OracleService.sol +1 -0
  298. package/contracts/oracle/OracleServiceManager.sol +2 -5
  299. package/contracts/pool/BasicPool.sol +7 -5
  300. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  301. package/contracts/pool/BundleService.sol +182 -40
  302. package/contracts/pool/BundleServiceManager.sol +2 -5
  303. package/contracts/pool/IBundleService.sol +33 -5
  304. package/contracts/pool/IPoolComponent.sol +6 -0
  305. package/contracts/pool/IPoolService.sol +36 -26
  306. package/contracts/pool/Pool.sol +39 -24
  307. package/contracts/pool/PoolService.sol +161 -103
  308. package/contracts/pool/PoolServiceManager.sol +2 -5
  309. package/contracts/product/ApplicationService.sol +51 -57
  310. package/contracts/product/ApplicationServiceManager.sol +2 -2
  311. package/contracts/product/BasicProduct.sol +3 -32
  312. package/contracts/product/BasicProductAuthorization.sol +3 -0
  313. package/contracts/product/ClaimService.sol +118 -73
  314. package/contracts/product/ClaimServiceManager.sol +2 -2
  315. package/contracts/product/IApplicationService.sol +1 -0
  316. package/contracts/product/IClaimService.sol +28 -5
  317. package/contracts/product/IPolicyService.sol +27 -32
  318. package/contracts/product/IPricingService.sol +7 -7
  319. package/contracts/product/IProductComponent.sol +1 -1
  320. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  321. package/contracts/product/PolicyService.sol +278 -180
  322. package/contracts/product/PolicyServiceManager.sol +2 -5
  323. package/contracts/product/PricingService.sol +42 -41
  324. package/contracts/product/PricingServiceManager.sol +2 -5
  325. package/contracts/product/Product.sol +67 -34
  326. package/contracts/product/{ProductService.sol → RiskService.sol} +10 -37
  327. package/contracts/product/RiskServiceManager.sol +39 -0
  328. package/contracts/registry/IRegistry.sol +1 -1
  329. package/contracts/registry/Registry.sol +1 -1
  330. package/contracts/registry/RegistryAdmin.sol +10 -1
  331. package/contracts/registry/RegistryService.sol +4 -18
  332. package/contracts/registry/RegistryServiceManager.sol +2 -2
  333. package/contracts/registry/ReleaseRegistry.sol +1 -3
  334. package/contracts/registry/ServiceAuthorizationV3.sol +2 -3
  335. package/contracts/shared/Component.sol +25 -38
  336. package/contracts/shared/ComponentService.sol +82 -22
  337. package/contracts/shared/ComponentServiceManager.sol +2 -2
  338. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  339. package/contracts/shared/IComponent.sol +4 -4
  340. package/contracts/shared/IComponentService.sol +15 -9
  341. package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
  342. package/contracts/shared/IService.sol +1 -1
  343. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  344. package/contracts/shared/InstanceLinkedComponent.sol +22 -1
  345. package/contracts/shared/NftOwnable.sol +3 -3
  346. package/contracts/shared/PolicyHolder.sol +2 -5
  347. package/contracts/shared/Service.sol +3 -4
  348. package/contracts/shared/TokenHandler.sol +100 -19
  349. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  350. package/contracts/staking/IStaking.sol +3 -2
  351. package/contracts/staking/StakeManagerLib.sol +18 -25
  352. package/contracts/staking/Staking.sol +23 -36
  353. package/contracts/staking/StakingManager.sol +2 -5
  354. package/contracts/staking/StakingReader.sol +6 -9
  355. package/contracts/staking/StakingService.sol +8 -12
  356. package/contracts/staking/StakingServiceManager.sol +2 -2
  357. package/contracts/staking/StakingStore.sol +5 -15
  358. package/contracts/staking/TargetManagerLib.sol +7 -3
  359. package/contracts/type/Amount.sol +12 -5
  360. package/contracts/type/Blocknumber.sol +7 -1
  361. package/contracts/type/ObjectType.sol +15 -11
  362. package/contracts/type/Referral.sol +1 -0
  363. package/contracts/type/Seconds.sol +21 -1
  364. package/contracts/type/StateId.sol +1 -0
  365. package/contracts/type/Timestamp.sol +11 -1
  366. package/contracts/type/UFixed.sol +29 -10
  367. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  368. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  369. package/package.json +1 -1
  370. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  371. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  372. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  373. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  374. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  375. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  376. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  377. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  378. package/contracts/product/ProductServiceManager.sol +0 -42
  379. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  380. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -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
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
4
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
6
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
6
7
 
@@ -9,50 +10,130 @@ import {Amount} from "../type/Amount.sol";
9
10
  /// @dev token specific transfer helper
10
11
  /// a default token contract is provided via contract constructor
11
12
  /// relies internally on oz SafeERC20.safeTransferFrom
12
- contract TokenHandler {
13
+ contract TokenHandler is AccessManaged {
14
+ error ErrorTokenHandlerAmountIsZero();
15
+ error ErrorTokenHandlerBalanceTooLow(address token, address from, uint256 balance, uint256 expectedBalance);
16
+ error ErrorTokenHandlerAllowanceTooSmall(address token, address from, address spender, uint256 allowance, uint256 expectedAllowance);
17
+ error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
18
+
19
+ event LogTokenHandlerTokenTransfer(address token, address from, address to, uint256 amountTransferred);
20
+
13
21
  IERC20Metadata private _token;
14
22
 
15
- constructor(address token) {
23
+ constructor(address token, address initialAuthority) AccessManaged(initialAuthority) {
16
24
  _token = IERC20Metadata(token);
17
25
  }
18
26
 
19
- /// @dev transfer amount default tokens
20
- function transfer(
27
+ /// @dev returns the default token defined for this TokenHandler
28
+ function getToken()
29
+ external
30
+ view
31
+ returns (IERC20Metadata)
32
+ {
33
+ return _token;
34
+ }
35
+
36
+ /// @dev collect tokens from outside of the gif and transfer them to one wallet within the scope of gif.
37
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
38
+ function collectTokens(
21
39
  address from,
22
40
  address to,
23
41
  Amount amount
24
42
  )
25
43
  external
44
+ restricted()
26
45
  {
27
- SafeERC20.safeTransferFrom(
28
- _token,
29
- from,
30
- to,
31
- amount.toInt());
46
+ _transfer(from, to, amount, true);
32
47
  }
33
48
 
34
- /// @dev transfer amount of the specified token
35
- function safeTransferFrom(
36
- address token,
49
+ /// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
50
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
51
+ function collectTokensToThreeRecipients(
52
+ address from,
53
+ address to,
54
+ Amount amount,
55
+ address to2,
56
+ Amount amount2,
57
+ address to3,
58
+ Amount amount3
59
+ )
60
+ external
61
+ restricted()
62
+ {
63
+ if (to == to2 || to == to3 || to2 == to3) {
64
+ revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
65
+ }
66
+
67
+ _checkPreconditions(from, amount + amount2 + amount3);
68
+
69
+ if (amount.gtz()) {
70
+ _transfer(from, to, amount, false);
71
+ }
72
+ if (amount2.gtz()) {
73
+ _transfer(from, to2, amount2, false);
74
+ }
75
+ if (amount3.gtz()) {
76
+ _transfer(from, to3, amount3, false);
77
+ }
78
+ }
79
+
80
+ /// @dev distribute tokens from a wallet within the scope of gif to an external address.
81
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
82
+ function distributeTokens(
37
83
  address from,
38
84
  address to,
39
85
  Amount amount
40
86
  )
41
87
  external
88
+ restricted()
89
+ {
90
+ _transfer(from, to, amount, true);
91
+ }
92
+
93
+ function _transfer(
94
+ address from,
95
+ address to,
96
+ Amount amount,
97
+ bool checkPreconditions
98
+ )
99
+ internal
42
100
  {
101
+ if (checkPreconditions) {
102
+ // check amount > 0, balance >= amount and allowance >= amount
103
+ _checkPreconditions(from, amount);
104
+ }
105
+
106
+ // transfer the tokens
107
+ emit LogTokenHandlerTokenTransfer(address(_token), from, to, amount.toInt());
43
108
  SafeERC20.safeTransferFrom(
44
- IERC20Metadata(token),
109
+ _token,
45
110
  from,
46
111
  to,
47
112
  amount.toInt());
48
113
  }
49
114
 
50
- /// @dev returns the default token defined for this TokenHandler
51
- function getToken()
52
- external
53
- view
54
- returns (IERC20Metadata)
115
+ function _checkPreconditions(
116
+ address from,
117
+ Amount amount
118
+ )
119
+ internal
120
+ view
55
121
  {
56
- return _token;
122
+ // amount must be greater than zero
123
+ if (amount.eqz()) {
124
+ revert ErrorTokenHandlerAmountIsZero();
125
+ }
126
+
127
+ // balance must be >= amount
128
+ uint256 balance = _token.balanceOf(from);
129
+ if (balance < amount.toInt()) {
130
+ revert ErrorTokenHandlerBalanceTooLow(address(_token), from, balance, amount.toInt());
131
+ }
132
+
133
+ // allowance must be >= amount
134
+ uint256 allowance = _token.allowance(from, address(this));
135
+ if (allowance < amount.toInt()) {
136
+ revert ErrorTokenHandlerAllowanceTooSmall(address(_token), from, address(this), allowance, amount.toInt());
137
+ }
57
138
  }
58
139
  }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {TokenHandler} from "./TokenHandler.sol";
5
+
6
+ library TokenHandlerDeployerLib {
7
+
8
+ function deployTokenHandler(address token, address authority) public returns (TokenHandler) {
9
+ return new TokenHandler(address(token), authority);
10
+ }
11
+
12
+ }
@@ -3,7 +3,7 @@ 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
8
  import {ObjectType} from "../type/ObjectType.sol";
9
9
  import {Seconds} from "../type/Seconds.sol";
@@ -42,8 +42,9 @@ interface IStaking is
42
42
  error ErrorStakingTargetNftIdZero();
43
43
  error ErrorStakingTargetTypeNotSupported(NftId targetNftId, ObjectType objectType);
44
44
  error ErrorStakingTargetUnexpectedObjectType(NftId targetNftId, ObjectType expectedObjectType, ObjectType actualObjectType);
45
- error ErrorStakingLockingPeriodZero(NftId targetNftId);
45
+ error ErrorStakingLockingPeriodTooShort(NftId targetNftId, Seconds minLockingPeriod, Seconds lockingPeriod);
46
46
  error ErrorStakingLockingPeriodTooLong(NftId targetNftId, Seconds maxLockingPeriod, Seconds lockingPeriod);
47
+ error ErrorStakingStakeLocked(NftId stakeNftId, Timestamp lockedUntil);
47
48
  error ErrorStakingRewardRateTooHigh(NftId targetNftId, UFixed maxRewardRate, UFixed rewardRate);
48
49
  error ErrorStakingTargetNotFound(NftId targetNftId);
49
50
  error ErrorStakingTargetTokenNotFound(NftId targetNftId, uint256 chainId, address token);
@@ -114,6 +114,24 @@ library StakeManagerLib {
114
114
  lockingPeriod = info.lockingPeriod;
115
115
  }
116
116
 
117
+ function checkUnstakeParameters(
118
+ StakingReader stakingReader,
119
+ NftId stakeNftId
120
+ )
121
+ public
122
+ view
123
+ returns (
124
+ UFixed rewardRate,
125
+ Seconds lockingPeriod
126
+ )
127
+ {
128
+ IStaking.StakeInfo memory stakeInfo = stakingReader.getStakeInfo(stakeNftId);
129
+
130
+ if (stakeInfo.lockedUntil > TimestampLib.blockTimestamp()) {
131
+ revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
132
+ }
133
+ }
134
+
117
135
 
118
136
  function checkTarget(
119
137
  StakingReader stakingReader,
@@ -153,31 +171,6 @@ library StakeManagerLib {
153
171
  // TODO add check for target specific max dip amount (min stake + tvl * stake rate + buffer)
154
172
  }
155
173
 
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
174
  function calculateRewardIncrease(
182
175
  StakingReader stakingReader,
183
176
  NftId stakeNftId,
@@ -1,27 +1,28 @@
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 {NftId, NftIdLib} from "../type/NftId.sol";
13
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
14
- 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";
15
15
  import {StakeManagerLib} from "./StakeManagerLib.sol";
16
16
  import {StakingReader} from "./StakingReader.sol";
17
17
  import {StakingStore} from "./StakingStore.sol";
18
18
  import {TargetManagerLib} from "./TargetManagerLib.sol";
19
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
19
+ import {Timestamp} from "../type/Timestamp.sol";
20
20
  import {TokenHandler} from "../shared/TokenHandler.sol";
21
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
21
22
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
22
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
23
+ import {UFixed} from "../type/UFixed.sol";
23
24
  import {Version, VersionLib} from "../type/Version.sol";
24
- import {Versionable} from "../shared/Versionable.sol";
25
+ import {Versionable} from "../upgradeability/Versionable.sol";
25
26
 
26
27
  contract Staking is
27
28
  Component,
@@ -37,6 +38,7 @@ contract Staking is
37
38
  struct StakingStorage {
38
39
  IRegistryService _registryService;
39
40
  TokenRegistry _tokenRegistry;
41
+ TokenHandler _tokenHandler;
40
42
  StakingStore _store;
41
43
  StakingReader _reader;
42
44
  NftId _protocolNftId;
@@ -299,7 +301,7 @@ contract Staking is
299
301
  StakingStorage storage $ = _getStakingStorage();
300
302
 
301
303
  // TODO implement
302
- }
304
+ }
303
305
 
304
306
 
305
307
  function updateRewards(NftId stakeNftId)
@@ -348,9 +350,10 @@ contract Staking is
348
350
  Amount rewardsClaimedAmount
349
351
  )
350
352
  {
351
- // TODO add check that stake locking is in the past
352
353
  StakingStorage storage $ = _getStakingStorage();
353
-
354
+
355
+ StakeManagerLib.checkUnstakeParameters($._reader, stakeNftId);
356
+
354
357
  // update rewards since last update
355
358
  NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
356
359
 
@@ -376,16 +379,7 @@ contract Staking is
376
379
  external
377
380
  restricted() // only staking service
378
381
  {
379
- TokenHandler tokenHandler = getTokenHandler();
380
- address stakingWallet = getWallet();
381
-
382
- StakeManagerLib.checkDipBalanceAndAllowance(
383
- getToken(),
384
- from,
385
- address(tokenHandler),
386
- dipAmount);
387
-
388
- tokenHandler.transfer(from, stakingWallet, dipAmount);
382
+ getTokenHandler().collectTokens(from, getWallet(), dipAmount);
389
383
  }
390
384
 
391
385
 
@@ -393,16 +387,7 @@ contract Staking is
393
387
  external
394
388
  restricted() // only staking service
395
389
  {
396
- TokenHandler tokenHandler = getTokenHandler();
397
- address stakingWallet = getWallet();
398
-
399
- StakeManagerLib.checkDipBalanceAndAllowance(
400
- getToken(),
401
- stakingWallet,
402
- address(tokenHandler),
403
- dipAmount);
404
-
405
- tokenHandler.transfer(stakingWallet, to, dipAmount);
390
+ getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
406
391
  }
407
392
 
408
393
 
@@ -420,6 +405,9 @@ contract Staking is
420
405
  return address(_getStakingStorage()._tokenRegistry);
421
406
  }
422
407
 
408
+ function getTokenHandler() public virtual override(Component, IComponent) view returns (TokenHandler tokenHandler) {
409
+ return _getStakingStorage()._tokenHandler;
410
+ }
423
411
 
424
412
  // from Versionable
425
413
  function getVersion()
@@ -490,14 +478,13 @@ contract Staking is
490
478
  "", // registry data
491
479
  ""); // component data
492
480
 
493
- _createAndSetTokenHandler();
494
-
495
481
  // wiring to external contracts
496
482
  StakingStorage storage $ = _getStakingStorage();
497
483
  $._protocolNftId = getRegistry().getProtocolNftId();
498
484
  $._store = StakingStore(stakingStoreAddress);
499
485
  $._reader = StakingStore(stakingStoreAddress).getStakingReader();
500
486
  $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
487
+ $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
501
488
 
502
489
  registerInterface(type(IStaking).interfaceId);
503
490
  }
@@ -1,13 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {Staking} from "./Staking.sol";
7
- import {StakingReader} from "./StakingReader.sol";
8
- import {StakingStore} from "./StakingStore.sol";
9
7
 
10
- import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
11
8
 
12
9
  contract StakingManager is
13
10
  ProxyManager
@@ -1,21 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount} from "../type/Amount.sol";
5
- import {Blocknumber} from "../type/Blocknumber.sol";
6
- import {IKeyValueStore} from "../shared/IKeyValueStore.sol";
7
- import {IComponent} from "../shared/IComponent.sol";
8
- import {InitializableCustom} from "../shared/InitializableCustom.sol";
9
4
  import {IRegistry} from "../registry/IRegistry.sol";
10
5
  import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
11
6
  import {IStaking} from "../staking/IStaking.sol";
12
- import {IVersionable} from "../shared/IVersionable.sol";
7
+
8
+ import {Amount} from "../type/Amount.sol";
9
+ import {Blocknumber} from "../type/Blocknumber.sol";
10
+ import {InitializableCustom} from "../shared/InitializableCustom.sol";
13
11
  import {NftId} from "../type/NftId.sol";
14
- import {ObjectType, STAKE, TARGET} from "../type/ObjectType.sol";
15
- import {Seconds} from "../type/Seconds.sol";
12
+ import {STAKE, TARGET} from "../type/ObjectType.sol";
16
13
  import {StakingStore} from "./StakingStore.sol";
17
14
  import {Timestamp} from "../type/Timestamp.sol";
18
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
15
+ import {UFixed} from "../type/UFixed.sol";
19
16
 
20
17
  contract StakingReader is
21
18
  IRegistryLinked,
@@ -122,11 +122,10 @@ contract StakingService is
122
122
 
123
123
  // transfer withdrawal amount to target owner
124
124
  address instanceOwner = getRegistry().ownerOf(instanceNftId);
125
+ emit LogStakingServiceRewardReservesDecreased(instanceNftId, instanceOwner, dipAmount, newBalance);
125
126
  $._staking.transferDipAmount(
126
127
  instanceOwner,
127
128
  dipAmount);
128
-
129
- emit LogStakingServiceRewardReservesDecreased(instanceNftId, instanceOwner, dipAmount, newBalance);
130
129
  }
131
130
 
132
131
 
@@ -169,12 +168,12 @@ contract StakingService is
169
168
  targetNftId,
170
169
  dipAmount);
171
170
 
171
+ emit LogStakingServiceStakeCreated(stakeNftId, targetNftId, stakeOwner, dipAmount);
172
+
172
173
  // collect staked dip by staking
173
174
  $._staking.collectDipAmount(
174
175
  stakeOwner,
175
176
  dipAmount);
176
-
177
- emit LogStakingServiceStakeCreated(stakeNftId, targetNftId, stakeOwner, dipAmount);
178
177
  }
179
178
 
180
179
 
@@ -197,12 +196,11 @@ contract StakingService is
197
196
 
198
197
  // collect staked dip by staking
199
198
  if (dipAmount.gtz()) {
199
+ emit LogStakingServiceStakeIncreased(stakeNftId, stakeOwner, dipAmount, stakeBalance);
200
200
  $._staking.collectDipAmount(
201
201
  stakeOwner,
202
202
  dipAmount);
203
203
  }
204
-
205
- emit LogStakingServiceStakeIncreased(stakeNftId, stakeOwner, dipAmount, stakeBalance);
206
204
  }
207
205
 
208
206
 
@@ -247,11 +245,10 @@ contract StakingService is
247
245
  address stakeOwner = msg.sender;
248
246
 
249
247
  Amount rewardsClaimedAmount = $._staking.claimRewards(stakeNftId);
248
+ emit LogStakingServiceRewardsClaimed(stakeNftId, stakeOwner, rewardsClaimedAmount);
250
249
  $._staking.transferDipAmount(
251
250
  stakeOwner,
252
251
  rewardsClaimedAmount);
253
-
254
- emit LogStakingServiceRewardsClaimed(stakeNftId, stakeOwner, rewardsClaimedAmount);
255
252
  }
256
253
 
257
254
 
@@ -270,11 +267,10 @@ contract StakingService is
270
267
  ) = $._staking.unstake(stakeNftId);
271
268
 
272
269
  Amount totalAmount = unstakedAmount + rewardsClaimedAmount;
270
+ emit LogStakingServiceUnstaked(stakeNftId, stakeOwner, totalAmount);
273
271
  $._staking.transferDipAmount(
274
272
  stakeOwner,
275
273
  totalAmount);
276
-
277
- emit LogStakingServiceUnstaked(stakeNftId, stakeOwner, totalAmount);
278
274
  }
279
275
 
280
276
 
@@ -389,12 +385,12 @@ contract StakingService is
389
385
  StakingServiceStorage storage $ = _getStakingServiceStorage();
390
386
  newBalance = $._staking.refillRewardReserves(targetNftId, dipAmount);
391
387
 
388
+ emit LogStakingServiceRewardReservesIncreased(targetNftId, rewardProvider, dipAmount, newBalance);
389
+
392
390
  // collect reward dip from provider
393
391
  $._staking.collectDipAmount(
394
392
  rewardProvider,
395
393
  dipAmount);
396
-
397
- emit LogStakingServiceRewardReservesIncreased(targetNftId, rewardProvider, dipAmount, newBalance);
398
394
  }
399
395
 
400
396
 
@@ -2,8 +2,8 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IRegistry} from "../registry/IRegistry.sol";
5
- import {IVersionable} from "../shared/IVersionable.sol";
6
- import {ProxyManager} from "../shared/ProxyManager.sol";
5
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
6
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
7
7
  import {StakingService} from "./StakingService.sol";
8
8
 
9
9
  contract StakingServiceManager is
@@ -3,31 +3,21 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
5
 
6
- import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
8
- import {ChainNft} from "../registry/ChainNft.sol";
9
- import {Component} from "../shared/Component.sol";
10
6
  import {IRegistry} from "../registry/IRegistry.sol";
11
- import {IRegistryService} from "../registry/IRegistryService.sol";
12
7
  import {IStaking} from "./IStaking.sol";
13
- import {IVersionable} from "../shared/IVersionable.sol";
14
- import {Key32} from "../type/Key32.sol";
8
+
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
+ import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
15
11
  import {KeyValueStore} from "../shared/KeyValueStore.sol";
16
12
  import {KEEP_STATE} from "../type/StateId.sol";
17
13
  import {NftId, NftIdLib} from "../type/NftId.sol";
18
14
  import {NftIdSet} from "../shared/NftIdSet.sol";
19
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
20
- import {Seconds, SecondsLib} from "../type/Seconds.sol";
15
+ import {PROTOCOL, STAKE, TARGET} from "../type/ObjectType.sol";
21
16
  import {StakingReader} from "./StakingReader.sol";
22
17
  import {TargetManagerLib} from "./TargetManagerLib.sol";
23
18
  import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
24
- import {TokenRegistry} from "../registry/TokenRegistry.sol";
25
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
26
- import {Version, VersionLib} from "../type/Version.sol";
27
- import {Versionable} from "../shared/Versionable.sol";
28
-
29
- import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
30
19
  import {StakingLifecycle} from "./StakingLifecycle.sol";
20
+ import {UFixed} from "../type/UFixed.sol";
31
21
 
32
22
 
33
23
  contract StakingStore is
@@ -132,9 +132,9 @@ library TargetManagerLib {
132
132
  public
133
133
  pure
134
134
  {
135
- // check locking period is > 0
136
- if (lockingPeriod.eqz()) {
137
- revert IStaking.ErrorStakingLockingPeriodZero(targetNftId);
135
+ // check locking period is >= min locking period
136
+ if (lockingPeriod.lt(getMinimumLockingPeriod())) {
137
+ revert IStaking.ErrorStakingLockingPeriodTooShort(targetNftId, getMinimumLockingPeriod(), lockingPeriod);
138
138
  }
139
139
 
140
140
  // check locking period <= max locking period
@@ -190,6 +190,10 @@ library TargetManagerLib {
190
190
  return SecondsLib.toSeconds(365 * 24 * 3600 / 2);
191
191
  }
192
192
 
193
+ /// @dev the minimum locking period is 24 hours
194
+ function getMinimumLockingPeriod() public pure returns (Seconds minLockingPeriod) {
195
+ return SecondsLib.toSeconds(24 * 3600);
196
+ }
193
197
 
194
198
  function getMaxRewardRate() public pure returns (UFixed maxRewardRate) {
195
199
  return UFixedLib.toUFixed(33, -2);
@@ -12,13 +12,15 @@ using {
12
12
  nqAmount as !=,
13
13
  ltAmount as <,
14
14
  gtAmount as >,
15
+ AmountLib.add,
15
16
  AmountLib.eq,
16
17
  AmountLib.eqz,
17
18
  AmountLib.gtz,
19
+ AmountLib.gt,
20
+ AmountLib.gte,
21
+ AmountLib.multiplyWith,
18
22
  AmountLib.toInt,
19
- AmountLib.add,
20
- AmountLib.toUFixed,
21
- AmountLib.multiplyWith
23
+ AmountLib.toUFixed
22
24
  } for Amount global;
23
25
 
24
26
  function addAmount(Amount a, Amount b) pure returns (Amount) {
@@ -77,16 +79,21 @@ library AmountLib {
77
79
  return Amount.unwrap(amount1) == Amount.unwrap(amount2);
78
80
  }
79
81
 
80
- /// @dev return true if amount a1 is smaller than a2
82
+ /// @dev return true if amount a1 is less than a2
81
83
  function lt(Amount a1, Amount a2) public pure returns (bool) {
82
84
  return Amount.unwrap(a1) < Amount.unwrap(a2);
83
85
  }
84
86
 
85
- /// @dev return true if amount a1 is larger than a2
87
+ /// @dev return true if amount a1 is greater than a2
86
88
  function gt(Amount a1, Amount a2) public pure returns (bool) {
87
89
  return Amount.unwrap(a1) > Amount.unwrap(a2);
88
90
  }
89
91
 
92
+ /// @dev return true if amount a1 is greater or equal than a2
93
+ function gte(Amount a1, Amount a2) public pure returns (bool) {
94
+ return Amount.unwrap(a1) >= Amount.unwrap(a2);
95
+ }
96
+
90
97
  /// @dev return minimum of a1 and a2.
91
98
  function min(Amount a1, Amount a2) public pure returns (Amount) {
92
99
  if (Amount.unwrap(a1) < Amount.unwrap(a2)) {
@@ -11,8 +11,14 @@ using {
11
11
  eqBlocknumber as ==,
12
12
  neBlocknumber as !=,
13
13
  BlocknumberLib.toInt,
14
+ BlocknumberLib.eq,
15
+ BlocknumberLib.ne,
14
16
  BlocknumberLib.eqz,
15
- BlocknumberLib.gtz
17
+ BlocknumberLib.gtz,
18
+ BlocknumberLib.gt,
19
+ BlocknumberLib.gte,
20
+ BlocknumberLib.lt,
21
+ BlocknumberLib.lte
16
22
  } for Blocknumber global;
17
23
 
18
24
  /// @dev return true if Blocknumber a is greater than Blocknumber b