@etherisc/gif-next 0.0.2-888aabe-141 → 0.0.2-88fccb3-776

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 (535) hide show
  1. package/README.md +89 -8
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +496 -255
  10. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  12. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +673 -0
  14. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
  16. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +277 -20
  18. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  19. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +395 -203
  21. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +143 -19
  23. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  26. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +161 -476
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +265 -31
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +102 -382
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +473 -287
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +151 -109
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +104 -194
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  40. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +318 -90
  41. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  43. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1445 -0
  45. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +644 -0
  47. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2002 -0
  49. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  50. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +644 -0
  51. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  52. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1388 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +644 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1152 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1612 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +644 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2389 -0
  65. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  66. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +644 -0
  67. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  68. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +236 -39
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +144 -93
  73. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  74. package/artifacts/contracts/instance/Instance.sol/Instance.json +256 -123
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +737 -327
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +209 -94
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1064 -341
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +172 -278
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +96 -96
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +827 -690
  87. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  88. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  89. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  91. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  92. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  94. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  96. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  97. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  98. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  99. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  100. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  105. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  106. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  107. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +133 -350
  109. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +247 -33
  111. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +117 -136
  114. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
  116. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  117. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +109 -318
  118. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  119. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
  120. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
  122. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  123. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +156 -421
  124. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  125. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +265 -31
  126. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  127. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +336 -209
  128. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +143 -97
  130. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  131. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +212 -35
  132. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  133. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +120 -212
  134. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  135. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +460 -308
  136. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  137. package/artifacts/contracts/pool/Pool.sol/Pool.json +110 -392
  138. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  139. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
  140. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  141. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +673 -552
  142. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +163 -97
  144. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  145. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +194 -178
  146. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +100 -90
  148. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  149. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +261 -439
  150. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  151. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +265 -31
  152. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  153. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +415 -234
  154. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +140 -114
  156. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  157. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +136 -9
  158. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  159. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +308 -16
  160. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  161. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +365 -104
  162. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +157 -83
  164. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  165. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +245 -233
  166. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  167. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +88 -8
  168. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  169. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +459 -309
  170. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  171. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
  172. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  173. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +141 -99
  174. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  175. package/artifacts/contracts/product/PricingService.sol/PricingService.json +232 -333
  176. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  177. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +109 -131
  178. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  179. package/artifacts/contracts/product/Product.sol/Product.json +253 -431
  180. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  181. package/artifacts/contracts/product/RiskService.sol/RiskService.json +688 -0
  182. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  183. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +736 -0
  184. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  185. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  186. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +334 -34
  188. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  189. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
  190. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  191. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  192. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  193. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  194. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  195. package/artifacts/contracts/registry/Registry.sol/Registry.json +540 -95
  196. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  197. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +640 -368
  198. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  199. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +878 -0
  200. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  201. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
  202. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  203. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
  204. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  205. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1954 -0
  206. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  207. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  208. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  209. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +423 -245
  210. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  211. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  212. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  213. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  214. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  215. package/artifacts/contracts/shared/Component.sol/Component.json +67 -277
  216. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +546 -586
  218. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  219. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +132 -124
  220. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  221. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
  222. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +597 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  227. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  228. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  229. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  230. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  231. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +80 -100
  232. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +513 -258
  234. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +106 -136
  236. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  237. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  238. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  239. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  240. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  241. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  242. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  243. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  244. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  245. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -0
  246. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  247. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  248. package/artifacts/contracts/shared/IService.sol/IService.json +55 -2
  249. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  250. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  251. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  252. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +98 -318
  253. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  254. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  255. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  256. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  257. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  258. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  259. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  260. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  261. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  262. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  263. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  264. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +122 -97
  265. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  266. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  267. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  268. package/artifacts/contracts/shared/Service.sol/Service.json +57 -111
  269. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  270. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
  271. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  272. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  273. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  274. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  275. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  276. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +196 -143
  277. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  278. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +152 -20
  279. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  280. package/artifacts/contracts/staking/Staking.sol/Staking.json +274 -391
  281. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  282. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  283. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  284. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  285. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  286. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +126 -95
  287. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  288. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +35 -67
  289. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  290. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +205 -168
  291. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  292. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +103 -85
  293. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  294. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +195 -135
  295. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  296. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +82 -36
  297. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  298. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/Amount.sol/AmountLib.json +63 -10
  300. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  302. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  304. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  306. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/Fee.sol/FeeLib.json +98 -37
  308. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  310. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  311. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  312. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  314. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  315. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  316. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  318. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  320. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  322. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  324. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  326. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
  328. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  330. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  332. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  334. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  335. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  336. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  337. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  338. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  339. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  340. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +109 -35
  341. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  342. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  343. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  344. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  345. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  346. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  347. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  348. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  349. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  350. package/contracts/accounting/AccountingService.sol +262 -0
  351. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  352. package/contracts/accounting/IAccountingService.sol +45 -0
  353. package/contracts/authorization/AccessAdmin.sol +338 -225
  354. package/contracts/authorization/AccessAdminLib.sol +183 -0
  355. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  356. package/contracts/authorization/Authorization.sol +350 -203
  357. package/contracts/authorization/IAccess.sol +13 -4
  358. package/contracts/authorization/IAccessAdmin.sol +69 -35
  359. package/contracts/authorization/IAuthorization.sol +33 -7
  360. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  361. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  362. package/contracts/distribution/BasicDistribution.sol +20 -28
  363. package/contracts/distribution/BasicDistributionAuthorization.sol +26 -9
  364. package/contracts/distribution/Distribution.sol +39 -96
  365. package/contracts/distribution/DistributionService.sol +205 -108
  366. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  367. package/contracts/distribution/IDistributionComponent.sol +6 -12
  368. package/contracts/distribution/IDistributionService.sol +40 -22
  369. package/contracts/examples/fire/DamageLevel.sol +59 -0
  370. package/contracts/examples/fire/FirePool.sol +86 -0
  371. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  372. package/contracts/examples/fire/FireProduct.sol +433 -0
  373. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  374. package/contracts/examples/fire/FireUSD.sol +26 -0
  375. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  376. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  377. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  378. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  379. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  380. package/contracts/examples/unpermissioned/SimpleProduct.sol +373 -0
  381. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  382. package/contracts/instance/BundleSet.sol +42 -38
  383. package/contracts/instance/IInstance.sol +64 -44
  384. package/contracts/instance/IInstanceService.sol +27 -31
  385. package/contracts/instance/Instance.sol +120 -70
  386. package/contracts/instance/InstanceAdmin.sol +287 -103
  387. package/contracts/instance/InstanceAuthorizationV3.sol +92 -61
  388. package/contracts/instance/InstanceReader.sol +288 -43
  389. package/contracts/instance/InstanceService.sol +207 -191
  390. package/contracts/instance/InstanceServiceManager.sol +6 -7
  391. package/contracts/instance/InstanceStore.sol +24 -2
  392. package/contracts/instance/RiskSet.sol +118 -0
  393. package/contracts/instance/base/ObjectCounter.sol +1 -2
  394. package/contracts/instance/base/ObjectLifecycle.sol +11 -4
  395. package/contracts/instance/base/ObjectSet.sol +31 -33
  396. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  397. package/contracts/instance/module/IBundle.sol +6 -5
  398. package/contracts/instance/module/IComponents.sol +30 -19
  399. package/contracts/instance/module/IDistribution.sol +21 -9
  400. package/contracts/instance/module/IPolicy.sol +50 -29
  401. package/contracts/instance/module/IRisk.sol +5 -0
  402. package/contracts/mock/Dip.sol +1 -1
  403. package/contracts/oracle/BasicOracle.sol +1 -4
  404. package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
  405. package/contracts/oracle/IOracleComponent.sol +2 -1
  406. package/contracts/oracle/IOracleService.sol +2 -1
  407. package/contracts/oracle/Oracle.sol +21 -24
  408. package/contracts/oracle/OracleService.sol +113 -81
  409. package/contracts/oracle/OracleServiceManager.sol +6 -6
  410. package/contracts/pool/BasicPool.sol +37 -28
  411. package/contracts/pool/BasicPoolAuthorization.sol +36 -9
  412. package/contracts/pool/BundleService.sol +194 -83
  413. package/contracts/pool/BundleServiceManager.sol +6 -6
  414. package/contracts/pool/IBundleService.sol +31 -22
  415. package/contracts/pool/IPoolComponent.sol +20 -12
  416. package/contracts/pool/IPoolService.sol +90 -75
  417. package/contracts/pool/Pool.sol +145 -131
  418. package/contracts/pool/PoolLib.sol +216 -0
  419. package/contracts/pool/PoolService.sol +538 -219
  420. package/contracts/pool/PoolServiceManager.sol +4 -4
  421. package/contracts/product/ApplicationService.sol +87 -43
  422. package/contracts/product/ApplicationServiceManager.sol +4 -4
  423. package/contracts/product/BasicProduct.sol +12 -45
  424. package/contracts/product/BasicProductAuthorization.sol +25 -9
  425. package/contracts/product/ClaimService.sol +367 -151
  426. package/contracts/product/ClaimServiceManager.sol +4 -4
  427. package/contracts/product/IApplicationService.sol +9 -2
  428. package/contracts/product/IClaimService.sol +44 -8
  429. package/contracts/product/IPolicyService.sol +53 -36
  430. package/contracts/product/IPricingService.sol +11 -10
  431. package/contracts/product/IProductComponent.sol +27 -7
  432. package/contracts/product/{IProductService.sol → IRiskService.sol} +8 -8
  433. package/contracts/product/PolicyService.sol +458 -269
  434. package/contracts/product/PolicyServiceLib.sol +65 -0
  435. package/contracts/product/PolicyServiceManager.sol +4 -4
  436. package/contracts/product/PricingService.sol +69 -60
  437. package/contracts/product/PricingServiceManager.sol +4 -4
  438. package/contracts/product/Product.sol +165 -107
  439. package/contracts/product/RiskService.sol +154 -0
  440. package/contracts/product/RiskServiceManager.sol +39 -0
  441. package/contracts/registry/ChainNft.sol +72 -40
  442. package/contracts/registry/IRegistry.sol +64 -28
  443. package/contracts/registry/IRegistryService.sol +5 -12
  444. package/contracts/registry/IRelease.sol +26 -0
  445. package/contracts/registry/ITransferInterceptor.sol +1 -2
  446. package/contracts/registry/Registry.sol +357 -203
  447. package/contracts/registry/RegistryAdmin.sol +162 -269
  448. package/contracts/registry/RegistryAuthorization.sol +267 -0
  449. package/contracts/registry/RegistryService.sol +37 -48
  450. package/contracts/registry/RegistryServiceManager.sol +3 -3
  451. package/contracts/registry/ReleaseAdmin.sol +253 -0
  452. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  453. package/contracts/registry/ReleaseRegistry.sol +272 -242
  454. package/contracts/registry/ServiceAuthorizationV3.sol +183 -52
  455. package/contracts/registry/TokenRegistry.sol +6 -8
  456. package/contracts/shared/Component.sol +65 -129
  457. package/contracts/shared/ComponentService.sol +448 -357
  458. package/contracts/shared/ComponentServiceManager.sol +8 -5
  459. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  460. package/contracts/shared/ContractLib.sol +281 -0
  461. package/contracts/shared/IComponent.sol +5 -17
  462. package/contracts/shared/IComponentService.sol +46 -42
  463. package/contracts/shared/IInstanceLinkedComponent.sol +7 -27
  464. package/contracts/shared/ILifecycle.sol +3 -1
  465. package/contracts/shared/INftOwnable.sol +2 -0
  466. package/contracts/shared/IPolicyHolder.sol +12 -22
  467. package/contracts/shared/IRegisterable.sol +23 -1
  468. package/contracts/shared/IService.sol +3 -5
  469. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +11 -3
  470. package/contracts/shared/InstanceLinkedComponent.sol +81 -37
  471. package/contracts/shared/KeyValueStore.sol +1 -1
  472. package/contracts/shared/Lifecycle.sol +15 -4
  473. package/contracts/shared/NftOwnable.sol +31 -11
  474. package/contracts/shared/PolicyHolder.sol +17 -57
  475. package/contracts/shared/Registerable.sol +52 -21
  476. package/contracts/shared/RegistryLinked.sol +9 -14
  477. package/contracts/shared/Service.sol +15 -32
  478. package/contracts/shared/TokenHandler.sol +310 -26
  479. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  480. package/contracts/staking/IStaking.sol +19 -11
  481. package/contracts/staking/IStakingService.sol +16 -4
  482. package/contracts/staking/Staking.sol +103 -71
  483. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +95 -45
  484. package/contracts/staking/StakingManager.sol +8 -6
  485. package/contracts/staking/StakingReader.sol +18 -21
  486. package/contracts/staking/StakingService.sol +90 -37
  487. package/contracts/staking/StakingServiceManager.sol +6 -5
  488. package/contracts/staking/StakingStore.sol +2 -1
  489. package/contracts/staking/TargetManagerLib.sol +7 -3
  490. package/contracts/type/Amount.sol +27 -5
  491. package/contracts/type/Blocknumber.sol +7 -1
  492. package/contracts/type/ClaimId.sol +6 -1
  493. package/contracts/type/Fee.sol +8 -8
  494. package/contracts/type/Key32.sol +2 -2
  495. package/contracts/type/Key32Set.sol +62 -0
  496. package/contracts/type/NftId.sol +7 -0
  497. package/contracts/type/ObjectType.sol +57 -34
  498. package/contracts/type/PayoutId.sol +10 -10
  499. package/contracts/type/Referral.sol +1 -0
  500. package/contracts/type/RiskId.sol +38 -6
  501. package/contracts/type/RoleId.sol +23 -15
  502. package/contracts/type/Seconds.sol +21 -1
  503. package/contracts/type/Selector.sol +5 -0
  504. package/contracts/type/StateId.sol +15 -1
  505. package/contracts/type/Timestamp.sol +10 -5
  506. package/contracts/type/UFixed.sol +56 -126
  507. package/contracts/type/Version.sol +54 -5
  508. package/contracts/upgradeability/ProxyManager.sol +68 -34
  509. package/contracts/upgradeability/Versionable.sol +2 -2
  510. package/package.json +5 -4
  511. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  512. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  513. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  514. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  515. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  516. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  517. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  518. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  519. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  520. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  521. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  522. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  523. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  524. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  525. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  526. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  527. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -460
  528. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  529. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  530. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  531. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  532. package/contracts/instance/module/IAccess.sol +0 -46
  533. package/contracts/product/ProductService.sol +0 -99
  534. package/contracts/product/ProductServiceManager.sol +0 -39
  535. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {Amount} from "../type/Amount.sol";
