@etherisc/gif-next 0.0.2-9ed3c41-176 → 0.0.2-9f1b659-471

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 (561) hide show
  1. package/README.md +103 -9
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +790 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +673 -262
  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 +456 -24
  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 +549 -209
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +215 -18
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +265 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +473 -17
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +212 -473
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +431 -36
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +139 -381
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +814 -399
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +228 -124
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +135 -187
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +582 -141
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1484 -0
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2053 -0
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  49. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1439 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1647 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2585 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  67. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +567 -67
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +385 -60
  71. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  72. package/artifacts/contracts/instance/Instance.sol/Instance.json +573 -165
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1034 -311
  75. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +369 -68
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1685 -774
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +399 -231
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +143 -105
  83. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +983 -782
  85. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
  87. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  89. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  92. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  94. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  96. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  98. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  103. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  104. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  105. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +152 -350
  107. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +429 -37
  109. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +129 -129
  112. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +98 -11
  114. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +128 -318
  116. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  117. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +198 -190
  118. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +177 -97
  120. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  121. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +198 -433
  122. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  123. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +430 -35
  124. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  125. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +574 -270
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +216 -104
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  129. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +383 -53
  130. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  131. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +158 -212
  132. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  133. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +711 -340
  134. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  135. package/artifacts/contracts/pool/Pool.sol/Pool.json +148 -392
  136. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  137. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
  138. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  139. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +925 -545
  140. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +230 -106
  142. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  143. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +353 -180
  144. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  145. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +159 -99
  146. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  147. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +287 -427
  148. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  149. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +430 -35
  150. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  151. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +466 -245
  152. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +187 -123
  154. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  155. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +301 -9
  156. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  157. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +350 -18
  158. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  159. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +417 -101
  160. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  161. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +183 -80
  162. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  163. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +272 -222
  164. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  165. package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +283 -157
  166. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  167. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +532 -311
  168. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  169. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  170. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  171. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +196 -108
  172. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  173. package/artifacts/contracts/product/PricingService.sol/PricingService.json +249 -329
  174. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +165 -137
  176. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  177. package/artifacts/contracts/product/Product.sol/Product.json +279 -419
  178. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  179. package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
  180. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  181. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -0
  182. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  183. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  184. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  185. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +359 -48
  186. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +169 -37
  188. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  189. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  190. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  191. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  192. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  193. package/artifacts/contracts/registry/Registry.sol/Registry.json +565 -109
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +795 -394
  196. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  197. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1061 -0
  198. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  199. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +136 -290
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  201. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +141 -89
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  203. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
  204. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  205. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  206. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  207. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +483 -253
  208. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  209. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +489 -20
  210. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  211. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +120 -60
  212. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Component.sol/Component.json +86 -277
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +624 -560
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +198 -120
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  226. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -93
  228. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  229. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +535 -240
  230. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  231. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +118 -129
  232. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +42 -6
  234. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  235. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  236. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  237. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +35 -0
  238. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  239. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  240. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  241. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +167 -0
  242. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  243. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  244. package/artifacts/contracts/shared/IService.sol/IService.json +84 -2
  245. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  246. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  247. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  248. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +117 -318
  249. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  250. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +48 -7
  251. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  252. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  253. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  254. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  255. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  256. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +41 -57
  257. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  258. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  259. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  260. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +141 -97
  261. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  262. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  263. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  264. package/artifacts/contracts/shared/Service.sol/Service.json +86 -111
  265. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  266. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
  267. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  268. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  269. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  270. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  271. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  272. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1305 -159
  273. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  274. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +235 -123
  275. package/artifacts/contracts/staking/ITargetManager.sol/ITargetManager.dbg.json +4 -0
  276. package/artifacts/contracts/staking/ITargetManager.sol/ITargetManager.json +69 -0
  277. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  278. package/artifacts/contracts/staking/Staking.sol/Staking.json +1588 -478
  279. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  280. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  281. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  282. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  283. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  284. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +225 -104
  285. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  286. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +185 -223
  287. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  288. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +282 -281
  289. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  290. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +144 -96
  291. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  292. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1311 -560
  293. package/artifacts/contracts/staking/TargetManager.sol/TargetManager.dbg.json +4 -0
  294. package/artifacts/contracts/staking/TargetManager.sol/TargetManager.json +134 -0
  295. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  296. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +135 -49
  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 +45 -19
  302. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  304. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  306. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  308. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Fee.sol/FeeLib.json +98 -37
  310. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  312. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  313. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  314. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  316. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  317. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  318. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  320. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  322. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  324. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  326. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  328. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  330. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +93 -2
  332. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  334. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  335. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  336. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  337. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  338. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  339. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  340. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  341. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +24 -5
  342. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +109 -35
  344. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  345. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  346. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  347. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  348. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  349. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +11 -1
  350. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  351. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +656 -0
  352. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  353. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  354. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  355. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +11 -1
  356. package/contracts/accounting/AccountingService.sol +274 -0
  357. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  358. package/contracts/accounting/IAccountingService.sol +47 -0
  359. package/contracts/authorization/AccessAdmin.sol +458 -269
  360. package/contracts/authorization/AccessAdminLib.sol +396 -0
  361. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  362. package/contracts/authorization/Authorization.sol +159 -208
  363. package/contracts/authorization/IAccess.sol +25 -6
  364. package/contracts/authorization/IAccessAdmin.sol +87 -79
  365. package/contracts/authorization/IAuthorization.sol +9 -37
  366. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  367. package/contracts/authorization/ServiceAuthorization.sol +255 -25
  368. package/contracts/distribution/BasicDistribution.sol +22 -30
  369. package/contracts/distribution/BasicDistributionAuthorization.sol +34 -10
  370. package/contracts/distribution/Distribution.sol +48 -84
  371. package/contracts/distribution/DistributionService.sol +276 -130
  372. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  373. package/contracts/distribution/IDistributionComponent.sol +11 -14
  374. package/contracts/distribution/IDistributionService.sol +56 -26
  375. package/contracts/examples/fire/DamageLevel.sol +59 -0
  376. package/contracts/examples/fire/FirePool.sol +86 -0
  377. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  378. package/contracts/examples/fire/FireProduct.sol +433 -0
  379. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  380. package/contracts/examples/fire/FireUSD.sol +26 -0
  381. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  382. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  383. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  384. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  385. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  386. package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
  387. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  388. package/contracts/instance/BundleSet.sol +42 -38
  389. package/contracts/instance/IInstance.sol +102 -43
  390. package/contracts/instance/IInstanceService.sol +59 -34
  391. package/contracts/instance/Instance.sol +193 -100
  392. package/contracts/instance/InstanceAdmin.sol +275 -158
  393. package/contracts/instance/InstanceAuthorizationV3.sol +120 -56
  394. package/contracts/instance/InstanceReader.sol +478 -251
  395. package/contracts/instance/InstanceService.sol +293 -236
  396. package/contracts/instance/InstanceServiceManager.sol +8 -13
  397. package/contracts/instance/InstanceStore.sol +24 -2
  398. package/contracts/instance/RiskSet.sol +126 -0
  399. package/contracts/instance/base/BalanceStore.sol +4 -6
  400. package/contracts/instance/base/ObjectCounter.sol +1 -2
  401. package/contracts/instance/base/ObjectLifecycle.sol +13 -10
  402. package/contracts/instance/base/ObjectSet.sol +31 -33
  403. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  404. package/contracts/instance/module/IBundle.sol +6 -5
  405. package/contracts/instance/module/IComponents.sol +30 -20
  406. package/contracts/instance/module/IDistribution.sol +21 -9
  407. package/contracts/instance/module/IPolicy.sol +50 -29
  408. package/contracts/instance/module/IRisk.sol +5 -0
  409. package/contracts/mock/Dip.sol +1 -1
  410. package/contracts/oracle/BasicOracle.sol +2 -5
  411. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  412. package/contracts/oracle/IOracle.sol +9 -4
  413. package/contracts/oracle/IOracleComponent.sol +2 -1
  414. package/contracts/oracle/IOracleService.sol +2 -1
  415. package/contracts/oracle/Oracle.sol +23 -26
  416. package/contracts/oracle/OracleService.sol +119 -87
  417. package/contracts/oracle/OracleServiceManager.sol +8 -11
  418. package/contracts/pool/BasicPool.sol +39 -41
  419. package/contracts/pool/BasicPoolAuthorization.sol +43 -11
  420. package/contracts/pool/BundleService.sol +218 -128
  421. package/contracts/pool/BundleServiceManager.sol +8 -11
  422. package/contracts/pool/IBundleService.sol +43 -33
  423. package/contracts/pool/IPoolComponent.sol +20 -10
  424. package/contracts/pool/IPoolService.sol +97 -77
  425. package/contracts/pool/Pool.sol +146 -124
  426. package/contracts/pool/PoolLib.sol +341 -0
  427. package/contracts/pool/PoolService.sol +419 -256
  428. package/contracts/pool/PoolServiceManager.sol +6 -9
  429. package/contracts/product/ApplicationService.sol +153 -80
  430. package/contracts/product/ApplicationServiceManager.sol +6 -6
  431. package/contracts/product/BasicProduct.sol +13 -46
  432. package/contracts/product/BasicProductAuthorization.sol +33 -10
  433. package/contracts/product/ClaimService.sol +382 -194
  434. package/contracts/product/ClaimServiceManager.sol +6 -6
  435. package/contracts/product/IApplicationService.sol +29 -3
  436. package/contracts/product/IClaimService.sol +48 -11
  437. package/contracts/product/IPolicyService.sol +61 -37
  438. package/contracts/product/IPricingService.sol +11 -10
  439. package/contracts/product/IProductComponent.sol +28 -5
  440. package/contracts/product/IRiskService.sol +48 -0
  441. package/contracts/product/PolicyService.sol +443 -273
  442. package/contracts/product/PolicyServiceLib.sol +139 -0
  443. package/contracts/product/PolicyServiceManager.sol +6 -9
  444. package/contracts/product/PricingService.sol +90 -84
  445. package/contracts/product/PricingServiceManager.sol +6 -9
  446. package/contracts/product/Product.sol +201 -100
  447. package/contracts/product/RiskService.sol +190 -0
  448. package/contracts/product/RiskServiceManager.sol +39 -0
  449. package/contracts/registry/ChainNft.sol +72 -40
  450. package/contracts/registry/IRegistry.sol +70 -32
  451. package/contracts/registry/IRegistryService.sol +5 -12
  452. package/contracts/registry/IRelease.sol +29 -0
  453. package/contracts/registry/ITransferInterceptor.sol +1 -2
  454. package/contracts/registry/Registry.sol +367 -207
  455. package/contracts/registry/RegistryAdmin.sol +110 -287
  456. package/contracts/registry/RegistryAuthorization.sol +312 -0
  457. package/contracts/registry/RegistryService.sol +42 -67
  458. package/contracts/registry/RegistryServiceManager.sol +5 -5
  459. package/contracts/registry/ReleaseAdmin.sol +195 -0
  460. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  461. package/contracts/registry/ReleaseRegistry.sol +279 -241
  462. package/contracts/registry/ServiceAuthorizationV3.sol +205 -63
  463. package/contracts/registry/TokenRegistry.sol +61 -59
  464. package/contracts/shared/Component.sol +70 -137
  465. package/contracts/shared/ComponentService.sol +452 -346
  466. package/contracts/shared/ComponentServiceManager.sol +10 -7
  467. package/contracts/shared/ContractLib.sol +312 -0
  468. package/contracts/shared/IComponent.sol +6 -18
  469. package/contracts/shared/IComponentService.sol +50 -41
  470. package/contracts/shared/IInstanceLinkedComponent.sol +7 -27
  471. package/contracts/shared/IKeyValueStore.sol +1 -1
  472. package/contracts/shared/ILifecycle.sol +3 -1
  473. package/contracts/shared/INftOwnable.sol +4 -0
  474. package/contracts/shared/IPolicyHolder.sol +12 -22
  475. package/contracts/shared/IRegisterable.sol +22 -1
  476. package/contracts/shared/IService.sol +4 -6
  477. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +11 -3
  478. package/contracts/shared/InstanceLinkedComponent.sol +83 -40
  479. package/contracts/shared/KeyValueStore.sol +4 -4
  480. package/contracts/shared/Lifecycle.sol +15 -4
  481. package/contracts/shared/NftOwnable.sol +33 -11
  482. package/contracts/shared/PolicyHolder.sol +20 -59
  483. package/contracts/shared/Registerable.sol +52 -21
  484. package/contracts/shared/RegistryLinked.sol +9 -14
  485. package/contracts/shared/Service.sol +22 -38
  486. package/contracts/shared/TokenHandler.sol +310 -26
  487. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  488. package/contracts/staking/IStaking.sol +203 -69
  489. package/contracts/staking/IStakingService.sol +45 -78
  490. package/contracts/staking/ITargetManager.sol +28 -0
  491. package/contracts/staking/Staking.sol +525 -243
  492. package/contracts/staking/StakingLib.sol +195 -0
  493. package/contracts/staking/StakingManager.sol +11 -13
  494. package/contracts/staking/StakingReader.sol +55 -90
  495. package/contracts/staking/StakingService.sol +62 -152
  496. package/contracts/staking/StakingServiceManager.sol +9 -7
  497. package/contracts/staking/StakingStore.sol +867 -337
  498. package/contracts/staking/TargetManager.sol +103 -0
  499. package/contracts/staking/TargetManagerLib.sol +8 -4
  500. package/contracts/type/Amount.sol +31 -5
  501. package/contracts/type/Blocknumber.sol +22 -16
  502. package/contracts/type/ChainId.sol +101 -0
  503. package/contracts/type/ClaimId.sol +6 -1
  504. package/contracts/type/Fee.sol +8 -8
  505. package/contracts/type/Key32.sol +2 -2
  506. package/contracts/type/Key32Set.sol +62 -0
  507. package/contracts/type/NftId.sol +7 -0
  508. package/contracts/type/ObjectType.sol +73 -37
  509. package/contracts/type/PayoutId.sol +10 -10
  510. package/contracts/type/Referral.sol +1 -0
  511. package/contracts/type/RiskId.sol +38 -6
  512. package/contracts/type/RoleId.sol +61 -55
  513. package/contracts/type/Seconds.sol +35 -1
  514. package/contracts/type/Selector.sol +5 -0
  515. package/contracts/type/StateId.sol +15 -1
  516. package/contracts/type/String.sol +12 -0
  517. package/contracts/type/Timestamp.sol +14 -7
  518. package/contracts/type/UFixed.sol +57 -126
  519. package/contracts/type/Version.sol +54 -5
  520. package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
  521. package/contracts/{shared → upgradeability}/ProxyManager.sol +96 -49
  522. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  523. package/contracts/{shared → upgradeability}/Versionable.sol +8 -5
  524. package/package.json +5 -4
  525. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  526. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  527. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  528. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  529. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  530. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  531. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  532. package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -400
  533. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  534. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  535. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  536. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  537. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  538. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  539. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  540. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  541. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  542. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  543. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  544. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  545. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  546. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  547. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  548. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  549. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -460
  550. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  551. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  552. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  553. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  554. package/contracts/instance/module/IAccess.sol +0 -46
  555. package/contracts/product/IProductService.sol +0 -33
  556. package/contracts/product/ProductService.sol +0 -124
  557. package/contracts/product/ProductServiceManager.sol +0 -42
  558. package/contracts/shared/ComponentVerifyingService.sol +0 -117
  559. package/contracts/shared/InitializableCustom.sol +0 -177
  560. package/contracts/shared/UpgradableProxyWithAdmin.sol +0 -16
  561. package/contracts/staking/StakeManagerLib.sol +0 -231
