@etherisc/gif-next 0.0.2-f8e07c7-917 → 0.0.2-f946ccd-184

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 (412) 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 +33 -52
  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/IAccessAdmin.sol/IAccessAdmin.json +0 -19
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +66 -248
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +24 -222
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +24 -37
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
  31. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  32. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1463 -0
  33. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  34. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  35. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1712 -0
  37. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  39. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  41. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  42. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1517 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1978 -0
  49. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  50. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  54. package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
  55. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +97 -100
  57. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  58. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +238 -123
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
  65. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +215 -219
  67. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  69. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  72. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  74. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  82. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  83. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  84. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  85. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +32 -238
  86. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  88. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -37
  91. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -222
  94. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
  96. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
  98. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  99. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +36 -284
  100. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  101. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  102. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +396 -163
  104. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +137 -89
  106. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  107. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  108. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  109. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +26 -95
  110. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -100
  112. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  113. package/artifacts/contracts/pool/Pool.sol/Pool.json +26 -280
  114. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  115. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +269 -248
  116. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +66 -82
  118. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  119. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
  120. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
  122. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  123. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +3 -225
  124. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  125. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  126. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  127. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +206 -175
  128. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +92 -100
  130. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  131. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  132. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  133. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +114 -0
  134. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +266 -119
  136. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  138. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  139. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  140. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  141. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  142. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  143. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +372 -316
  144. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  145. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
  146. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  147. package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
  148. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
  150. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  151. package/artifacts/contracts/product/Product.sol/Product.json +3 -225
  152. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  153. package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
  154. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  155. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
  156. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  157. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  158. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  159. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +221 -21
  160. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  162. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/Registry.sol/Registry.json +419 -82
  164. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  165. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +243 -131
  166. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  167. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -130
  168. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
  170. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  171. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  172. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  173. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  174. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  175. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  176. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  177. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  178. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  179. package/artifacts/contracts/shared/Component.sol/Component.json +0 -211
  180. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  181. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +132 -199
  182. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  183. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
  184. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  185. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
  186. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  187. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  188. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  189. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  190. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  191. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +56 -0
  192. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  193. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -37
  194. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  195. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  196. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +14 -46
  199. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  202. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  203. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  204. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  205. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  206. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -222
  207. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  208. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  209. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  210. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  211. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  213. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +18 -140
  215. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  217. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  218. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  219. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  220. package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
  221. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  222. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  223. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  224. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  225. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  226. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +27 -27
  227. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  228. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  229. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  230. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  231. package/artifacts/contracts/staking/Staking.sol/Staking.json +85 -262
  232. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  233. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  234. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  235. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
  236. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  237. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  238. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  239. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
  240. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  241. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
  242. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  243. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  244. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  245. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  246. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  247. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  249. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  251. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  253. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  255. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  257. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  258. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  259. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  261. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  262. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  263. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  265. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  267. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  269. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  271. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  273. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  275. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  277. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  280. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  281. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  282. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  284. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  286. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  288. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  290. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  291. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  292. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +39 -70
  293. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  294. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  295. package/contracts/authorization/AccessAdmin.sol +25 -24
  296. package/contracts/authorization/Authorization.sol +0 -1
  297. package/contracts/authorization/IAccessAdmin.sol +0 -1
  298. package/contracts/distribution/BasicDistribution.sol +4 -15
  299. package/contracts/distribution/BasicDistributionAuthorization.sol +2 -1
  300. package/contracts/distribution/Distribution.sol +22 -11
  301. package/contracts/distribution/DistributionService.sol +73 -25
  302. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  303. package/contracts/distribution/IDistributionComponent.sol +6 -1
  304. package/contracts/distribution/IDistributionService.sol +18 -2
  305. package/contracts/examples/fire/FirePool.sol +75 -0
  306. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  307. package/contracts/examples/fire/FireProduct.sol +324 -0
  308. package/contracts/examples/fire/FireProductAuthorization.sol +35 -0
  309. package/contracts/examples/fire/FireUSD.sol +26 -0
  310. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  311. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  312. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  313. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  314. package/contracts/instance/IInstance.sol +7 -30
  315. package/contracts/instance/Instance.sol +10 -35
  316. package/contracts/instance/InstanceAdmin.sol +23 -4
  317. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  318. package/contracts/instance/InstanceReader.sol +32 -7
  319. package/contracts/instance/InstanceService.sol +62 -39
  320. package/contracts/instance/InstanceServiceManager.sol +6 -7
  321. package/contracts/instance/InstanceStore.sol +12 -1
  322. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  323. package/contracts/instance/module/IBundle.sol +1 -1
  324. package/contracts/instance/module/IComponents.sol +1 -6
  325. package/contracts/instance/module/IDistribution.sol +0 -1
  326. package/contracts/instance/module/IPolicy.sol +22 -22
  327. package/contracts/mock/Dip.sol +1 -1
  328. package/contracts/oracle/Oracle.sol +4 -7
  329. package/contracts/oracle/OracleService.sol +9 -6
  330. package/contracts/oracle/OracleServiceManager.sol +6 -6
  331. package/contracts/pool/BasicPool.sol +7 -5
  332. package/contracts/pool/BasicPoolAuthorization.sol +8 -2
  333. package/contracts/pool/BundleService.sol +184 -30
  334. package/contracts/pool/BundleServiceManager.sol +6 -6
  335. package/contracts/pool/IBundleService.sol +33 -5
  336. package/contracts/pool/IPoolComponent.sol +7 -0
  337. package/contracts/pool/IPoolService.sol +36 -26
  338. package/contracts/pool/Pool.sol +39 -24
  339. package/contracts/pool/PoolService.sol +157 -85
  340. package/contracts/pool/PoolServiceManager.sol +4 -4
  341. package/contracts/product/ApplicationService.sol +43 -26
  342. package/contracts/product/ApplicationServiceManager.sol +4 -4
  343. package/contracts/product/BasicProduct.sol +3 -32
  344. package/contracts/product/ClaimService.sol +208 -78
  345. package/contracts/product/ClaimServiceManager.sol +4 -4
  346. package/contracts/product/IApplicationService.sol +1 -0
  347. package/contracts/product/IClaimService.sol +28 -5
  348. package/contracts/product/IPolicyService.sol +31 -32
  349. package/contracts/product/IPricingService.sol +7 -7
  350. package/contracts/product/IProductComponent.sol +0 -1
  351. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  352. package/contracts/product/PolicyService.sol +370 -194
  353. package/contracts/product/PolicyServiceManager.sol +4 -4
  354. package/contracts/product/PricingService.sol +46 -46
  355. package/contracts/product/PricingServiceManager.sol +3 -3
  356. package/contracts/product/Product.sol +67 -34
  357. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  358. package/contracts/product/RiskServiceManager.sol +39 -0
  359. package/contracts/registry/ChainNft.sol +65 -32
  360. package/contracts/registry/IRegistry.sol +49 -15
  361. package/contracts/registry/Registry.sol +321 -195
  362. package/contracts/registry/RegistryAdmin.sol +150 -51
  363. package/contracts/registry/RegistryService.sol +2 -2
  364. package/contracts/registry/RegistryServiceManager.sol +2 -2
  365. package/contracts/registry/ReleaseRegistry.sol +12 -8
  366. package/contracts/registry/ServiceAuthorizationV3.sol +2 -3
  367. package/contracts/shared/Component.sol +23 -29
  368. package/contracts/shared/ComponentService.sol +51 -32
  369. package/contracts/shared/ComponentServiceManager.sol +8 -5
  370. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  371. package/contracts/shared/ContractLib.sol +38 -0
  372. package/contracts/shared/IComponent.sol +4 -4
  373. package/contracts/shared/IComponentService.sol +5 -9
  374. package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
  375. package/contracts/shared/IPolicyHolder.sol +12 -22
  376. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  377. package/contracts/shared/InstanceLinkedComponent.sol +4 -4
  378. package/contracts/shared/NftOwnable.sol +7 -7
  379. package/contracts/shared/PolicyHolder.sol +14 -58
  380. package/contracts/shared/Registerable.sol +4 -4
  381. package/contracts/shared/RegistryLinked.sol +3 -2
  382. package/contracts/shared/Service.sol +16 -11
  383. package/contracts/shared/TokenHandler.sol +100 -19
  384. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  385. package/contracts/staking/IStaking.sol +2 -1
  386. package/contracts/staking/StakeManagerLib.sol +18 -25
  387. package/contracts/staking/Staking.sol +11 -27
  388. package/contracts/staking/StakingManager.sol +8 -6
  389. package/contracts/staking/StakingService.sol +10 -14
  390. package/contracts/staking/StakingServiceManager.sol +2 -2
  391. package/contracts/staking/TargetManagerLib.sol +7 -3
  392. package/contracts/type/Amount.sol +12 -5
  393. package/contracts/type/Blocknumber.sol +7 -1
  394. package/contracts/type/NftId.sol +1 -0
  395. package/contracts/type/ObjectType.sol +15 -11
  396. package/contracts/type/Referral.sol +1 -0
  397. package/contracts/type/RiskId.sol +15 -1
  398. package/contracts/type/Seconds.sol +21 -1
  399. package/contracts/type/StateId.sol +1 -0
  400. package/contracts/type/Timestamp.sol +11 -1
  401. package/contracts/type/UFixed.sol +29 -10
  402. package/contracts/upgradeability/ProxyManager.sol +67 -34
  403. package/contracts/upgradeability/Versionable.sol +2 -2
  404. package/package.json +1 -1
  405. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  406. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  407. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  408. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  409. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  410. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  411. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  412. package/contracts/product/ProductServiceManager.sol +0 -39
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
5
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+ import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
6
7
 