5
7
  import {IComponent} from "../shared/IComponent.sol";
6
8
  import {IVersionable} from "../upgradeability/IVersionable.sol";
@@ -22,6 +24,7 @@ interface IStaking is
22
24
  // target parameters
23
25
  event LogStakingLockingPeriodSet(NftId targetNftId, Seconds oldLockingPeriod, Seconds lockingPeriod);
24
26
  event LogStakingRewardRateSet(NftId targetNftId, UFixed oldRewardRate, UFixed rewardRate);
27
+ event LogStakingMaxStakedAmountSet(NftId targetNftId, Amount maxStakedAmount);
25
28
 
26
29
  // modifiers
27
30
  error ErrorStakingNotStake(NftId stakeNftId);
@@ -30,6 +33,9 @@ interface IStaking is
30
33
  error ErrorStakingNotStakingOwner();
31
34
  error ErrorStakingNotNftOwner(NftId nftId);
32
35
 
36
+ // initializeTokenHandler
37
+ error ErrorStakingNotRegistry(address registry);
38
+
33
39
  // staking rate
34
40
  error ErrorStakingTokenNotRegistered(uint256 chainId, address token);
35
41
 
@@ -42,13 +48,14 @@ interface IStaking is
42
48
  error ErrorStakingTargetNftIdZero();