@@ -1,126 +1,338 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {ChainNft} from "../registry/ChainNft.sol";
6
- import {Component} from "../shared/Component.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
7
6
  import {IRegistry} from "../registry/IRegistry.sol";
8
- import {IRegistryService} from "../registry/IRegistryService.sol";
7
+ import {IRelease} from "../registry/IRelease.sol";
9
8
  import {IStaking} from "./IStaking.sol";
10
- import {IVersionable} from "../shared/IVersionable.sol";
11
- import {Key32} from "../type/Key32.sol";
12
- import {NftId, NftIdLib} from "../type/NftId.sol";
13
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
9
+ import {IStakingService} from "./IStakingService.sol";
10
+ import {ITargetManager} from "./ITargetManager.sol";
11
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
12
+
13
+ import {Amount, AmountLib} from "../type/Amount.sol";
14
+ import {Blocknumber} from "../type/Blocknumber.sol";
15
+ import {ChainId, ChainIdLib} from "../type/ChainId.sol";
16
+ import {Component} from "../shared/Component.sol";
17
+ import {IComponent} from "../shared/IComponent.sol";
18
+ import {NftId} from "../type/NftId.sol";
19
+ import {ObjectType, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
14
20
  import {Seconds, SecondsLib} from "../type/Seconds.sol";
15
- import {StakeManagerLib} from "./StakeManagerLib.sol";
21
+ import {Registerable} from "../shared/Registerable.sol";
22
+ import {StakingLib} from "./StakingLib.sol";
16
23
  import {StakingReader} from "./StakingReader.sol";
17
24
  import {StakingStore} from "./StakingStore.sol";
18
- import {TargetManagerLib} from "./TargetManagerLib.sol";
19
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
25
+ import {TargetManager} from "./TargetManager.sol";
20
26
  import {TokenHandler} from "../shared/TokenHandler.sol";
27
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
21
28
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
22
29
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
23
- import {Version, VersionLib} from "../type/Version.sol";
24
- import {Versionable} from "../shared/Versionable.sol";
30
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
31
+ import {Versionable} from "../upgradeability/Versionable.sol";
32
+
25
33
 
26
34
  contract Staking is
27
35
  Component,
28
36
  Versionable,
37
+ TargetManager,
29
38
  IStaking
30
39
  {
31
40
  string public constant CONTRACT_NAME = "Staking";
32
- uint8 private constant GIF_MAJOR_VERSION = 3;
33
41
 
34
42
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Staking.sol")) - 1)) & ~bytes32(uint256(0xff));
35
43
  bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
36
44
 
37
45
  struct StakingStorage {
38
- IRegistryService _registryService;
39
46
  TokenRegistry _tokenRegistry;
47
+ TokenHandler _tokenHandler;
48
+ IStakingService _stakingService;
40
49
  StakingStore _store;
41
50
  StakingReader _reader;
42
51
  NftId _protocolNftId;
43
52
  }
44
53
 
45
54
 
46
- modifier onlyStake(NftId stakeNftId) {
47
- if (!_getStakingStorage()._store.exists(stakeNftId)) {
48
- revert ErrorStakingNotStake(stakeNftId);
49
- }
55
+ modifier onlyStakeOwner(NftId stakeNftId) {
56
+ _checkTypeAndOwner(stakeNftId, STAKE(), true);
50
57
  _;
51
58
  }
52
59
 
53
60
 
54
61
  modifier onlyTarget(NftId targetNftId) {
55
- if (!_getStakingStorage()._store.getTargetNftIdSet().exists(targetNftId)) {
56
- revert ErrorStakingNotTarget(targetNftId);
57
- }
62
+ _checkTypeAndOwner(targetNftId, TARGET(), false);
58
63
  _;
59
64
  }
60
65
 
61
- // set/update staking reader
62
- function setStakingReader(StakingReader stakingReader)
66
+
67
+ modifier onlyTargetOwner(NftId targetNftId) {
68
+ _checkTypeAndOwner(targetNftId, TARGET(), true);
69
+ _;
70
+ }
71
+
72
+ //--- contract intitialization -------------------------------------------
73
+
74
+ function initializeTokenHandler()
75
+ external
76
+ virtual
77
+ {
78
+ if (msg.sender != address(getRegistry())) {
79
+ revert ErrorStakingNotRegistry(msg.sender);
80
+ }
81
+
82
+ StakingStorage storage $ = _getStakingStorage();
83
+ address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
84
+ $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
85
+ address(getRegistry()),
86
+ address(this),
87
+ dipToken,
88
+ getRegistry().getAuthority());
89
+ }
90
+
91
+
92
+ //--- staking owner functions -------------------------------------------//
93
+
94
+
95
+ /// @inheritdoc IStaking
96
+ function setProtocolLockingPeriod(Seconds newLockingPeriod)
97
+ external
98
+ virtual
99
+ restricted()
100
+ onlyOwner()
101
+ {
102
+ StakingStorage storage $ = _getStakingStorage();
103
+ (
104
+ Seconds oldLockingPeriod,
105
+ Blocknumber lastUpdatedIn
106
+ ) = $._store.setLockingPeriod($._protocolNftId, newLockingPeriod);
107
+
108
+ emit LogStakingProtocolLockingPeriodSet($._protocolNftId, newLockingPeriod, oldLockingPeriod, lastUpdatedIn);
109
+ }
110
+
111
+
112
+ /// @inheritdoc IStaking
113
+ function setProtocolRewardRate(UFixed newRewardRate)
114
+ external
115
+ virtual
116
+ restricted()
117
+ onlyOwner()
118
+ {
119
+ StakingStorage storage $ = _getStakingStorage();
120
+ (
121
+ UFixed oldRewardRate,
122
+ Blocknumber lastUpdatedIn
123
+ ) = $._store.setRewardRate($._protocolNftId, newRewardRate);
124
+
125
+ emit LogStakingProtocolRewardRateSet($._protocolNftId, newRewardRate, oldRewardRate, lastUpdatedIn);
126
+ }
127
+
128
+
129
+ /// @inheritdoc IStaking
130
+ function setStakingRate(
131
+ ChainId chainId,
132
+ address token,
133
+ UFixed stakingRate
134
+ )
63
135
  external
64
136
  virtual
137
+ restricted()
65
138
  onlyOwner()
66
139
  {
140
+ (
141
+ UFixed oldStakingRate,
142
+ Blocknumber lastUpdateIn
143
+ ) = _getStakingStorage()._store.setStakingRate(chainId, token, stakingRate);
144
+
145
+ emit LogStakingStakingRateSet(chainId, token, stakingRate, oldStakingRate, lastUpdateIn);
146
+ }
147
+
148
+
149
+ /// @inheritdoc IStaking
150
+ function setStakingService(VersionPart release)
151
+ external
152
+ virtual
153
+ restricted()
154
+ onlyOwner()
155
+ {
156
+ // effects
157
+ StakingStorage storage $ = _getStakingStorage();
158
+ address oldStakingService = address($._stakingService);
159
+ $._stakingService = StakingLib.checkAndGetStakingService(getRegistry(), release);
160
+
161
+ emit LogStakingStakingServiceSet(address($._stakingService), release, oldStakingService);
162
+ }
163
+
164
+
165
+ /// @inheritdoc IStaking
166
+ function setStakingReader(address reader)
167
+ external
168
+ virtual
169
+ restricted()
170
+ onlyOwner()
171
+ {
172
+ StakingReader stakingReader = StakingReader(reader);
173
+
67
174
  if(stakingReader.getStaking() != IStaking(this)) {
68
175
  revert ErrorStakingStakingReaderStakingMismatch(address(stakingReader.getStaking()));
69
176
  }
70
177
 
71
- _getStakingStorage()._reader = stakingReader;
178
+ StakingStorage storage $ = _getStakingStorage();
179
+ $._reader = stakingReader;
180
+ $._store.setStakingReader(reader);
72
181
  }
73
182
 
74
183
 
75
- // rate management
76
- function setStakingRate(uint256 chainId, address token, UFixed stakingRate)
184
+ /// @inheritdoc IStaking
185
+ function setTargetManager(address targetManager)
77
186
  external
78
187
  virtual
188
+ restricted()
189
+ onlyOwner()
190
+ {
191
+ _getStakingStorage()._store.setTargetManager(targetManager);
192
+ }
193
+
194
+
195
+ /// @inheritdoc IStaking
196
+ function addToken(
197
+ ChainId chainId,
198
+ address token
199
+ )
200
+ external
201
+ virtual
202
+ restricted()
203
+ onlyOwner()
204
+ {
205
+ _addToken(
206
+ _getStakingStorage(), chainId, token);
207
+ }
208
+
209
+
210
+ /// @inheritdoc IStaking
211
+ function approveTokenHandler(IERC20Metadata token, Amount amount)
212
+ public
213
+ virtual
214
+ restricted()
79
215
  onlyOwner()
80
216
  {
81
217
  StakingStorage storage $ = _getStakingStorage();
82
-
83
- if (!$._tokenRegistry.isRegistered(chainId, token)) {
84
- revert ErrorStakingTokenNotRegistered(chainId, token);
218
+ Amount oldAllowanceAmount = AmountLib.toAmount(
219
+ token.allowance(
220
+ address(this),
221
+ address($._tokenHandler)));
222
+
223
+ // staking token handler approval via its own implementation in staking service
224
+ $._stakingService.approveTokenHandler(
225
+ token,
226
+ amount);
227
+
228
+ emit LogStakingTokenHandlerApproved(address(token), amount, oldAllowanceAmount);
229
+ }
230
+
231
+ //--- target management -------------------------------------------------//
232
+
233
+
234
+ /// @inheritdoc IStaking
235
+ function refillRewardReserves(NftId targetNftId, Amount dipAmount)
236
+ external
237
+ virtual
238
+ restricted()
239
+ onlyTarget(targetNftId)
240
+ returns (Amount newBalance)
241
+ {
242
+ address transferFrom = msg.sender;
243
+ _refillRewardReserves(targetNftId, dipAmount, transferFrom);
244
+ }
245
+
246
+
247
+ /// @inheritdoc IStaking
248
+ function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
249
+ external
250
+ virtual
251
+ restricted()
252
+ onlyTarget(targetNftId)
253
+ returns (Amount newBalance)
254
+ {
255
+ address transferTo;
256
+
257
+ // case 1: protocol target: staking owner is recipient
258
+ if (targetNftId == getRegistry().getProtocolNftId()) {
259
+ // verify that the caller is the staking owner
260
+ transferTo = getOwner();
261
+ if (msg.sender != transferTo) {
262
+ revert ErrorStakingNotStakingOwner();
263
+ }
264
+
265
+ // case 2: same chain target: target owner is recipient
266
+ } else if (ChainIdLib.isCurrentChain(targetNftId)) {
267
+ // verify that the caller is the target owner
268
+ transferTo = getRegistry().ownerOf(targetNftId);
269
+ if (msg.sender != transferTo) {
270
+ revert ErrorStakingNotNftOwner(targetNftId);
271
+ }
272
+
273
+ // case 3: cross-chain target: TODO decide how to handle and implement
274
+ } else {
275
+ revert("Cross-chain target not supported");
85
276
  }
86
277
 
87
- UFixed oldStakingRate = $._store.getStakingRate(chainId, token);
88
- $._store.setStakingRate(chainId, token, stakingRate);
278
+ newBalance = _withdrawRewardReserves(targetNftId, dipAmount, transferTo);
279
+ }
280
+
281
+
282
+ /// @inheritdoc IStaking
283
+ function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferFrom)
284
+ external
285
+ virtual
286
+ restricted()
287
+ onlyTarget(targetNftId)
288
+ returns (Amount newBalance)
289
+ {
290
+ _refillRewardReserves(targetNftId, dipAmount, transferFrom);
291
+ }
292
+
293
+
294
+ /// @inheritdoc IStaking
295
+ function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferTo)
296
+ external
297
+ virtual
298
+ restricted()
299
+ onlyTarget(targetNftId)
300
+ returns (Amount newBalance)
301
+ {
302
+ // check that service does not withdraw from protocol target
303
+ if (targetNftId == getRegistry().getProtocolNftId()) {
304
+ revert ErrorStakingTargetTypeNotSupported(targetNftId, PROTOCOL());
305
+ }
89
306
 
90
- emit LogStakingStakingRateSet(chainId, token, oldStakingRate, stakingRate);
307
+ // default: on-chain target owner is recipient
308
+ address targetOwner = getRegistry().ownerOf(targetNftId);
309
+ return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
91
310
  }
92
311
 
93
- // target management
94
312
 
313
+ /// @inheritdoc IStaking
95
314
  function registerTarget(
96
315
  NftId targetNftId,
97
316
  ObjectType expectedObjectType,
98
- uint256 chainId,
99
317
  Seconds initialLockingPeriod,
100
318
  UFixed initialRewardRate
101
319
  )
102
320
  external
103
321
  virtual
104
- restricted()
322
+ restricted() // staking service
105
323
  {
106
- TargetManagerLib.checkTargetParameters(
107
- getRegistry(),
108
- _getStakingStorage()._reader,
109
- targetNftId,
110
- expectedObjectType,
111
- initialLockingPeriod,
112
- initialRewardRate);
113
-
324
+ // checks done by staking store
114
325
  _getStakingStorage()._store.createTarget(
115
326
  targetNftId,
116
- TargetInfo({
117
- objectType: expectedObjectType,
118
- chainId: chainId,
119
- lockingPeriod: initialLockingPeriod,
120
- rewardRate: initialRewardRate}));
327
+ expectedObjectType,
328
+ initialLockingPeriod,
329
+ initialRewardRate);
330
+
331
+ emit LogStakingTargetCreated(targetNftId, expectedObjectType, initialLockingPeriod, initialRewardRate, AmountLib.max());
121
332
  }