7
8
  import {IRegistry} from "../registry/IRegistry.sol";
8
9
  import {IService} from "./IService.sol";
@@ -19,28 +20,23 @@ abstract contract Service is
19
20
  Registerable,
20
21
  Versionable,
21
22
  AccessManagedUpgradeable,
23
+ ReentrancyGuardUpgradeable,
22
24
  IService
23
25
  {
24
26
 
25
27
  uint8 private constant GIF_MAJOR_VERSION = 3;
26
28
 
27
29
 
28
- function initializeService(
30
+ function _initializeService(
29
31
  address registry,
30
32
  address authority, // real authority for registry service adress(0) for other services
31
33
  address initialOwner
32
34
  )
33
- public
35
+ internal
34
36
  virtual
35
37
  onlyInitializing()
36
38
  {
37
- initializeRegisterable(
38
- registry,
39
- IRegistry(registry).getNftId(),
40
- SERVICE(),
41
- false, // is interceptor
42
- initialOwner,
43
- ""); // data
39
+ __ReentrancyGuard_init();
44
40
 
45
41
  // externally provided authority
46
42
  if(authority != address(0)) {
@@ -52,8 +48,17 @@ abstract contract Service is
52
48
  __AccessManaged_init(IAccessManaged(registryServiceAddress).authority());
53
49
  }
54
50
 
55
- registerInterface(type(IAccessManaged).interfaceId);
56
- registerInterface(type(IService).interfaceId);
51
+ _initializeRegisterable(
52
+ registry,
53
+ IRegistry(registry).getNftId(),
54
+ SERVICE(),
55
+ false, // is interceptor
56
+ initialOwner,
57
+ ""); // data
58
+
59
+
60
+ _registerInterface(type(IAccessManaged).interfaceId);
61
+ _registerInterface(type(IService).interfaceId);
57
62
  }
58
63
 
59
64
  function getDomain() external virtual pure returns(ObjectType serviceDomain) {
@@ -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
+ }
@@ -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,
@@ -18,6 +18,7 @@ import {StakingStore} from "./StakingStore.sol";
18
18
  import {TargetManagerLib} from "./TargetManagerLib.sol";
19
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
23
  import {UFixed} from "../type/UFixed.sol";
23
24
  import {Version, VersionLib} from "../type/Version.sol";
@@ -300,7 +301,7 @@ contract Staking is
300
301
  StakingStorage storage $ = _getStakingStorage();
301
302
 
302
303
  // TODO implement
303
- }
304
+ }
304
305
 