43
49
  error ErrorStakingTargetTypeNotSupported(NftId targetNftId, ObjectType objectType);
44
50
  error ErrorStakingTargetUnexpectedObjectType(NftId targetNftId, ObjectType expectedObjectType, ObjectType actualObjectType);
45
- error ErrorStakingLockingPeriodZero(NftId targetNftId);
51
+ error ErrorStakingLockingPeriodTooShort(NftId targetNftId, Seconds minLockingPeriod, Seconds lockingPeriod);
46
52
  error ErrorStakingLockingPeriodTooLong(NftId targetNftId, Seconds maxLockingPeriod, Seconds lockingPeriod);
53
+ error ErrorStakingStakeLocked(NftId stakeNftId, Timestamp lockedUntil);
47
54
  error ErrorStakingRewardRateTooHigh(NftId targetNftId, UFixed maxRewardRate, UFixed rewardRate);
48
55
  error ErrorStakingTargetNotFound(NftId targetNftId);
49
56
  error ErrorStakingTargetTokenNotFound(NftId targetNftId, uint256 chainId, address token);
57
+ error ErrorStakingTargetMaxStakedAmountExceeded(NftId targetNftId, Amount maxStakedAmount, Amount stakedAmount);
50
58
 
51
- error ErrorStakingTargetNotActive(NftId targetNftId);
52
59
  error ErrorStakingStakeAmountZero(NftId targetNftId);