122
333
 
123
334
 
335
+ /// @inheritdoc IStaking
124
336
  function setLockingPeriod(
125
337
  NftId targetNftId,
126
338
  Seconds lockingPeriod
@@ -130,66 +342,67 @@ contract Staking is
130
342
  restricted()
131
343
  onlyTarget(targetNftId)
132
344
  {
133
- (
134
- Seconds oldLockingPeriod,
135
- TargetInfo memory targetInfo
136
- ) = TargetManagerLib.updateLockingPeriod(
137
- this,
138
- targetNftId,
139
- lockingPeriod);
140
-
141
- _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
345
+ (Seconds oldLockingPeriod, ) = _getStakingStorage()._store.setLockingPeriod(targetNftId, lockingPeriod);
142
346
 
143
- emit LogStakingLockingPeriodSet(targetNftId, oldLockingPeriod, lockingPeriod);
347
+ emit LogStakingTargetLockingPeriodSet(targetNftId, lockingPeriod, oldLockingPeriod);
144
348
  }
145
349
 
146
- // TODO add function to set protocol reward rate: onlyOwner
147
- // get protocol nft id (from where)
148
350
 
351
+ /// @inheritdoc IStaking
149
352
  function setRewardRate(NftId targetNftId, UFixed rewardRate)
150
353
  external
151
354
  virtual
152
355
  restricted()
153
356
  onlyTarget(targetNftId)
154
357
  {
155
- (
156
- UFixed oldRewardRate,
157
- TargetInfo memory targetInfo
158
- ) = TargetManagerLib.updateRewardRate(
159
- this,
160
- targetNftId,
161
- rewardRate);
162
-
163
- _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
358
+ (UFixed oldRewardRate,) = _getStakingStorage()._store.setRewardRate(targetNftId, rewardRate);
164
359
 
165
- emit LogStakingRewardRateSet(targetNftId, oldRewardRate, rewardRate);
360
+ emit LogStakingTargetRewardRateSet(targetNftId, rewardRate, oldRewardRate);
166
361
  }
167
362
 
168
363
 
169
- function refillRewardReserves(NftId targetNftId, Amount dipAmount)
364
+ // TODO refactor into setTargetLimits
365
+ /// @inheritdoc IStaking
366
+ function setMaxStakedAmount(NftId targetNftId, Amount stakeLimitAmount)
170
367
  external
171
368
  virtual
172
369
  restricted()
173
- returns (Amount newBalance)
370
+ onlyTarget(targetNftId)
371
+ {
372
+ _getStakingStorage()._store.setMaxStakedAmount(targetNftId, stakeLimitAmount);
373
+ }
374
+
375
+
376
+ /// @inheritdoc IStaking
377
+ function setTargetLimits(NftId targetNftId, Amount marginAmount, Amount limitAmount)
378
+ external
379
+ virtual
380
+ restricted()
381
+ onlyTargetOwner(targetNftId)
174
382
  {
175
- // update book keeping of reward reserves
176
383
  StakingStorage storage $ = _getStakingStorage();
177
- newBalance = $._store.increaseReserves(targetNftId, dipAmount);
384
+ $._store.setTargetLimits(targetNftId, marginAmount, limitAmount);
178
385
  }
179
386
 
180
387
 
181
- function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
388
+ /// @inheritdoc IStaking
389
+ function addTargetToken(NftId targetNftId, address token)
182
390
  external
183
391
  virtual
184
392
  restricted()
185
- returns (Amount newBalance)
393
+ onlyTarget(targetNftId)
186
394
  {
187
- // update book keeping of reward reserves
188
395
  StakingStorage storage $ = _getStakingStorage();
189
- newBalance = $._store.decreaseReserves(targetNftId, dipAmount);
396
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
397
+ _addToken($, chainId, token);
398
+
399
+ $._store.addTargetToken(targetNftId, token);
400
+
401
+ emit LogStakingTargetTokenAdded(targetNftId, chainId, token);
190
402
  }
191
403
 
192
404
 
405
+ /// @inheritdoc IStaking
193
406
  function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
194
407
  external
195
408
  virtual
@@ -197,12 +410,13 @@ contract Staking is
197
410
  returns (Amount newBalance)
198
411
  {
199
412
  StakingStorage storage $ = _getStakingStorage();
200
- uint chainId = $._reader.getTargetInfo(targetNftId).chainId;
201
- UFixed stakingRate = $._reader.getStakingRate(chainId, token);
202
- newBalance = $._store.increaseTotalValueLocked(targetNftId, stakingRate, token, amount);
413
+ newBalance = $._store.increaseTotalValueLocked(targetNftId, token, amount);
414
+
415
+ emit LogStakingTotalValueLockedIncreased(targetNftId, token, amount, newBalance);
203
416
  }
204
417
 
205
418
 
419
+ /// @inheritdoc IStaking
206
420
  function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
207
421
  external
208
422
  virtual
@@ -210,12 +424,14 @@ contract Staking is
210
424
  returns (Amount newBalance)
211
425
  {
212
426
  StakingStorage storage $ = _getStakingStorage();
213
- uint chainId = $._reader.getTargetInfo(targetNftId).chainId;
214
- UFixed stakingRate = $._reader.getStakingRate(chainId, token);
215
- newBalance = $._store.decreaseTotalValueLocked(targetNftId, stakingRate, token, amount);
427
+ newBalance = $._store.decreaseTotalValueLocked(targetNftId, token, amount);
428
+
429
+ emit LogStakingTotalValueLockedDecreased(targetNftId, token, amount, newBalance);
216
430
  }
217
431
 
218
432
 
433
+ // TODO add to interface and implement
434
+ /// inheritdoc IStaking
219
435
  function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
220
436
  external
221
437
  virtual
@@ -225,6 +441,8 @@ contract Staking is
225
441
 
226
442
  }
