@etherisc/gif-next 0.0.2-d9bed37-033 → 0.0.2-d9d5e42-801

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 (493) hide show
  1. package/README.md +81 -7
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1046 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +752 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +814 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +640 -269
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +409 -33
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +525 -213
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +179 -19
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +246 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +420 -27
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +114 -291
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +381 -46
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +46 -164
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +404 -194
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +141 -67
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +32 -132
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +210 -71
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +121 -198
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +380 -45
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +287 -341
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +380 -45
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +185 -252
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +76 -155
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +239 -203
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +672 -362
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  63. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  64. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  66. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +502 -49
  67. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +302 -14
  69. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/Instance.sol/Instance.json +531 -81
  71. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  72. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1022 -326
  73. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +393 -52
  75. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1067 -479
  77. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +324 -83
  79. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +59 -47
  81. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +676 -570
  83. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  84. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  85. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  87. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  89. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  90. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  92. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  94. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  96. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  101. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +66 -167
  104. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +379 -47
  106. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +36 -71
  109. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
  111. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +50 -103
  113. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +128 -81
  115. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +91 -41
  117. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +69 -137
  119. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +380 -45
  121. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +165 -337
  123. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +85 -87
  125. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +62 -142
  127. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -118
  129. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +182 -235
  131. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  132. package/artifacts/contracts/pool/Pool.sol/Pool.json +57 -149
  133. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  134. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +546 -0
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +357 -368
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +125 -63
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  140. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +167 -67
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +80 -38
  143. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  144. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +182 -215
  145. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +380 -45
  147. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  148. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +260 -179
  149. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +96 -78
  151. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  152. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +103 -10
  153. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
  155. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +112 -56
  157. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +48 -3
  159. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  160. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +163 -178
  161. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +58 -7
  163. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  164. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +233 -194
  165. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  166. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  167. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  168. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +103 -73
  169. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PricingService.sol/PricingService.json +115 -119
  171. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  172. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +69 -55
  173. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  174. package/artifacts/contracts/product/Product.sol/Product.json +176 -209
  175. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  176. package/artifacts/contracts/product/RiskService.sol/RiskService.json +143 -77
  177. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +80 -38
  179. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  181. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  182. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +60 -12
  183. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  184. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
  185. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  186. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  187. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  188. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  189. package/artifacts/contracts/registry/Registry.sol/Registry.json +98 -50
  190. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  191. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +726 -465
  192. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  193. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1053 -0
  194. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -46
  196. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  197. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +56 -34
  198. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  199. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
  200. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  201. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  202. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  203. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +386 -64
  204. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  205. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +437 -26
  206. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  207. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +15 -15
  208. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  209. package/artifacts/contracts/shared/Component.sol/Component.json +49 -88
  210. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  211. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +225 -531
  212. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  213. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +77 -75
  214. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +544 -4
  216. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  217. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  218. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  219. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  222. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  223. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +36 -57
  224. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +134 -367
  226. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +36 -71
  228. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  229. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  230. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  231. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +120 -1
  234. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  236. package/artifacts/contracts/shared/IService.sol/IService.json +27 -3
  237. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  238. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
  239. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  240. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +49 -102
  241. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  242. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  243. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  244. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  245. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  246. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  247. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  248. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  249. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  250. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -62
  251. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  252. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  253. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  254. package/artifacts/contracts/shared/Service.sol/Service.json +27 -16
  255. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +297 -111
  257. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  258. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  259. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  260. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  261. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  262. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +241 -89
  263. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  264. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +134 -10
  265. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  266. package/artifacts/contracts/staking/Staking.sol/Staking.json +340 -203
  267. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  268. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  269. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  270. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  271. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  272. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +84 -56
  273. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  274. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +90 -61
  275. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  276. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +203 -56
  277. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  278. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +73 -39
  279. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  280. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +163 -149
  281. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  282. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +61 -51
  283. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  284. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/Amount.sol/AmountLib.json +11 -11
  286. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  289. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  291. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/Fee.sol/FeeLib.json +94 -38
  293. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  295. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  296. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  297. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  299. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  300. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  301. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  303. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  305. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  306. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  307. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  309. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +69 -7
  311. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  313. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  314. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +21 -2
  315. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  317. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  319. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  322. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  324. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +61 -37
  326. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  328. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  330. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  331. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  332. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +32 -16
  333. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  334. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  335. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  336. package/contracts/accounting/AccountingService.sol +274 -0
  337. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  338. package/contracts/accounting/IAccountingService.sol +47 -0
  339. package/contracts/authorization/AccessAdmin.sol +426 -242
  340. package/contracts/authorization/AccessAdminLib.sol +396 -0
  341. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  342. package/contracts/authorization/Authorization.sol +142 -257
  343. package/contracts/authorization/IAccess.sol +25 -7
  344. package/contracts/authorization/IAccessAdmin.sol +87 -80
  345. package/contracts/authorization/IAuthorization.sol +9 -42
  346. package/contracts/authorization/IServiceAuthorization.sol +55 -17
  347. package/contracts/authorization/ServiceAuthorization.sol +247 -33
  348. package/contracts/distribution/BasicDistribution.sol +18 -16
  349. package/contracts/distribution/BasicDistributionAuthorization.sol +30 -10
  350. package/contracts/distribution/Distribution.sol +41 -79
  351. package/contracts/distribution/DistributionService.sol +177 -97
  352. package/contracts/distribution/DistributionServiceManager.sol +1 -1
  353. package/contracts/distribution/IDistributionComponent.sol +3 -10
  354. package/contracts/distribution/IDistributionService.sol +32 -24
  355. package/contracts/examples/fire/FirePool.sol +21 -8
  356. package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
  357. package/contracts/examples/fire/FireProduct.sol +32 -14
  358. package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
  359. package/contracts/examples/unpermissioned/SimpleDistribution.sol +39 -8
  360. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  361. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
  362. package/contracts/examples/unpermissioned/SimplePool.sol +32 -6
  363. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  364. package/contracts/examples/unpermissioned/SimpleProduct.sol +49 -27
  365. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  366. package/contracts/instance/BundleSet.sol +42 -38
  367. package/contracts/instance/IInstance.sol +97 -18
  368. package/contracts/instance/IInstanceService.sol +52 -11
  369. package/contracts/instance/Instance.sol +171 -57
  370. package/contracts/instance/InstanceAdmin.sol +271 -165
  371. package/contracts/instance/InstanceAuthorizationV3.sol +115 -43
  372. package/contracts/instance/InstanceReader.sol +449 -312
  373. package/contracts/instance/InstanceService.sol +270 -171
  374. package/contracts/instance/InstanceServiceManager.sol +1 -1
  375. package/contracts/instance/InstanceStore.sol +13 -2
  376. package/contracts/instance/RiskSet.sol +118 -0
  377. package/contracts/instance/base/BalanceStore.sol +3 -5
  378. package/contracts/instance/base/ObjectCounter.sol +1 -2
  379. package/contracts/instance/base/ObjectLifecycle.sol +4 -2
  380. package/contracts/instance/base/ObjectSet.sol +31 -33
  381. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  382. package/contracts/instance/module/IBundle.sol +6 -5
  383. package/contracts/instance/module/IComponents.sol +20 -9
  384. package/contracts/instance/module/IDistribution.sol +21 -8
  385. package/contracts/instance/module/IPolicy.sol +28 -7
  386. package/contracts/instance/module/IRisk.sol +5 -0
  387. package/contracts/oracle/BasicOracle.sol +1 -3
  388. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  389. package/contracts/oracle/IOracle.sol +9 -4
  390. package/contracts/oracle/Oracle.sol +1 -3
  391. package/contracts/oracle/OracleService.sol +96 -77
  392. package/contracts/oracle/OracleServiceManager.sol +1 -1
  393. package/contracts/pool/BasicPool.sol +23 -4
  394. package/contracts/pool/BasicPoolAuthorization.sol +33 -8
  395. package/contracts/pool/BundleService.sol +55 -154
  396. package/contracts/pool/BundleServiceManager.sol +1 -1
  397. package/contracts/pool/IBundleService.sol +15 -43
  398. package/contracts/pool/IPoolComponent.sol +1 -7
  399. package/contracts/pool/IPoolService.sol +58 -60
  400. package/contracts/pool/Pool.sol +106 -98
  401. package/contracts/pool/PoolLib.sol +356 -0
  402. package/contracts/pool/PoolService.sol +275 -230
  403. package/contracts/pool/PoolServiceManager.sol +1 -1
  404. package/contracts/product/ApplicationService.sol +60 -20
  405. package/contracts/product/ApplicationServiceManager.sol +1 -1
  406. package/contracts/product/BasicProduct.sol +8 -12
  407. package/contracts/product/BasicProductAuthorization.sol +32 -11
  408. package/contracts/product/ClaimService.sol +167 -148
  409. package/contracts/product/ClaimServiceManager.sol +1 -1
  410. package/contracts/product/IApplicationService.sol +8 -2
  411. package/contracts/product/IClaimService.sol +14 -2
  412. package/contracts/product/IPolicyService.sol +25 -11
  413. package/contracts/product/IPricingService.sol +1 -0
  414. package/contracts/product/IProductComponent.sol +4 -1
  415. package/contracts/product/IRiskService.sol +7 -7
  416. package/contracts/product/PolicyService.sol +243 -297
  417. package/contracts/product/PolicyServiceLib.sol +139 -0
  418. package/contracts/product/PolicyServiceManager.sol +1 -1
  419. package/contracts/product/PricingService.sol +52 -46
  420. package/contracts/product/PricingServiceManager.sol +3 -3
  421. package/contracts/product/Product.sol +67 -53
  422. package/contracts/product/RiskService.sol +92 -31
  423. package/contracts/product/RiskServiceManager.sol +1 -1
  424. package/contracts/registry/ChainNft.sol +4 -2
  425. package/contracts/registry/IRegistry.sol +14 -15
  426. package/contracts/registry/IRelease.sol +29 -0
  427. package/contracts/registry/Registry.sol +16 -3
  428. package/contracts/registry/RegistryAdmin.sol +101 -361
  429. package/contracts/registry/RegistryAuthorization.sol +284 -0
  430. package/contracts/registry/RegistryService.sol +3 -3
  431. package/contracts/registry/RegistryServiceManager.sol +1 -1
  432. package/contracts/registry/ReleaseAdmin.sol +195 -0
  433. package/contracts/registry/ReleaseLifecycle.sol +2 -0
  434. package/contracts/registry/ReleaseRegistry.sol +154 -135
  435. package/contracts/registry/ServiceAuthorizationV3.sol +197 -46
  436. package/contracts/registry/TokenRegistry.sol +12 -13
  437. package/contracts/shared/Component.sol +52 -113
  438. package/contracts/shared/ComponentService.sol +349 -442
  439. package/contracts/shared/ComponentServiceManager.sol +1 -1
  440. package/contracts/shared/ContractLib.sol +276 -3
  441. package/contracts/shared/IComponent.sol +2 -18
  442. package/contracts/shared/IComponentService.sol +27 -38
  443. package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
  444. package/contracts/shared/IRegisterable.sol +15 -5
  445. package/contracts/shared/IService.sol +3 -5
  446. package/contracts/shared/InitializableERC165.sol +9 -1
  447. package/contracts/shared/InstanceLinkedComponent.sol +6 -25
  448. package/contracts/shared/NftOwnable.sol +6 -6
  449. package/contracts/shared/PolicyHolder.sol +4 -3
  450. package/contracts/shared/Registerable.sol +41 -20
  451. package/contracts/shared/RegistryLinked.sol +7 -13
  452. package/contracts/shared/Service.sol +13 -30
  453. package/contracts/shared/TokenHandler.sol +266 -93
  454. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  455. package/contracts/staking/IStaking.sol +46 -19
  456. package/contracts/staking/IStakingService.sol +21 -8
  457. package/contracts/staking/Staking.sol +190 -82
  458. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +80 -23
  459. package/contracts/staking/StakingReader.sol +28 -19
  460. package/contracts/staking/StakingService.sol +77 -16
  461. package/contracts/staking/StakingServiceManager.sol +5 -4
  462. package/contracts/staking/StakingStore.sol +3 -2
  463. package/contracts/staking/TargetManagerLib.sol +1 -1
  464. package/contracts/type/Fee.sol +8 -8
  465. package/contracts/type/Key32.sol +2 -2
  466. package/contracts/type/Key32Set.sol +62 -0
  467. package/contracts/type/NftId.sol +6 -0
  468. package/contracts/type/ObjectType.sol +69 -38
  469. package/contracts/type/RiskId.sol +26 -8
  470. package/contracts/type/RoleId.sol +63 -45
  471. package/contracts/type/Seconds.sol +4 -0
  472. package/contracts/type/Selector.sol +5 -0
  473. package/contracts/type/String.sol +12 -0
  474. package/contracts/type/Timestamp.sol +0 -5
  475. package/contracts/type/UFixed.sol +34 -127
  476. package/contracts/type/Version.sol +54 -5
  477. package/contracts/upgradeability/ProxyManager.sol +14 -12
  478. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +7 -1
  479. package/contracts/upgradeability/Versionable.sol +4 -1
  480. package/package.json +4 -4
  481. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
  482. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
  483. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  484. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  485. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  486. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -474
  487. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  488. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  489. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  490. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  491. package/contracts/authorization/ReleaseAccessManager.sol +0 -38
  492. package/contracts/instance/module/IAccess.sol +0 -46
  493. package/contracts/shared/ComponentVerifyingService.sol +0 -126