305
306
 
306
307
  function updateRewards(NftId stakeNftId)
@@ -349,9 +350,10 @@ contract Staking is
349
350
  Amount rewardsClaimedAmount
350
351
  )
351
352
  {
352
- // TODO add check that stake locking is in the past
353
353
  StakingStorage storage $ = _getStakingStorage();
354
-
354
+
355
+ StakeManagerLib.checkUnstakeParameters($._reader, stakeNftId);
356
+
355
357
  // update rewards since last update
356
358
  NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
357
359
 
@@ -377,16 +379,7 @@ contract Staking is
377
379
  external
378
380
  restricted() // only staking service
379
381
  {
380
- TokenHandler tokenHandler = getTokenHandler();
381
- address stakingWallet = getWallet();
382
-
383
- StakeManagerLib.checkDipBalanceAndAllowance(
384
- getToken(),
385
- from,
386
- address(tokenHandler),
387
- dipAmount);
388
-
389
- tokenHandler.transfer(from, stakingWallet, dipAmount);
382
+ getTokenHandler().collectTokens(from, getWallet(), dipAmount);
390
383
  }
391
384
 
392
385
 
@@ -394,16 +387,7 @@ contract Staking is
394
387
  external
395
388
  restricted() // only staking service
396
389
  {
397
- TokenHandler tokenHandler = getTokenHandler();
398
- address stakingWallet = getWallet();
399
-
400
- StakeManagerLib.checkDipBalanceAndAllowance(
401
- getToken(),
402
- stakingWallet,
403
- address(tokenHandler),
404
- dipAmount);
405
-
406
- tokenHandler.transfer(stakingWallet, to, dipAmount);
390
+ getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
407
391
  }
408
392
 
409
393
 
@@ -467,7 +451,7 @@ contract Staking is
467
451
  )