227
443
 
444
+ // TODO add to interface and implement
445
+ /// @inheritdoc IStaking
228
446
  function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
229
447
  external
230
448
  virtual
@@ -236,270 +454,334 @@ contract Staking is
236
454
 
237
455
  //--- staking functions -------------------------------------------------//
238
456
 
457
+ /// @inheritdoc IStaking
239
458
  function createStake(
240
- NftId stakeNftId,
241
459
  NftId targetNftId,
242
- Amount stakeAmount
460
+ Amount stakeAmount,
461
+ address stakeOwner
243
462
  )
244
463
  external
245
464
  virtual
246
- restricted() // only staking service
465
+ restricted()
466
+ onlyTarget(targetNftId)
467
+ returns (NftId stakeNftId)
247
468
  {
469
+ // effects (includes further checks in service)
248
470
  StakingStorage storage $ = _getStakingStorage();
249
- Timestamp lockedUntil = StakeManagerLib.checkCreateParameters(
250
- $._reader,
251
- targetNftId,
252
- stakeAmount);
471
+ stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
472
+ $._store.createStake(stakeNftId, targetNftId, stakeOwner, stakeAmount);
253
473
 
254
- // create new stake
255
- $._store.create(
256
- stakeNftId,
257
- StakeInfo({
258
- lockedUntil: lockedUntil}));
259
-
260
- // update target stake balance
261
- $._store.increaseStake(
262
- stakeNftId,
263
- targetNftId,
264
- stakeAmount);
474
+ // interactions
475
+ if (stakeAmount.gtz()) {
476
+ $._stakingService.pullDipToken(stakeAmount, stakeOwner);
477
+ }
265
478
  }