@@ -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,11 +165,11 @@ 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;
@@ -121,12 +182,11 @@ library StakeManagerLib {
121
182
  public
122
183
  view
123
184
  returns (
124
- UFixed rewardRate,
125
185
  Seconds lockingPeriod
126
186
  )
127
187
  {
128
188
  IStaking.StakeInfo memory stakeInfo = stakingReader.getStakeInfo(stakeNftId);
129
-
189
+
130
190
  if (stakeInfo.lockedUntil > TimestampLib.blockTimestamp()) {
131
191
  revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
132
192
  }
@@ -146,11 +206,6 @@ library StakeManagerLib {
146
206
  revert IStaking.ErrorStakingNotTarget(targetNftId);
147
207
  }
148
208
 
149
- // only accept stakes for active targets
150
- if (!stakingReader.isActive(targetNftId)) {
151
- revert IStaking.ErrorStakingTargetNotActive(targetNftId);
152
- }
153
-
154
209
  lockingPeriod = stakingReader.getTargetInfo(targetNftId).lockingPeriod;
155
210
  }
156
211
 
@@ -161,14 +216,17 @@ library StakeManagerLib {
161
216
  Amount dipAmount
162
217
  )
163
218
  public
164
- pure
219
+ view
165
220
  {
166
221
  // check stake amount > 0
167
222
  if (dipAmount.eqz()) {
168
223
  revert IStaking.ErrorStakingStakeAmountZero(targetNftId);
169
224
  }
170
225
 
171
- // TODO add check for target specific max dip amount (min stake + tvl * stake rate + buffer)
226
+ Amount maxStakedAmount = stakingReader.getTargetMaxStakedAmount(targetNftId);
227
+ if (dipAmount > maxStakedAmount) {
228
+ revert IStaking.ErrorStakingTargetMaxStakedAmountExceeded(targetNftId, maxStakedAmount, dipAmount);
229
+ }
172
230
  }
173
231
 
174
232
  function calculateRewardIncrease(
@@ -196,11 +254,10 @@ library StakeManagerLib {
196
254
  rewardRate,
197
255
  duration,
198
256
  stakeAmount);
199
-
257
+
200
258
  totalDipAmount = stakeAmount + rewardAmount + rewardIncreaseAmount;
201
259
  }
202
260
 
203
-
204
261
  function calculateRewardAmount(
205
262
  UFixed rewardRate,
206
263
  Seconds duration,
@@ -10,8 +10,9 @@ import {IStaking} from "../staking/IStaking.sol";
10
10
  import {Amount} from "../type/Amount.sol";
11
11
  import {Blocknumber} from "../type/Blocknumber.sol";
12
12
  import {NftId} from "../type/NftId.sol";
13
- import {STAKE, TARGET} from "../type/ObjectType.sol";
13
+ import {Seconds} from "../type/Seconds.sol";
14
14
  import {StakingStore} from "./StakingStore.sol";
15
+ import {STAKE, TARGET} from "../type/ObjectType.sol";
15
16
  import {Timestamp} from "../type/Timestamp.sol";
16
17
  import {UFixed} from "../type/UFixed.sol";
17
18
 
@@ -57,6 +58,10 @@ contract StakingReader is
57
58
  return _staking;
58
59
  }
59
60
 
61
+ function getProtocolNftId() external view returns (NftId protocolNftId) {
62
+ return _registry.getProtocolNftId();
63
+ }
64
+
60
65
  function getStakingRate(uint256 chainId, address token) external view returns (UFixed stakingRate) {
61
66
  return _store.getStakingRate(chainId, token);
62
67
  }
@@ -77,23 +82,8 @@ contract StakingReader is
77
82
  }