468
452
  internal
469
453
  virtual override
470
- initializer
454
+ initializer()
471
455
  {
472
456
  (
473
457
  address registryAddress,
@@ -482,7 +466,7 @@ contract Staking is
482
466
  TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
483
467
  address dipTokenAddress = tokenRegistry.getDipTokenAddress();
484
468
 
485
- initializeComponent(
469
+ _initializeComponent(
486
470
  authority,
487
471
  registryAddress,
488
472
  registry.getNftId(),
@@ -500,9 +484,9 @@ contract Staking is
500
484
  $._store = StakingStore(stakingStoreAddress);
501
485
  $._reader = StakingStore(stakingStoreAddress).getStakingReader();
502
486
  $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
503
- $._tokenHandler = new TokenHandler(address(getToken()));
487
+ $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
504
488
 
505
- registerInterface(type(IStaking).interfaceId);
489
+ _registerInterface(type(IStaking).interfaceId);
506
490
  }
507
491
 
508
492
 
@@ -18,9 +18,9 @@ contract StakingManager is
18
18
  address registry,
19
19
  address tokenRegistry,
20
20
  address stakingStore,
21
- address initialOwner
21
+ address initialOwner,
22
+ bytes32 salt
22
23
  )
23
- ProxyManager(registry)
24
24
  {
25
25
  Staking stakingImplementation = new Staking();
26
26
 
@@ -30,10 +30,12 @@ contract StakingManager is
30
30
  tokenRegistry,
31
31
  stakingStore,
32
32
  initialOwner);
33
-
34
- IVersionable versionable = deploy(
35
- _initialImplementation,
36
- _initializationData);
33
+
34
+ IVersionable versionable = initialize(
35
+ registry,
36
+ _initialImplementation,
37
+ _initializationData,
38
+ salt);
37
39
 
38
40
  _staking = Staking(address(versionable));
39
41
  }
@@ -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
 
@@ -335,7 +331,7 @@ contract StakingService is
335
331
  address stakingAddress
336
332
  ) = abi.decode(data, (address, address, address));
337
333
 
338
- initializeService(registryAddress, authority, owner);
334
+ _initializeService(registryAddress, authority, owner);
339
335
 
340
336
  StakingServiceStorage storage $ = _getStakingServiceStorage();
341
337
  $._registryService = RegistryService(_getServiceAddress(REGISTRY()));
@@ -343,7 +339,7 @@ contract StakingService is
343
339
  $._dip = $._staking.getToken();
344
340
  $._tokenHandler = $._staking.getTokenHandler();
345
341
 
346
- registerInterface(type(IStakingService).interfaceId);
342
+ _registerInterface(type(IStakingService).interfaceId);
347
343
  }
348
344
 
349
345
 
@@ -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
 
@@ -18,14 +18,14 @@ contract StakingServiceManager is
18
18
  address registryAddress,
19
19
  bytes32 salt
20
20
  )
21
- ProxyManager(registryAddress)
22
21
  {
23
22
  StakingService svc = new StakingService();
24
23
  bytes memory data = abi.encode(
25
24
  authority,
26
25
  registryAddress,
27
26
  IRegistry(registryAddress).getStakingAddress());
28
- IVersionable versionable = deployDetermenistic(
27
+ IVersionable versionable = initialize(
28
+ registryAddress,
29
29
  address(svc),
30
30
  data,
31
31
  salt);
@@ -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
@@ -14,6 +14,7 @@ using {
14
14
  NftIdLib.toInt,
15
15
  NftIdLib.gtz,
16
16
  NftIdLib.eqz,
17
+ NftIdLib.eq,
17
18
  NftIdLib.toKeyId,
18
19
  NftIdLib.toKey32
19
20
  } for NftId global;