266
479
 
267
480
 
481
+ /// @inheritdoc IStaking
268
482
  function stake(
269
483
  NftId stakeNftId,
270
484
  Amount stakeAmount
271
485
  )
272
486
  external
273
487
  virtual
274
- restricted() // only staking service
275
- onlyStake(stakeNftId)
276
- returns (Amount stakeBalance)
488
+ restricted()
489
+ onlyStakeOwner(stakeNftId)
490
+ returns (Amount newStakeBalance)
277
491
  {
278
492
  StakingStorage storage $ = _getStakingStorage();
279
- stakeBalance = StakeManagerLib.stake(
280
- getRegistry(),
281
- $._reader,
282
- $._store,
283
- stakeNftId,
493
+ $._store.stake(
494
+ stakeNftId,
495
+ true, // update rewards
496
+ true, // restake rewards
497
+ SecondsLib.max(), // max additional locking duration
284
498
  stakeAmount);
285
- }
286
-
287
-
288
- function restake(
289
- NftId stakeNftId,
290
- NftId newTargetNftId
291
- )
292
- external
293
- virtual
294
- restricted() // only staking service
295
- onlyStake(stakeNftId)
296
- returns (NftId newStakeNftId)
297
- {
298
- // TODO add check that allows additional staking amount
299
- StakingStorage storage $ = _getStakingStorage();
300
499
 
301
- // TODO implement
302
- }
500
+ // collect staked DIP token via staking service
501
+ if (stakeAmount.gtz()) {
502
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
503
+ $._stakingService.pullDipToken(stakeAmount, stakeOwner);
504
+ }
505
+ }
303
506
 