78
83
 
79
84
 
80
- function isActive(NftId targetNftId) external view returns (bool) {
81
- return _store.getTargetNftIdSet().isActive(targetNftId);
82
- }
83
-
84
-
85
- function activeTargets() external view returns (uint256) {
86
- return _store.getTargetNftIdSet().activeNftIds();
87
- }
88
-
89
-
90
- function getActiveTargetNftId(uint256 idx) external view returns (NftId) {
91
- return _store.getTargetNftIdSet().getActiveNftId(idx);
92
- }
93
-
94
-
95
85
  function getTargetNftId(NftId stakeNftId) public view returns (NftId targetNftId) {
96
- return _registry.getObjectInfo(stakeNftId).parentNftId;
86
+ return _registry.getParentNftId(stakeNftId);
97
87
  }
98
88
 
99
89
 
@@ -113,14 +103,33 @@ contract StakingReader is
113
103
  }
114
104
 
115
105
 
116
- /// @dev get the reward rate that applies to the specified stake nft id.
106
+ /// @dev Get the locking period that applies to the specified stake NFT ID.
107
+ function getTargetLockingPeriod(NftId stakeNftId) external view returns (NftId targetNftId, Seconds lockingPeriod) {
108
+ targetNftId = getTargetNftId(stakeNftId);
109
+ lockingPeriod = getTargetInfo(targetNftId).lockingPeriod;
110
+ }
111
+
112
+
113
+ /// @dev Get the reward rate that applies to the specified stake NFT ID.
117
114
  function getTargetRewardRate(NftId stakeNftId) external view returns (NftId targetNftId, UFixed rewardRate) {
118
115
  targetNftId = getTargetNftId(stakeNftId);
119
116
  rewardRate = getTargetInfo(targetNftId).rewardRate;
120
117
  }