53
60
 
54
61
  // info for individual stake
@@ -61,8 +68,13 @@ interface IStaking is
61
68
  uint256 chainId;
62
69
  Seconds lockingPeriod;
63
70
  UFixed rewardRate;
71
+ Amount maxStakedAmount;
64
72
  }
65
73
 
74
+ function initializeTokenHandler() external;
75
+
76
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external;
77
+
66
78
  // staking rate management
67
79
 
68
80
  /// @dev sets the rate that converts 1 token of total value locked into the
@@ -89,6 +101,10 @@ interface IStaking is
89
101
  /// permissioned: only the staking service may call this function
90
102
  function setRewardRate(NftId targetNftId, UFixed rewardRate) external;
91
103
 
104
+ /// @dev set the maximum staked amount for the specified target.
105
+ /// permissioned: only the staking service may call this function
106
+ function setMaxStakedAmount(NftId targetNftId, Amount maxStakedAmount) external;
107
+
92
108
  /// @dev (re)fills the staking reward reserves for the specified target
93
109
  /// unpermissioned: anybody may fill up staking reward reserves
94
110
  function refillRewardReserves(NftId targetNftId, Amount dipAmount) external returns (Amount newBalance);
@@ -126,7 +142,7 @@ interface IStaking is
126
142
  /// @dev restakes the dips to a new target.
127
143
  /// the sum of the staked dips and the accumulated rewards will be restaked.
128
144
  /// permissioned: only staking service may call this function.
129
- function restake(NftId stakeNftId, NftId newTargetNftId) external returns (NftId newStakeNftId);
145
+ function restake(NftId stakeNftId, NftId newStakeNftId) external returns (Amount newStakeBalance);
130
146
 
131
147
  /// @dev retuns the specified amount of dips to the holder of the specified stake nft.
132
148
  /// if dipAmount is set to Amount.max() all staked dips and all rewards are transferred to
@@ -152,14 +168,6 @@ interface IStaking is
152
168
  Amount rewardsClaimedAmount
153
169
  );
154
170
 
155
- //--- helper functions --------------------------------------------------//
156
-
157
- /// @dev transfers the specified amount of dips from the from address to the staking wallet.
158
- function collectDipAmount(address from, Amount dipAmount) external;
159
-
160
- /// @dev transfers the specified amount of dips from the staking wallet to the to addess.
161
- function transferDipAmount(address to, Amount dipAmount) external;
162
-
163
171
  //--- view and pure functions -------------------------------------------//
164
172
 
165
173
  function getStakingStore() external view returns (StakingStore stakingStore);
@@ -7,9 +7,7 @@ import {Amount} from "../type/Amount.sol";
7
7
  import {IService} from "../shared/IService.sol";
8
8
  import {IStaking} from "./IStaking.sol";
9
9
  import {NftId} from "../type/NftId.sol";
10
- import {ObjectType} from "../type/ObjectType.sol";
11
10
  import {Seconds} from "../type/Seconds.sol";
12
- import {Timestamp} from "../type/Timestamp.sol";
13
11
  import {TokenHandler} from "../shared/TokenHandler.sol";
14
12
  import {UFixed} from "../type/UFixed.sol";
15
13
 
@@ -28,16 +26,18 @@ interface IStakingService is IService
28
26
  event LogStakingServiceStakeCreated(NftId stakeNftId, NftId targetNftId, address owner, Amount stakedAmount);
29
27
  event LogStakingServiceStakeIncreased(NftId stakeNftId, address owner, Amount stakedAmount, Amount stakeBalance);
30
28
  event LogStakingServiceUnstaked(NftId stakeNftId, address stakeOwner, Amount totalAmount);
29
+ event LogStakingServiceStakeRestaked(address stakeOwner, NftId indexed stakeNftId, NftId newStakeNftId, NftId indexed newTargetNftId, Amount indexed newStakeBalance);
31
30
 
32
31
  event LogStakingServiceRewardsUpdated(NftId stakeNftId);
33
32
  event LogStakingServiceRewardsClaimed(NftId stakeNftId, address stakeOwner, Amount rewardsClaimedAmount);
34
33
 
35
34
  // modifiers
36
- error ErrorStakingServiceNotNftOwner(NftId nftId, address expectedOwner, address owner);
35
+ error ErrorStakingServiceNotStakingOwner(address account);
37
36
  error ErrorStakingServiceNotStaking(address stakingAddress);
38
37
  error ErrorStakingServiceNotSupportingIStaking(address stakingAddress);