304
507
 
305
- function updateRewards(NftId stakeNftId)
508
+ /// @inheritdoc IStaking
509
+ function unstake(NftId stakeNftId)
306
510
  external
307
511
  virtual
308
- restricted() // only staking service
309
- onlyStake(stakeNftId)
512
+ restricted()
513
+ onlyStakeOwner(stakeNftId)
514
+ returns (Amount unstakedAmount)
310
515
  {
311
516
  StakingStorage storage $ = _getStakingStorage();
312
- _updateRewards($._reader, $._store, stakeNftId);
517
+ unstakedAmount = $._store.unstake(
518
+ stakeNftId,
519
+ true, // update rewards
520
+ true, // restake rewards
521
+ AmountLib.max()); // unstake up to this amount
522
+
523
+ // transfer unstaked DIP token via staking service
524
+ if (unstakedAmount.gtz()) {
525
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
526
+ $._stakingService.pushDipToken(unstakedAmount, stakeOwner);
527
+ }
313
528
  }
314
529
 
315
530
 
316
- function claimRewards(NftId stakeNftId)
531
+ /// @inheritdoc IStaking
532
+ function restake(
533
+ NftId stakeNftId,
534
+ NftId newTargetNftId
535
+ )
317
536
  external
318
537
  virtual
319
538
  restricted() // only staking service