121
118
 
122
119
 
123
- /// @dev get the reward rate for the specified target nft id.
120
+ /// @dev Get the max staked amount allowed for the specified target NFT ID.
121
+ function getTargetMaxStakedAmount(NftId targetNftId) external view returns (Amount maxStakedAmount) {
122
+ return getTargetInfo(targetNftId).maxStakedAmount;
123
+ }
124
+
125
+
126
+ /// @dev Get the reward rate for the specified target NFT ID.
127
+ function getLockingPeriod(NftId targetNftId) external view returns (Seconds lockingPeriod) {
128
+ return getTargetInfo(targetNftId).lockingPeriod;
129
+ }
130
+
131
+
132
+ /// @dev Get the reward rate for the specified target NFT ID.
124
133
  function getRewardRate(NftId targetNftId) external view returns (UFixed rewardRate) {
125
134
  return getTargetInfo(targetNftId).rewardRate;
126
135
  }
@@ -3,12 +3,13 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {Amount} from "../type/Amount.sol";
7
6
  import {IRegisterable} from "../shared/IRegisterable.sol";
8
7
  import {IRegistry} from "../registry/IRegistry.sol";
9
- import {RegistryService} from "../registry/RegistryService.sol";
10
8
  import {IStaking} from "./IStaking.sol";