39
38
 
40
39
  // create
40
+ error ErrorStakingServiceTargetUnknown(NftId targetNftId);
41
41
  error ErrorStakingServiceZeroTargetNftId();
42
42
  error ErrorStakingServiceNotTargetNftId(NftId targetNftId);
43
43
  error ErrorStakingServiceNotActiveTargetNftId(NftId targetNftId);
@@ -51,6 +51,13 @@ interface IStakingService is IService
51
51
  // function setProtocolLockingPeriod(Seconds lockingPeriod) external;
52
52
  // TODO also make sure that protocol rewards can be refilled and withdrawn
53
53
 
54
+ /// @dev Approves the staking token handler.
55
+ /// Reverts if the staking token handler wallet is not the token handler itself.
56
+ function approveTokenHandler(
57
+ IERC20Metadata token,
58
+ Amount amount
59
+ ) external;
60
+
54
61
  /// @dev creates/registers an on-chain instance staking target.
55
62
  /// function granted to instance service
56
63
  function createInstanceTarget(
@@ -67,6 +74,10 @@ interface IStakingService is IService
67
74
  /// Permissioned: Only owner of the specified target.
68
75
  function setInstanceRewardRate(NftId instanceNftId, UFixed rewardRate) external;
69
76
 
77
+ /// @dev Set the instance max staked amount to the specified value.
78
+ /// Permissioned: Only owner of the specified target.
79
+ function setInstanceMaxStakedAmount(NftId instanceNftId, Amount maxStakingAmount) external;
80
+
70
81
  /// @dev (Re)fills the staking reward reserves for the specified target using the dips provided by the reward provider.
71
82
  /// unpermissioned: anybody may fill up staking reward reserves
72
83
  function refillInstanceRewardReserves(NftId instanceNftId, address rewardProvider, Amount dipAmount) external returns (Amount newBalance);
@@ -111,7 +122,8 @@ interface IStakingService is IService
111
122
  )
112
123
  external
113
124
  returns (
114
- NftId newStakeNftId
125
+ NftId newStakeNftId,
126
+ Amount newStakeBalance
115
127
  );
116
128
 
117
129
 
@@ -1,26 +1,31 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {IRegistry} from "../registry/IRegistry.sol";
5
- import {IRegistryService} from "../registry/IRegistryService.sol";
7
+ import {IRelease} from "../registry/IRelease.sol";
6
8
  import {IStaking} from "./IStaking.sol";
7
9
  import {IVersionable} from "../upgradeability/IVersionable.sol";
8
10
 
9
11
  import {Amount, AmountLib} from "../type/Amount.sol";
10
12
  import {Component} from "../shared/Component.sol";
11
13
  import {IComponent} from "../shared/IComponent.sol";
14
+ import {IComponentService} from "../shared/IComponentService.sol";
12
15
  import {NftId} from "../type/NftId.sol";
13
- import {ObjectType, STAKING} from "../type/ObjectType.sol";
16
+ import {ObjectType, STAKE, STAKING} from "../type/ObjectType.sol";
14
17
  import {Seconds} from "../type/Seconds.sol";
15
- import {StakeManagerLib} from "./StakeManagerLib.sol";
18
+ import {Registerable} from "../shared/Registerable.sol";
19
+ import {StakingLib} from "./StakingLib.sol";
16
20
  import {StakingReader} from "./StakingReader.sol";
17
21
  import {StakingStore} from "./StakingStore.sol";
18
22
  import {TargetManagerLib} from "./TargetManagerLib.sol";
19
23
  import {Timestamp} from "../type/Timestamp.sol";
20
24
  import {TokenHandler} from "../shared/TokenHandler.sol";
25
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
21
26
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
22
27
  import {UFixed} from "../type/UFixed.sol";
23
- import {Version, VersionLib} from "../type/Version.sol";
28
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
24
29
  import {Versionable} from "../upgradeability/Versionable.sol";
25
30
 
26
31
  contract Staking is
@@ -29,13 +34,11 @@ contract Staking is
29
34
  IStaking
30
35
  {
31
36
  string public constant CONTRACT_NAME = "Staking";
32
- uint8 private constant GIF_MAJOR_VERSION = 3;
33
37
 
34
38
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Staking.sol")) - 1)) & ~bytes32(uint256(0xff));
35
39
  bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
36
40
 
37
41
  struct StakingStorage {
38
- IRegistryService _registryService;
39
42
  TokenRegistry _tokenRegistry;
40
43
  TokenHandler _tokenHandler;
41
44
  StakingStore _store;
@@ -59,6 +62,32 @@ contract Staking is
59
62
  _;
60
63
  }
61
64
 
65
+ function initializeTokenHandler()
66
+ external
67
+ {
68
+ if (msg.sender != address(getRegistry())) {
69
+ revert ErrorStakingNotRegistry(msg.sender);
70
+ }
71
+
72
+ StakingStorage storage $ = _getStakingStorage();
73
+ address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
74
+ $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
75
+ address(getRegistry()),
76
+ address(this),
77
+ dipToken,
78
+ getRegistry().getAuthority());
79
+ }
80
+
81
+
82
+ function approveTokenHandler(IERC20Metadata token, Amount amount)
83
+ public
84
+ restricted()
85
+ onlyOwner()
86
+ {
87
+ _approveTokenHandler(token, amount);
88
+ }
89
+
90
+
62
91
  // set/update staking reader
63
92
  function setStakingReader(StakingReader stakingReader)
64
93
  external
@@ -118,7 +147,8 @@ contract Staking is
118
147
  objectType: expectedObjectType,