320
- onlyStake(stakeNftId)
539
+ onlyStakeOwner(stakeNftId)
540
+ onlyTarget(newTargetNftId)
321
541
  returns (
322
- Amount rewardsClaimedAmount
542
+ NftId newStakeNftId,
543
+ Amount newStakedAmount
323
544
  )
324
545
  {
325
546
  StakingStorage storage $ = _getStakingStorage();
326
547
 
327
- // update rewards since last update
328
- NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
548
+ // step 1: unstake as much as possible
549
+ newStakedAmount = $._store.unstake(
550
+ stakeNftId,
551
+ true, // update rewards
552
+ true, // restake rewards
553
+ AmountLib.max()); // unstake up to this amount
329
554
 
330
- // unstake all available rewards
331
- rewardsClaimedAmount = $._store.claimUpTo(
332
- stakeNftId,
333
- targetNftId,
334
- AmountLib.max());
555
+ // step 2: create new stake with full unstaked amount
556
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
557
+ newStakeNftId = $._stakingService.createStakeObject(newTargetNftId, stakeOwner);
558
+ $._store.createStake(newStakeNftId, newTargetNftId, stakeOwner, newStakedAmount);
335
559
 
336
- // update reward reserves
337
- $._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
560
+ // logging
561
+ emit LogStakingStakeRestaked(newStakeNftId, newTargetNftId, newStakedAmount, stakeOwner, stakeNftId);
338
562
  }
339
563
 
340
564
 
341
- function unstake(NftId stakeNftId)
565
+ function updateRewards(NftId stakeNftId)
342
566
  external
343
567
  virtual
344
- restricted() // only staking service
345
- onlyStake(stakeNftId)
346
- returns (
347
- Amount unstakedAmount,
348
- Amount rewardsClaimedAmount
349
- )
568
+ restricted()
569
+ onlyStakeOwner(stakeNftId)
570
+ returns (Amount newRewardAmount)
350
571
  {
351
- // TODO add check that stake locking is in the past
352
572
  StakingStorage storage $ = _getStakingStorage();
353
-
354
- // update rewards since last update
355
- NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
356
-
357
- // unstake all available dips
358
- (
359
- unstakedAmount,
360
- rewardsClaimedAmount
361
- ) = $._store.unstakeUpTo(
362
- stakeNftId,
363
- targetNftId,
364
- AmountLib.max(), // unstake all stakes
365
- AmountLib.max()); // claim all rewards
366
-
367
- // update reward reserves
368
- $._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
573
+ $._store.updateRewards(stakeNftId);
369
574
  }
370
575
 
371
576
 
372
-
373
- //--- other functions ---------------------------------------------------//
374
-
375
- function collectDipAmount(address from, Amount dipAmount)
376
- external
377
- restricted() // only staking service
378
- {
379
- TokenHandler tokenHandler = getTokenHandler();
380
- address stakingWallet = getWallet();
381
-
382
- StakeManagerLib.checkDipBalanceAndAllowance(
383
- getToken(),
384
- from,
385
- address(tokenHandler),
386
- dipAmount);
387
-
388
- tokenHandler.transfer(from, stakingWallet, dipAmount);
389
- }
390
-
391
-
392
- function transferDipAmount(address to, Amount dipAmount)
577
+ function claimRewards(NftId stakeNftId)
393
578
  external
394
- restricted() // only staking service
579
+ virtual
580
+ restricted()
581
+ onlyStakeOwner(stakeNftId)
582
+ returns (
583
+ Amount claimedAmount
584
+ )
395
585
  {
396
- TokenHandler tokenHandler = getTokenHandler();
397
- address stakingWallet = getWallet();
398
-
399
- StakeManagerLib.checkDipBalanceAndAllowance(
400
- getToken(),
401
- stakingWallet,
402
- address(tokenHandler),
403
- dipAmount);
586
+ StakingStorage storage $ = _getStakingStorage();
587
+ claimedAmount = $._store.claimRewards(
588
+ stakeNftId,
589
+ true,
590
+ AmountLib.max());
404
591
 
405
- tokenHandler.transfer(stakingWallet, to, dipAmount);
592
+ // collect staked DIP token by staking service
593
+ if (claimedAmount.gtz()) {
594
+ // interactions
595
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
596
+ $._stakingService.pushDipToken(claimedAmount, stakeOwner);
597
+ }
406
598
  }
407
599
 
408
600
 
409
601
  //--- view functions ----------------------------------------------------//
410
602
 