11
9
  import {IStakingService} from "./IStakingService.sol";
10
+
11
+ import {Amount} from "../type/Amount.sol";
12
+ import {RegistryService} from "../registry/RegistryService.sol";
12
13
  import {NftId, NftIdLib} from "../type/NftId.sol";
13
14
  import {ObjectType, INSTANCE, REGISTRY, STAKE, STAKING} from "../type/ObjectType.sol";
14
15
  import {Seconds} from "../type/Seconds.sol";
@@ -32,6 +33,28 @@ contract StakingService is
32
33
  TokenHandler _tokenHandler;
33
34
  }
34
35
 
36
+
37
+ modifier onlyStaking() {
38
+ if (msg.sender != address(_getStakingServiceStorage()._staking)) {
39
+ revert ErrorStakingServiceNotStaking(msg.sender);
40
+ }
41
+ _;
42
+ }
43
+
44
+
45
+ function approveTokenHandler(
46
+ IERC20Metadata token,
47
+ Amount amount
48
+ )
49
+ external
50
+ virtual
51
+ onlyStaking()
52
+ {
53
+ _getStakingServiceStorage()._tokenHandler.approve(token, amount);
54
+ }
55
+
56
+
57
+ /// @inheritdoc IStakingService
35
58
  function createInstanceTarget(
36
59
  NftId targetNftId,
37
60
  Seconds initialLockingPeriod,
@@ -76,6 +99,17 @@ contract StakingService is
76
99
  rewardRate);
77
100
  }
78
101
 
102
+ function setInstanceMaxStakedAmount(NftId instanceNftId, Amount maxStakingAmount)
103
+ external
104
+ virtual
105
+ restricted()
106
+ {
107
+ _checkNftType(instanceNftId, INSTANCE());
108
+ _getStakingServiceStorage()._staking.setMaxStakedAmount(
109
+ instanceNftId,
110
+ maxStakingAmount);
111
+ }
112
+
79
113
 
80
114
  function refillInstanceRewardReserves(NftId instanceNftId, address rewardProvider, Amount dipAmount)
81
115
  external
@@ -113,7 +147,7 @@ contract StakingService is
113
147
  // transfer withdrawal amount to target owner
114
148
  address instanceOwner = getRegistry().ownerOf(instanceNftId);
115
149
  emit LogStakingServiceRewardReservesDecreased(instanceNftId, instanceOwner, dipAmount, newBalance);