119
148
  chainId: chainId,
120
149
  lockingPeriod: initialLockingPeriod,
121
- rewardRate: initialRewardRate}));
150
+ rewardRate: initialRewardRate,
151
+ maxStakedAmount: AmountLib.max()}));
122
152
  }
123
153
 
124
154
 
@@ -166,6 +196,21 @@ contract Staking is
166
196
  emit LogStakingRewardRateSet(targetNftId, oldRewardRate, rewardRate);
167
197
  }
168
198
 
199
+ function setMaxStakedAmount(NftId targetNftId, Amount maxStakedAmount)
200
+ external
201
+ virtual
202
+ restricted()
203
+ onlyTarget(targetNftId)
204
+ {
205
+ IStaking.TargetInfo memory targetInfo = getStakingReader().getTargetInfo(targetNftId);
206
+
207
+ targetInfo.maxStakedAmount = maxStakedAmount;
208
+
209
+ _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
210
+
211
+ emit LogStakingMaxStakedAmountSet(targetNftId, maxStakedAmount);
212
+ }
213
+
169
214
 
170
215
  function refillRewardReserves(NftId targetNftId, Amount dipAmount)
171
216
  external
@@ -247,7 +292,7 @@ contract Staking is
247
292
  restricted() // only staking service
248
293
  {
249
294
  StakingStorage storage $ = _getStakingStorage();
250
- Timestamp lockedUntil = StakeManagerLib.checkCreateParameters(
295
+ Timestamp lockedUntil = StakingLib.checkCreateParameters(
251
296
  $._reader,
252
297
  targetNftId,
253
298
  stakeAmount);
@@ -277,7 +322,7 @@ contract Staking is
277
322
  returns (Amount stakeBalance)
278
323
  {
279
324
  StakingStorage storage $ = _getStakingStorage();
280
- stakeBalance = StakeManagerLib.stake(
325
+ stakeBalance = StakingLib.stake(
281
326
  getRegistry(),
282
327
  $._reader,
283
328
  $._store,
@@ -288,20 +333,25 @@ contract Staking is
288
333
 
289
334
  function restake(
290
335
  NftId stakeNftId,
291
- NftId newTargetNftId
336
+ NftId newStakeNftId
292
337
  )
293
338
  external
294
339
  virtual
295
340
  restricted() // only staking service
296
341
  onlyStake(stakeNftId)
297
- returns (NftId newStakeNftId)
342
+ returns (Amount newStakeBalance)
298
343
  {
344
+ _checkNftType(stakeNftId, STAKE());
345
+ _checkNftType(newStakeNftId, STAKE());
346
+
299
347
  // TODO add check that allows additional staking amount
300
348
  StakingStorage storage $ = _getStakingStorage();
301
-
302
- // TODO implement
303
- }
304
-
349
+ newStakeBalance = StakingLib.restake(
350
+ $._reader,
351
+ $._store,
352
+ stakeNftId,
353
+ newStakeNftId);
354
+ }
305
355
 
306
356
  function updateRewards(NftId stakeNftId)
307
357
  external
@@ -349,9 +399,10 @@ contract Staking is
349
399
  Amount rewardsClaimedAmount
350
400
  )
351
401
  {
352
- // TODO add check that stake locking is in the past
353
402
  StakingStorage storage $ = _getStakingStorage();
354
-
403
+
404
+ StakingLib.checkUnstakeParameters($._reader, stakeNftId);
405
+
355
406
  // update rewards since last update
356
407
  NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
357
408
 
@@ -370,43 +421,6 @@ contract Staking is
370
421
  }
371
422
 
372
423
 
373
-
374
- //--- other functions ---------------------------------------------------//
375
-
376
- function collectDipAmount(address from, Amount dipAmount)
377
- external
378
- restricted() // only staking service
379
- {
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);
390
- }
391
-
392
-
393
- function transferDipAmount(address to, Amount dipAmount)
394
- external
395
- restricted() // only staking service
396
- {
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);
407
- }
408
-
409
-
410
424
  //--- view functions ----------------------------------------------------//
411
425
 
412
426
  function getStakingReader() public view returns (StakingReader reader) {
@@ -425,14 +439,24 @@ contract Staking is
425
439
  return _getStakingStorage()._tokenHandler;
426
440
  }
427
441
 
428
- // from Versionable
442
+ // from IRegisterable
443
+ function getRelease()
444
+ public
445
+ pure
446
+ virtual override (IRelease, Registerable)
447
+ returns(VersionPart)
448
+ {
449
+ return VersionPartLib.toVersionPart(3);
450
+ }
451
+
452
+ // from IVersionable
429
453
  function getVersion()
430
454
  public
431
455
  pure
432
- virtual override (IVersionable, Versionable)
456
+ virtual override (Component, IVersionable, Versionable)
433
457
  returns(Version)
434
458
  {
435
- return VersionLib.toVersion(GIF_MAJOR_VERSION,0,0);
459
+ return VersionLib.toVersion(3,0,0);
436
460
  }
437
461
 
438
462
  //--- internal functions ------------------------------------------------//
@@ -449,7 +473,7 @@ contract Staking is
449
473
  UFixed rewardRate;
450
474
 
451
475
  (targetNftId, rewardRate) = reader.getTargetRewardRate(stakeNftId);
452
- (Amount rewardIncrement, ) = StakeManagerLib.calculateRewardIncrease(
476
+ (Amount rewardIncrement, ) = StakingLib.calculateRewardIncrease(
453
477
  reader,
454
478
  stakeNftId,
455
479
  rewardRate);
@@ -461,13 +485,23 @@ contract Staking is
461
485
  }
462
486
 
463
487
 
488
+ function _approveTokenHandler(IERC20Metadata token, Amount amount)
489
+ internal
490
+ virtual override
491
+ {
492
+ IComponentService(_getServiceAddress(STAKING())).approveTokenHandler(
493
+ token,
494
+ amount);
495
+ }
496
+
497
+
464
498
  function _initialize(
465
499
  address owner,
466
500
  bytes memory data
467
501
  )
468
502
  internal
469
503
  virtual override
470
- initializer
504
+ initializer()
471
505
  {
472
506
  (
473
507
  address registryAddress,
@@ -482,27 +516,25 @@ contract Staking is
482
516
  TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
483
517
  address dipTokenAddress = tokenRegistry.getDipTokenAddress();
484
518
 
485
- initializeComponent(
519
+ // wiring to external contracts
520
+ StakingStorage storage $ = _getStakingStorage();
521
+ $._protocolNftId = registry.getProtocolNftId();
522
+ $._store = StakingStore(stakingStoreAddress);
523
+ $._reader = StakingStore(stakingStoreAddress).getStakingReader();
524
+ $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
525
+
526
+ _initializeComponent(
486
527
  authority,
487
528
  registryAddress,
488
- registry.getNftId(),
529
+ registry.getNftId(), // parent nft id
489
530
  CONTRACT_NAME,
490
- dipTokenAddress,
491
531
  STAKING(),
492
532
  false, // is interceptor
493
533
  stakingOwner,
494
534
  "", // registry data
495
535
  ""); // component data
496
536
 
497
- // wiring to external contracts
498
- StakingStorage storage $ = _getStakingStorage();
499
- $._protocolNftId = getRegistry().getProtocolNftId();
500
- $._store = StakingStore(stakingStoreAddress);
501
- $._reader = StakingStore(stakingStoreAddress).getStakingReader();
502
- $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
503
- $._tokenHandler = new TokenHandler(address(getToken()));
504
-
505
- registerInterface(type(IStaking).interfaceId);
537
+ _registerInterface(type(IStaking).interfaceId);
506
538
  }
507
539
 
508
540
 
@@ -1,16 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
-
6
4
  import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {Component} from "../shared/Component.sol";
8
5
  import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IRegistryService} from "../registry/IRegistryService.sol";
10
6
  import {IStaking} from "./IStaking.sol";
11
- import {Key32} from "../type/Key32.sol";
12
7
  import {NftId} from "../type/NftId.sol";
13
- import {ObjectType, INSTANCE, PROTOCOL, TARGET} from "../type/ObjectType.sol";
14
8
  import {Seconds, SecondsLib} from "../type/Seconds.sol";
15
9
  import {StakingReader} from "./StakingReader.sol";
16
10
  import {StakingStore} from "./StakingStore.sol";
@@ -18,7 +12,7 @@ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
18
12
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
19
13
 
20
14
 
21
- library StakeManagerLib {
15
+ library StakingLib {
22
16
 
23
17
  function stake(
24
18
  IRegistry registry,
@@ -51,7 +45,12 @@ library StakeManagerLib {
51
45
 
52
46
  // TODO check that additional dip, rewards and rewards increment
53
47
  // are still ok with max target staking amount
54
- NftId targetNftId = registry.getObjectInfo(stakeNftId).parentNftId;
48
+ NftId targetNftId = registry.getParentNftId(stakeNftId);
49
+ Amount maxStakedAmount = stakingReader.getTargetMaxStakedAmount(targetNftId);
50
+
51
+ if (stakeBalance > maxStakedAmount) {
52
+ revert IStaking.ErrorStakingTargetMaxStakedAmountExceeded(targetNftId, maxStakedAmount, stakeBalance);
53
+ }
55
54
 
56
55
  stakingStore.restakeRewards(
57
56
  stakeNftId,
@@ -72,6 +71,55 @@ library StakeManagerLib {
72
71
 
73
72
  }
74
73
 
74
+ function restake(
75
+ StakingReader stakingReader,
76
+ StakingStore stakingStore,
77
+ NftId oldStakeNftId,
78
+ NftId newStakeNftId
79
+ )
80
+ external
81
+ returns (Amount newStakeBalance)
82
+ {
83
+ checkUnstakeParameters(stakingReader, oldStakeNftId);
84
+ (NftId oldTargetNftId, UFixed oldRewardRate) = stakingReader.getTargetRewardRate(oldStakeNftId);
85
+
86
+ // calculate new rewards update and unstake full amount
87
+ (
88
+ Amount rewardIncrementAmount,
89
+ ) = calculateRewardIncrease(
90
+ stakingReader,
91
+ oldStakeNftId,
92
+ oldRewardRate);
93
+ stakingStore.updateRewards(
94
+ oldStakeNftId,
95
+ oldTargetNftId,
96
+ rewardIncrementAmount);
97
+ (
98
+ Amount unstakedAmount,
99
+ Amount rewardsAmount
100
+ ) = stakingStore.unstakeUpTo(
101
+ oldStakeNftId,
102
+ oldTargetNftId,
103
+ AmountLib.max(), // unstake all stakes
104
+ AmountLib.max()); // claim all rewards
105
+
106
+ // calculate full restake amount
107
+ newStakeBalance = unstakedAmount + rewardsAmount;
108
+ NftId newTargetNftId = stakingReader.getTargetNftId(newStakeNftId);
109
+
110
+ // create new staking target and increase stake
111
+ Timestamp newLockedUntil = _checkCreateParameters(stakingReader, newTargetNftId, newStakeBalance);
112
+ stakingStore.create(
113
+ newStakeNftId,
114
+ IStaking.StakeInfo({
115
+ lockedUntil: newLockedUntil
116
+ }));
117
+ stakingStore.increaseStake(
118
+ newStakeNftId,
119
+ newTargetNftId,
120
+ newStakeBalance);
121
+ }
122
+
75
123
  function checkCreateParameters(
76
124
  StakingReader stakingReader,
77
125
  NftId targetNftId,
@@ -82,6 +130,19 @@ library StakeManagerLib {
82
130
  returns (
83
131
  Timestamp lockedUntil
84
132
  )
133
+ {
134
+ return _checkCreateParameters(stakingReader, targetNftId, dipAmount);
135
+ }
136
+
137
+ function _checkCreateParameters(
138
+ StakingReader stakingReader,
139
+ NftId targetNftId,
140
+ Amount dipAmount
141
+ )
142
+ internal view
143
+ returns (
144
+ Timestamp lockedUntil
145
+ )
85
146
  {
86
147
  Seconds lockingPeriod = checkTarget(stakingReader, targetNftId);
87
148
  checkDipAmount(stakingReader, targetNftId, dipAmount);
@@ -104,16 +165,33 @@ library StakeManagerLib {
104
165
  {
105
166
  NftId targetNftId = stakingReader.getTargetNftId(stakeNftId);
106
167
 
107
- // only accept stakes for active targets
108
- if (!stakingReader.isActive(targetNftId)) {
109
- revert IStaking.ErrorStakingTargetNotActive(targetNftId);
168
+ // target nft id must be registered
169
+ if (!stakingReader.isTarget(targetNftId)) {
170
+ revert IStaking.ErrorStakingNotTarget(targetNftId);
110
171
  }
111
-
172
+
112
173
  IStaking.TargetInfo memory info = stakingReader.getTargetInfo(targetNftId);
113
174
  rewardRate = info.rewardRate;
114
175
  lockingPeriod = info.lockingPeriod;
115
176
  }
116
177
 
178
+ function checkUnstakeParameters(
179
+ StakingReader stakingReader,
180
+ NftId stakeNftId
181
+ )
182
+ public
183
+ view
184
+ returns (
185
+ Seconds lockingPeriod
186
+ )
187
+ {
188
+ IStaking.StakeInfo memory stakeInfo = stakingReader.getStakeInfo(stakeNftId);
189
+
190
+ if (stakeInfo.lockedUntil > TimestampLib.blockTimestamp()) {
191
+ revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
192
+ }
193
+ }
194
+
117
195
 
118
196
  function checkTarget(
119
197
  StakingReader stakingReader,
@@ -128,11 +206,6 @@ library StakeManagerLib {
128
206
  revert IStaking.ErrorStakingNotTarget(targetNftId);
129
207
  }
130
208
 
131
- // only accept stakes for active targets
132
- if (!stakingReader.isActive(targetNftId)) {
133
- revert IStaking.ErrorStakingTargetNotActive(targetNftId);
134
- }
135
-
136
209
  lockingPeriod = stakingReader.getTargetInfo(targetNftId).lockingPeriod;
137
210
  }
138
211
 
@@ -143,41 +216,19 @@ library StakeManagerLib {
143
216
  Amount dipAmount
144
217
  )
145
218
  public
146
- pure
219
+ view
147
220
  {
148
221
  // check stake amount > 0
149
222
  if (dipAmount.eqz()) {
150
223
  revert IStaking.ErrorStakingStakeAmountZero(targetNftId);
151
224
  }
152
225
 
153
- // TODO add check for target specific max dip amount (min stake + tvl * stake rate + buffer)
154
- }
155
-
156
-
157
- function checkDipBalanceAndAllowance(
158
- IERC20Metadata dip,
159
- address owner,
160
- address tokenHandlerAddress,
161
- Amount dipAmount
162
- )
163
- public
164
- view
165
- {
166
- // check balance
167
- uint256 amount = dipAmount.toInt();
168
- uint256 dipBalance = dip.balanceOf(owner);
169
- if (dipBalance < amount) {
170
- revert IStaking.ErrorStakingDipBalanceInsufficient(owner, amount, dipBalance);
171
- }
172
-
173
- // check allowance
174
- uint256 dipAllowance = dip.allowance(owner, tokenHandlerAddress);
175
- if (dipAllowance < amount) {
176
- revert IStaking.ErrorStakingDipAllowanceInsufficient(owner, tokenHandlerAddress, amount, dipAllowance);
226
+ Amount maxStakedAmount = stakingReader.getTargetMaxStakedAmount(targetNftId);
227
+ if (dipAmount > maxStakedAmount) {
228
+ revert IStaking.ErrorStakingTargetMaxStakedAmountExceeded(targetNftId, maxStakedAmount, dipAmount);
177
229
  }
178
230
  }
179
231
 
180
-
181
232
  function calculateRewardIncrease(
182
233
  StakingReader stakingReader,
183
234
  NftId stakeNftId,
@@ -203,11 +254,10 @@ library StakeManagerLib {
203
254
  rewardRate,
204
255
  duration,
205
256
  stakeAmount);
206
-
257
+
207
258
  totalDipAmount = stakeAmount + rewardAmount + rewardIncreaseAmount;
208
259
  }
209
260
 
210
-
211
261
  function calculateRewardAmount(
212
262
  UFixed rewardRate,
213
263
  Seconds duration,