@etherisc/gif-next 0.0.2-804cdbf-724 → 0.0.2-8112a1f-745

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