116
- $._staking.transferDipAmount(
150
+ $._tokenHandler.pushToken(
117
151
  instanceOwner,
118
152
  dipAmount);
119
153
  }
@@ -161,8 +195,8 @@ contract StakingService is
161
195
  emit LogStakingServiceStakeCreated(stakeNftId, targetNftId, stakeOwner, dipAmount);
162
196
 
163
197
  // collect staked dip by staking
164
- $._staking.collectDipAmount(
165
- stakeOwner,
198
+ $._tokenHandler.pullToken(
199
+ stakeOwner,
166
200
  dipAmount);
167
201
  }
168
202
 
@@ -189,7 +223,7 @@ contract StakingService is
189
223
  // collect staked dip by staking
190
224
  if (dipAmount.gtz()) {
191
225
  emit LogStakingServiceStakeIncreased(stakeNftId, stakeOwner, dipAmount, stakeBalance);
192
- $._staking.collectDipAmount(
226
+ $._tokenHandler.pullToken(
193
227
  stakeOwner,
194
228
  dipAmount);
195
229
  }
@@ -205,13 +239,36 @@ contract StakingService is
205
239
  restricted()
206
240
  onlyNftOwner(stakeNftId)
207
241
  returns (
208
- NftId newStakeNftId
242
+ NftId newStakeNftId,
243
+ Amount newStakeBalance
209
244
  )
210
245
  {
211
246
  _checkNftType(stakeNftId, STAKE());
212
247
 
213
248
  StakingServiceStorage storage $ = _getStakingServiceStorage();
214
- // TODO implement
249
+ address stakeOwner = msg.sender;
250
+
251
+ if (! getRegistry().isRegistered(newTargetNftId)) {
252
+ revert ErrorStakingServiceTargetUnknown(newTargetNftId);
253
+ }
254
+
255
+ // register new stake object with registry
256
+ newStakeNftId = $._registryService.registerStake(
257
+ IRegistry.ObjectInfo({
258
+ nftId: NftIdLib.zero(),
259
+ parentNftId: newTargetNftId,
260
+ objectType: STAKE(),
261
+ isInterceptor: false,
262
+ objectAddress: address(0),
263
+ initialOwner: stakeOwner,
264
+ data: ""
265
+ }));
266
+
267
+ newStakeBalance = $._staking.restake(
268
+ stakeNftId,
269
+ newStakeNftId);
270
+
271
+ emit LogStakingServiceStakeRestaked(stakeOwner, stakeNftId, newStakeNftId, newTargetNftId, newStakeBalance);
215
272
  }
216
273
 
217
274
 
@@ -244,7 +301,7 @@ contract StakingService is
244
301
 
245
302
  Amount rewardsClaimedAmount = $._staking.claimRewards(stakeNftId);
246
303
  emit LogStakingServiceRewardsClaimed(stakeNftId, stakeOwner, rewardsClaimedAmount);
247
- $._staking.transferDipAmount(
304
+ $._tokenHandler.pushToken(
248
305
  stakeOwner,
249
306
  rewardsClaimedAmount);
250
307
  }
@@ -268,8 +325,9 @@ contract StakingService is
268
325
 
269
326
  Amount totalAmount = unstakedAmount + rewardsClaimedAmount;
270
327
  emit LogStakingServiceUnstaked(stakeNftId, stakeOwner, totalAmount);
271
- $._staking.transferDipAmount(
272
- stakeOwner,
328
+
329
+ $._tokenHandler.pushToken(
330
+ stakeOwner,
273
331
  totalAmount);
274
332
  }
275
333
 
@@ -291,6 +349,7 @@ contract StakingService is
291
349
 
292
350
  function getDipToken()
293
351
  external
352
+ view
294
353
  virtual
295
354
  returns (IERC20Metadata dip)
296
355
  {
@@ -300,6 +359,7 @@ contract StakingService is
300
359
 
301
360
  function getTokenHandler()
302
361
  external
362
+ view
303
363
  virtual
304
364
  returns (TokenHandler tokenHandler)
305
365
  {
@@ -309,6 +369,7 @@ contract StakingService is
309
369
 
310
370
  function getStaking()
311
371
  external
372
+ view
312
373
  virtual
313
374
  returns (IStaking staking)
314
375
  {
@@ -327,15 +388,15 @@ contract StakingService is
327
388
  {
328
389
  (
329
390
  address authority,
330
- address registryAddress,
331
- address stakingAddress
391
+ address registry,
392
+ address staking
332
393
  ) = abi.decode(data, (address, address, address));
333
394
 
334
- _initializeService(registryAddress, authority, owner);
395
+ __Service_init(authority, registry, owner);
335
396
 
336
397
  StakingServiceStorage storage $ = _getStakingServiceStorage();
337
398
  $._registryService = RegistryService(_getServiceAddress(REGISTRY()));
338
- $._staking = _registerStaking(stakingAddress);
399
+ $._staking = _registerStaking(staking);
339
400
  $._dip = $._staking.getToken();
340
401
  $._tokenHandler = $._staking.getTokenHandler();
341
402
 
@@ -388,7 +449,7 @@ contract StakingService is
388
449
  emit LogStakingServiceRewardReservesIncreased(targetNftId, rewardProvider, dipAmount, newBalance);
389
450
 
390
451
  // collect reward dip from provider
391
- $._staking.collectDipAmount(
452
+ $._tokenHandler.pullToken(
392
453
  rewardProvider,
393
454
  dipAmount);
394
455
  }
@@ -15,17 +15,18 @@ contract StakingServiceManager is
15
15
  /// @dev initializes proxy manager with service implementation
16
16
  constructor(
17
17
  address authority,
18
- address registryAddress,
18
+ address registry,
19
19
  bytes32 salt
20
20
  )
21
21
  {
22
22
  StakingService svc = new StakingService();
23
23
  bytes memory data = abi.encode(
24
24
  authority,
25
- registryAddress,
26
- IRegistry(registryAddress).getStakingAddress());
25
+ registry,
26
+ IRegistry(registry).getStakingAddress());
27
+
27
28
  IVersionable versionable = initialize(
28
- registryAddress,
29
+ registry,
29
30
  address(svc),
30
31
  data,
31
32
  salt);
@@ -80,7 +80,7 @@ contract StakingStore is
80
80
  setAuthority(registry.getAuthority());
81
81
 
82
82
  // set internal variables
83
- _registry = registry; //TODO if keeps registry -> RegistryLinked and checks registry address
83
+ _registry = registry;
84
84
  _reader = reader;
85
85
  _targetNftIdSet = new NftIdSet();
86
86
 
@@ -91,7 +91,8 @@ contract StakingStore is
91
91
  objectType: PROTOCOL(),
92
92
  chainId: 1,
93
93
  lockingPeriod: TargetManagerLib.getDefaultLockingPeriod(),
94
- rewardRate: TargetManagerLib.getDefaultRewardRate()}));
94
+ rewardRate: TargetManagerLib.getDefaultRewardRate(),
95
+ maxStakedAmount: AmountLib.max()}));
95
96
  }