411
- function getStakingReader() public view returns (StakingReader reader) {
603
+ function getStakingReader() public virtual view returns (StakingReader reader) {
412
604
  return _getStakingStorage()._reader;
413
605
  }
414
606
 
415
- function getStakingStore() external view returns (StakingStore stakingStore) {
607
+ function getStakingStore() external virtual view returns (StakingStore stakingStore) {
416
608
  return _getStakingStorage()._store;
417
609
  }
418
610
 
419
- function getTokenRegistryAddress() external view returns (address tokenRegistry) {
611
+ function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
420
612
  return address(_getStakingStorage()._tokenRegistry);
421
613
  }
422
614
 
615
+ function getTokenHandler() public virtual override(Component, IComponent) view returns (TokenHandler tokenHandler) {
616
+ return _getStakingStorage()._tokenHandler;
617
+ }
423
618
 
424
- // from Versionable
619
+ // from IRegisterable
620
+ function getRelease()
621
+ public
622
+ pure
623
+ virtual override (IRelease, Registerable)
624
+ returns(VersionPart)
625
+ {
626
+ return VersionPartLib.toVersionPart(3);
627
+ }
628
+
629
+ // from IVersionable
425
630
  function getVersion()
426
631
  public
427
632
  pure
428
- virtual override (IVersionable, Versionable)
633
+ virtual override (Component, IVersionable, Versionable)
429
634
  returns(Version)
430
635
  {
431
- return VersionLib.toVersion(GIF_MAJOR_VERSION,0,0);
636
+ return VersionLib.toVersion(3,0,0);
432
637
  }
433
638
 
434
639
  //--- internal functions ------------------------------------------------//
435
640
 
436
- function _updateRewards(
437
- StakingReader reader,
438
- StakingStore store,
439
- NftId stakeNftId
440
- )
641
+
642
+ function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
441
643
  internal
442
644
  virtual
443
- returns (NftId targetNftId)
645
+ returns (Amount newBalance)
444
646
  {
445
- UFixed rewardRate;
647
+ // checks + effects
648
+ StakingStorage storage $ = _getStakingStorage();
649
+ newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
650
+
651
+ // interactions
652
+ // collect DIP token from target owner
653
+ if (dipAmount.gtz()) {
654
+ $._stakingService.pullDipToken(dipAmount, transferFrom);
655
+ }
656
+ }
446
657
 
447
- (targetNftId, rewardRate) = reader.getTargetRewardRate(stakeNftId);
448
- (Amount rewardIncrement, ) = StakeManagerLib.calculateRewardIncrease(
449
- reader,
450
- stakeNftId,
451
- rewardRate);
452
658
 
453
- store.updateRewards(
454
- stakeNftId,
455
- targetNftId,
456
- rewardIncrement);
659
+ function _withdrawRewardReserves(NftId targetNftId, Amount dipAmount, address transferTo)
660
+ internal
661
+ virtual
662
+ returns (Amount newBalance)
663
+ {
664
+ // checks + effects
665
+ StakingStorage storage $ = _getStakingStorage();
666
+ newBalance = $._store.withdrawRewardReserves(targetNftId, dipAmount);
667
+
668
+ // interactions
669
+ // transfer DIP token to designated address
670
+ if (dipAmount.gtz()) {
671
+ $._stakingService.pushDipToken(dipAmount, transferTo);
672
+ }
673
+ }
674
+
675
+
676
+ function _addToken(
677
+ StakingStorage storage $,
678
+ ChainId chainId,
679
+ address token
680
+ )
681
+ internal
682
+ virtual
683
+ {
684
+ if ($._store.getTokenInfo(chainId, token).lastUpdateIn.eqz()) {
685
+ $._store.addToken(chainId, token);
686
+ }
457
687
  }
458
688
 
459
689
 
690
+ /// @dev top level initializer (upgradable contract)
460
691
  function _initialize(
461
692
  address owner,
462
693
  bytes memory data
463
694
  )
464
695
  internal
465
696
  virtual override
466
- initializer
697
+ onlyInitializing()
467
698
  {
468
699
  (
469
700
  address registryAddress,
470
701
  address tokenRegistryAddress,
471
- address stakingStoreAddress,
472
- address stakingOwner
473
- ) = abi.decode(data, (address, address, address, address));
702
+ address stakingStoreAddress
703
+ ) = abi.decode(data, (address, address, address));
474
704
 
475
- // only admin(authority) and dip token address are set in registry at this point
705
+ // wiring to external contracts
476
706
  IRegistry registry = IRegistry(registryAddress);
477
- address authority = registry.getAuthority();
478
- TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
479
- address dipTokenAddress = tokenRegistry.getDipTokenAddress();
480
-
481
- initializeComponent(
482
- authority,
483
- registryAddress,
484
- registry.getNftId(),
707
+ StakingStorage storage $ = _getStakingStorage();
708
+ $._protocolNftId = registry.getProtocolNftId();
709
+ $._store = StakingStore(stakingStoreAddress);
710
+ $._reader = StakingStore(stakingStoreAddress).getStakingReader();
711
+ $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
712
+ // staking service has to be set via setStakingService after deploying the first GIF release
713
+
714
+ // initialize component
715
+ __Component_init(
716
+ registry.getAuthority(),
717
+ address(registry),
718
+ registry.getNftId(), // parent nft id
485
719
  CONTRACT_NAME,
486
- dipTokenAddress,
487
720
  STAKING(),
488
721
  false, // is interceptor
489
- stakingOwner,
722
+ owner,
490
723
  "", // registry data
491
724
  ""); // component data
492
725
 
493
- _createAndSetTokenHandler();
726
+ // initialize target manager
727
+ uint16 tvlUpdatesTrigger = 2; // every 2nd tvl update TODO: make configurable
728
+ UFixed maxTvlRatio = UFixedLib.toUFixed(1, -1); // change of 10% in tvl TODO: make configurable
729
+ __TargetManager_init(
730
+ $._store,
731
+ tvlUpdatesTrigger,
732
+ maxTvlRatio);
733
+
734
+ // Protocol target is created in the StakingStore constructor.
735
+ // This allows setting up the protocol target before the full
736
+ // staking authorization setup is in place.
737
+ _checkAndLogProtocolTargetCreation($);
494
738
 
495
- // wiring to external contracts
739
+ _registerInterface(type(IStaking).interfaceId);
740
+ }
741
+
742
+
743
+ function _checkAndLogProtocolTargetCreation(StakingStorage storage $)
744
+ internal
745
+ virtual
746
+ {
747
+ TargetInfo memory protocolInfo = $._store.getTargetInfo($._protocolNftId);
748
+
749
+ if (protocolInfo.lastUpdateIn.eqz()) {
750
+ revert ErrorStakingTargetNotFound($._protocolNftId);
751
+ }
752
+
753
+ emit LogStakingTargetCreated(
754
+ $._protocolNftId,
755
+ protocolInfo.objectType,
756
+ protocolInfo.lockingPeriod,
757
+ protocolInfo.rewardRate,
758
+ protocolInfo.limitAmount);
759
+ }
760
+
761
+
762
+ function _checkTypeAndOwner(NftId nftId, ObjectType expectedObjectType, bool checkOwner)
763
+ internal
764
+ view
765
+ {
496
766
  StakingStorage storage $ = _getStakingStorage();
497
- $._protocolNftId = getRegistry().getProtocolNftId();
498
- $._store = StakingStore(stakingStoreAddress);
499
- $._reader = StakingStore(stakingStoreAddress).getStakingReader();
500
- $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
767
+ if (expectedObjectType == STAKE()) {
768
+ if (!$._store.exists(nftId)) {
769
+ revert ErrorStakingNotStake(nftId);
770
+ }
771
+ } else {
772
+ if (expectedObjectType == TARGET()) {
773
+ if (!$._store.getTargetSet().exists(nftId)) {
774
+ revert ErrorStakingNotTarget(nftId);
775
+ }
776
+ }
777
+ }
501
778
 
502
- registerInterface(type(IStaking).interfaceId);
779
+ if (checkOwner) {
780
+ address nftOwner = getRegistry().ownerOf(nftId);
781
+ if (msg.sender != nftOwner) {
782
+ revert ErrorStakingNotOwner(nftId, nftOwner, msg.sender);
783
+ }
784
+ }
503
785
  }
504
786
 
505
787