96
97
 
97
98
 
@@ -160,7 +160,7 @@ library TargetManagerLib {
160
160
  UFixed stakingRate
161
161
  )
162
162
  public
163
- view
163
+ pure
164
164
  returns (Amount dipAmount)
165
165
  {
166
166
  dipAmount = tokenAmount.multiplyWith(stakingRate);
@@ -5,16 +5,16 @@ import {Amount, AmountLib} from "./Amount.sol";
5
5
  import {UFixed, UFixedLib} from "./UFixed.sol";
6
6
 
7
7
  struct Fee {
8
+ // slot 0
8
9
  UFixed fractionalFee;
9
- // TODO migrate fixed fee to Amount
10
- uint256 fixedFee;
10
+ Amount fixedFee;
11
11
  }
12
12
 
13
13
  library FeeLib {
14
14
 
15
15
  /// @dev Return a zero fee struct (0, 0)
16
16
  function zero() public pure returns (Fee memory fee) {
17
- return Fee(UFixed.wrap(0), 0);
17
+ return Fee(UFixed.wrap(0), AmountLib.zero());
18
18
  }
19
19
 
20
20
  /// @dev Converts the uint256 to a fee struct.
@@ -22,7 +22,7 @@ library FeeLib {
22
22
  UFixed fractionalFee,
23
23
  uint256 fixedFee
24
24
  ) public pure returns (Fee memory fee) {
25
- return Fee(fractionalFee, fixedFee);
25
+ return Fee(fractionalFee, AmountLib.toAmount(fixedFee));
26
26
  }
27
27
 
28
28
  /// @dev Calculates fee and net amounts for the provided parameters
@@ -41,14 +41,14 @@ library FeeLib {
41
41
  if(gtz(fee)) {
42
42
  UFixed fractionalAmount =
43
43
  amount.toUFixed() * fee.fractionalFee;
44
- feeAmount = AmountLib.toAmount(fractionalAmount.toInt() + fee.fixedFee);
44
+ feeAmount = AmountLib.toAmount(fractionalAmount.toInt()) + fee.fixedFee;
45
45
  netAmount = netAmount - feeAmount;
46
46
  }
47
47
  }
48
48
 
49
49
  /// @dev Return the percent fee struct (x%, 0)
50
50
  function percentageFee(uint8 percent) public pure returns (Fee memory fee) {
51
- return Fee(UFixedLib.toUFixed(percent, -2), 0);
51
+ return Fee(UFixedLib.toUFixed(percent, -2), AmountLib.zero());
52
52
  }
53
53
 
54
54
  // pure free functions for operators
@@ -57,10 +57,10 @@ library FeeLib {
57
57
  }
58
58
 
59
59
  function gtz(Fee memory fee) public pure returns (bool) {
60
- return UFixed.unwrap(fee.fractionalFee) > 0 || fee.fixedFee > 0;
60
+ return UFixed.unwrap(fee.fractionalFee) > 0 || fee.fixedFee.gtz();
61
61
  }
62
62
 
63
63
  function eqz(Fee memory fee) public pure returns (bool) {
64
- return fee.fixedFee == 0 && UFixed.unwrap(fee.fractionalFee) == 0;
64
+ return fee.fixedFee.eqz() && UFixed.unwrap(fee.fractionalFee) == 0;
65
65
  }
66
66
  }
@@ -28,8 +28,8 @@ library Key32Lib {
28
28
 
29
29
  uint8 public constant TYPE_SHIFT = 31 * 8;
30
30
  uint8 public constant ID_SHIFT = uint8(32 * 8 - TYPE_SHIFT);
31
- bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); // first byte in bytes32
32
- bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); // remaining bytes in bytes32
31
+ bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); // [32] byte in bytes32
32
+ bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); // [0..31] bytes in bytes32
33
33
 
34
34
  function toKey32(ObjectType objectType, KeyId id) public pure returns (Key32) {
35
35
  uint256 uintObjectType = ObjectType.unwrap(objectType);
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Key32} from "../type/Key32.sol";
5
+
6
+ // based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/EnumerableSet.sol
7
+ library LibKey32Set {
8
+
9
+ struct Set {
10
+ Key32[] keys;
11
+ mapping(Key32 key => uint256 index) at;
12
+ }
13
+
14
+ error ErrorKey32SetAlreadyAdded(Key32 key);
15
+ error ErrorKey32SetNotInSet(Key32 key);
16
+
17
+
18
+ function add(Set storage set, Key32 key) external {
19
+ if (set.at[key] > 0) {
20
+ revert ErrorKey32SetAlreadyAdded(key);
21
+ }
22
+
23
+ set.keys.push(key);
24
+ set.at[key] = set.keys.length;
25
+ }
26
+
27
+ function remove(Set storage set, Key32 key) external {
28
+ uint256 nftIdIndex = set.at[key];
29
+
30
+ if (nftIdIndex == 0) {
31
+ revert ErrorKey32SetNotInSet(key);
32
+ }
33
+
34
+ uint256 toDeleteIndex = nftIdIndex - 1;
35
+ uint256 lastIndex = set.keys.length - 1;
36
+
37
+ if (lastIndex != toDeleteIndex) {
38
+ Key32 lastId = set.keys[lastIndex];
39
+ set.keys[toDeleteIndex] = lastId;
40
+ set.at[lastId] = nftIdIndex; // Replace lastValue's index to valueIndex
41
+ }
42
+
43
+ set.keys.pop();
44
+ delete set.at[key];
45
+ }
46
+
47
+ function isEmpty(Set storage set) external view returns(bool empty) {
48
+ return set.keys.length == 0;
49
+ }
50
+
51
+ function contains(Set storage set, Key32 key) external view returns(bool inSet) {
52
+ return set.at[key] > 0;
53
+ }
54
+
55
+ function size(Set storage set) external view returns(uint256 length) {
56
+ return set.keys.length;
57
+ }
58
+
59
+ function getElementAt(Set storage set, uint256 index) external view returns(Key32 key) {
60
+ return set.keys[index];
61
+ }
62
+ }
@@ -76,4 +76,10 @@ library NftIdLib {
76
76
  function toKeyId(NftId id) public pure returns (KeyId keyId) {
77
77
  return KeyId.wrap(bytes31(uint248(NftId.unwrap(id))));
78
78
  }
79
+
80
+ function toNftId(KeyId keyId) public pure returns (NftId nftId) {
81
+ uint248 keyIdInt = uint248(bytes31(KeyId.unwrap(keyId)));
82
+ assert(keyIdInt < type(uint96).max);
83
+ return NftId.wrap(uint96(keyIdInt));
84
+ }
79
85
  }