@etherisc/gif-next 0.0.2-85cbb88-630 → 0.0.2-85e1eb3-876

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 (555) 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 +394 -35
  186. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +97 -148
  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 +620 -92
  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 +1087 -160
  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 +1273 -405
  277. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  278. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +424 -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 +225 -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 +962 -729
  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 +174 -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 +69 -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 +120 -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 -36
  362. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  363. package/contracts/authorization/ServiceAuthorization.sol +255 -25
  364. package/contracts/distribution/BasicDistribution.sol +21 -29
  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 +83 -32
  447. package/contracts/registry/IRegistryService.sol +3 -10
  448. package/contracts/registry/IRelease.sol +29 -0
  449. package/contracts/registry/ITransferInterceptor.sol +1 -2
  450. package/contracts/registry/Registry.sol +370 -212
  451. package/contracts/registry/RegistryAdmin.sol +110 -287
  452. package/contracts/registry/RegistryAuthorization.sol +308 -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 +164 -66
  485. package/contracts/staking/IStakingService.sol +45 -78
  486. package/contracts/staking/Staking.sol +639 -228
  487. package/contracts/staking/StakingLib.sol +168 -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 +640 -361
  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 +92 -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 +76 -44
  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 +26 -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 +57 -6
  514. package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
  515. package/contracts/{shared → upgradeability}/ProxyManager.sol +96 -49
  516. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  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/shared/UpgradableProxyWithAdmin.sol +0 -16
  555. package/contracts/staking/StakeManagerLib.sol +0 -231
@@ -1,27 +1,36 @@
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 {IComponentService} from "../shared/IComponentService.sol";
18
+ import {NftId} from "../type/NftId.sol";
19
+ import {ObjectType, COMPONENT, 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 {ReleaseRegistry} from "../registry/ReleaseRegistry.sol";
23
+ import {StakingLib} from "./StakingLib.sol";
16
24
  import {StakingReader} from "./StakingReader.sol";
17
25
  import {StakingStore} from "./StakingStore.sol";
18
26
  import {TargetManagerLib} from "./TargetManagerLib.sol";
19
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
27
+ import {Timestamp} from "../type/Timestamp.sol";
20
28
  import {TokenHandler} from "../shared/TokenHandler.sol";
29
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
21
30
  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";
31
+ import {UFixed} from "../type/UFixed.sol";
32
+ import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
33
+ import {Versionable} from "../upgradeability/Versionable.sol";
25
34
 
26
35
  contract Staking is
27
36
  Component,
@@ -29,14 +38,14 @@ contract Staking is
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;
@@ -44,83 +53,289 @@ contract Staking is
44
53
 
45
54
 
46
55
  modifier onlyStake(NftId stakeNftId) {
47
- if (!_getStakingStorage()._store.exists(stakeNftId)) {
48
- revert ErrorStakingNotStake(stakeNftId);
49
- }
56
+ _checkTypeAndOwner(stakeNftId, STAKE(), false);
57
+ _;
58
+ }
59
+
60
+
61
+ modifier onlyStakeOwner(NftId stakeNftId) {
62
+ _checkTypeAndOwner(stakeNftId, STAKE(), true);
50
63
  _;
51
64
  }
52
65
 
53
66
 
54
67
  modifier onlyTarget(NftId targetNftId) {
55
- if (!_getStakingStorage()._store.getTargetNftIdSet().exists(targetNftId)) {
56
- revert ErrorStakingNotTarget(targetNftId);
57
- }
68
+ _checkTypeAndOwner(targetNftId, TARGET(), false);
69
+ _;
70
+ }
71
+
72
+
73
+ modifier onlyTargetOwner(NftId targetNftId) {
74
+ _checkTypeAndOwner(targetNftId, TARGET(), true);
58
75
  _;
59
76
  }
60
77
 
61
- // set/update staking reader
78
+ //--- contract intitialization -------------------------------------------
79
+
80
+ function initializeTokenHandler()
81
+ external
82
+ virtual
83
+ {
84
+ if (msg.sender != address(getRegistry())) {
85
+ revert ErrorStakingNotRegistry(msg.sender);
86
+ }
87
+
88
+ StakingStorage storage $ = _getStakingStorage();
89
+ address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
90
+ $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
91
+ address(getRegistry()),
92
+ address(this),
93
+ dipToken,
94
+ getRegistry().getAuthority());
95
+ }
96
+
97
+ //--- staking owner functions -------------------------------------------//
98
+
99
+ // TODO also make sure that protocol rewards can be refilled and withdrawn
100
+
101
+ /// @inheritdoc IStaking
102
+ function setProtocolLockingPeriod(Seconds newLockingPeriod)
103
+ external
104
+ virtual
105
+ restricted()
106
+ onlyOwner()
107
+ {
108
+ NftId protocolNftId = getRegistry().getProtocolNftId();
109
+ (
110
+ Seconds oldLockingPeriod,
111
+ Blocknumber lastUpdatedIn
112
+ ) = _getStakingStorage()._store.setLockingPeriod(protocolNftId, newLockingPeriod);
113
+
114
+ emit LogStakingProtocolLockingPeriodSet(protocolNftId, newLockingPeriod, oldLockingPeriod, lastUpdatedIn);
115
+ }
116
+
117
+
118
+ /// @inheritdoc IStaking
119
+ function setProtocolRewardRate(UFixed newRewardRate)
120
+ external
121
+ virtual
122
+ restricted()
123
+ onlyOwner()
124
+ {
125
+ NftId protocolNftId = getRegistry().getProtocolNftId();
126
+ (
127
+ UFixed oldRewardRate,
128
+ Blocknumber lastUpdatedIn
129
+ ) = _getStakingStorage()._store.setRewardRate(protocolNftId, newRewardRate);
130
+
131
+ emit LogStakingProtocolRewardRateSet(protocolNftId, newRewardRate, oldRewardRate, lastUpdatedIn);
132
+ }
133
+
134
+
135
+ /// @inheritdoc IStaking
136
+ function setStakingRate(
137
+ ChainId chainId,
138
+ address token,
139
+ UFixed stakingRate
140
+ )
141
+ external
142
+ virtual
143
+ restricted()
144
+ onlyOwner()
145
+ {
146
+ (
147
+ UFixed oldStakingRate,
148
+ Blocknumber lastUpdateIn
149
+ ) = _getStakingStorage()._store.setStakingRate(chainId, token, stakingRate);
150
+
151
+ emit LogStakingStakingRateSet(chainId, token, stakingRate, oldStakingRate, lastUpdateIn);
152
+ }
153
+
154
+
155
+ /// @inheritdoc IStaking
156
+ function setStakingService(VersionPart release)
157
+ external
158
+ virtual
159
+ restricted()
160
+ onlyOwner()
161
+ {
162
+ // checks
163
+ if (!ReleaseRegistry(getRegistry().getReleaseRegistryAddress()).isActiveRelease(release)) {
164
+ revert ErrorStakingReleaseNotActive(release);
165
+ }
166
+
167
+ address stakingServiceAddress = getRegistry().getServiceAddress(STAKING(), release);
168
+ if (stakingServiceAddress == address(0)) {
169
+ revert ErrorStakingServiceNotFound(release);
170
+ }
171
+
172
+ // effects
173
+ address oldStakingService = address(_getStakingStorage()._stakingService);
174
+ _getStakingStorage()._stakingService = IStakingService(stakingServiceAddress);
175
+
176
+ emit LogStakingStakingServiceSet(stakingServiceAddress, release, oldStakingService);
177
+ }
178
+
179
+
180
+ /// @inheritdoc IStaking
62
181
  function setStakingReader(StakingReader stakingReader)
63
182
  external
64
183
  virtual
184
+ restricted()
65
185
  onlyOwner()
66
186
  {
67
187
  if(stakingReader.getStaking() != IStaking(this)) {
68
188
  revert ErrorStakingStakingReaderStakingMismatch(address(stakingReader.getStaking()));
69
189
  }
70
190
 
191
+ address oldReader = address(_getStakingStorage()._reader);
71
192
  _getStakingStorage()._reader = stakingReader;
193
+
194
+ emit LogStakingStakingReaderSet(address(stakingReader), oldReader);
72
195
  }
73
196
 
74
197
 
75
- // rate management
76
- function setStakingRate(uint256 chainId, address token, UFixed stakingRate)
198
+ /// @inheritdoc IStaking
199
+ function addToken(
200
+ ChainId chainId,
201
+ address token
202
+ )
77
203
  external
78
204
  virtual
205
+ restricted()
79
206
  onlyOwner()
80
207
  {
81
- StakingStorage storage $ = _getStakingStorage();
82
-
83
- if (!$._tokenRegistry.isRegistered(chainId, token)) {
84
- revert ErrorStakingTokenNotRegistered(chainId, token);
208
+ _addToken(
209
+ _getStakingStorage(), chainId, token);
210
+ }
211
+
212
+
213
+ /// @inheritdoc IStaking
214
+ function approveTokenHandler(IERC20Metadata token, Amount amount)
215
+ public
216
+ virtual
217
+ restricted()
218
+ onlyOwner()
219
+ {
220
+ Amount oldAllowanceAmount = AmountLib.toAmount(
221
+ token.allowance(
222
+ address(this),
223
+ address(_getStakingStorage()._tokenHandler)));
224
+
225
+ // staking token handler approval via its own implementation in staking service
226
+ IComponentService(_getServiceAddress(STAKING())).approveTokenHandler(
227
+ token,
228
+ amount);
229
+
230
+ emit LogStakingTokenHandlerApproved(address(token), amount, oldAllowanceAmount);
231
+ }
232
+
233
+ //--- target management -------------------------------------------------//
234
+
235
+
236
+ /// @inheritdoc IStaking
237
+ function refillRewardReserves(NftId targetNftId, Amount dipAmount)
238
+ external
239
+ virtual
240
+ restricted()
241
+ onlyTarget(targetNftId)
242
+ returns (Amount newBalance)
243
+ {
244
+ address transferFrom = msg.sender;
245
+ _refillRewardReserves(targetNftId, dipAmount, transferFrom);
246
+ }
247
+
248
+
249
+ /// @inheritdoc IStaking
250
+ function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
251
+ external
252
+ virtual
253
+ restricted()
254
+ onlyTarget(targetNftId)
255
+ returns (Amount newBalance)
256
+ {
257
+ // special case 1: protocol target: staking owner is recipient
258
+ if (targetNftId == getRegistry().getProtocolNftId()) {
259
+ // verify that the caller is the staking owner
260
+ if (msg.sender != getOwner()) {
261
+ revert ErrorStakingNotStakingOwner();
262
+ }
263
+
264
+ return _withdrawRewardReserves(targetNftId, dipAmount, getOwner());
265
+ }
266
+
267
+ // special case 2: off-chain targets
268
+ // TODO decide how to handle and implement
269
+
270
+ // default: on-chain target owner is recipient
271
+ address targetOwner = getRegistry().ownerOf(targetNftId);
272
+ // verify that the caller is the target owner
273
+ if (msg.sender != targetOwner) {
274
+ revert ErrorStakingNotNftOwner(targetNftId);
275
+ }
276
+
277
+ return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
278
+ }
279
+
280
+
281
+ /// @inheritdoc IStaking
282
+ function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferFrom)
283
+ external
284
+ virtual
285
+ restricted()
286
+ onlyTarget(targetNftId)
287
+ returns (Amount newBalance)
288
+ {
289
+ address fundingBy = msg.sender;
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
+ // special case 1: protocol target: staking owner is recipient
303
+ if (targetNftId == getRegistry().getProtocolNftId()) {
304
+ return _withdrawRewardReserves(targetNftId, dipAmount, transferTo);
85
305
  }
86
306
 
87
- UFixed oldStakingRate = $._store.getStakingRate(chainId, token);
88
- $._store.setStakingRate(chainId, token, stakingRate);
307
+ // special case 2: off-chain targets
308
+ // TODO decide how to handle and implement
89
309
 
90
- emit LogStakingStakingRateSet(chainId, token, oldStakingRate, stakingRate);
310
+ // default: on-chain target owner is recipient
311
+ address targetOwner = getRegistry().ownerOf(targetNftId);
312
+ return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
91
313
  }
92
314
 
93
- // target management
94
315
 
316
+ /// @inheritdoc IStaking
95
317
  function registerTarget(
96
318
  NftId targetNftId,
97
319
  ObjectType expectedObjectType,
98
- uint256 chainId,
99
320
  Seconds initialLockingPeriod,
100
321
  UFixed initialRewardRate
101
322
  )
102
323
  external
103
324
  virtual
104
- restricted()
325
+ restricted() // staking service
105
326
  {
106
- TargetManagerLib.checkTargetParameters(
107
- getRegistry(),
108
- _getStakingStorage()._reader,
109
- targetNftId,
110
- expectedObjectType,
111
- initialLockingPeriod,
112
- initialRewardRate);
113
-
327
+ // checks done by staking store
114
328
  _getStakingStorage()._store.createTarget(
115
329
  targetNftId,
116
- TargetInfo({
117
- objectType: expectedObjectType,
118
- chainId: chainId,
119
- lockingPeriod: initialLockingPeriod,
120
- rewardRate: initialRewardRate}));
330
+ expectedObjectType,
331
+ initialLockingPeriod,
332
+ initialRewardRate);
333
+
334
+ emit LogStakingTargetCreated(targetNftId, expectedObjectType, initialLockingPeriod, initialRewardRate, AmountLib.max());
121
335
  }
122
336
 
123
337
 
338
+ /// @inheritdoc IStaking
124
339
  function setLockingPeriod(
125
340
  NftId targetNftId,
126
341
  Seconds lockingPeriod
@@ -130,66 +345,76 @@ contract Staking is
130
345
  restricted()
131
346
  onlyTarget(targetNftId)
132
347
  {
133
- (
134
- Seconds oldLockingPeriod,
135
- TargetInfo memory targetInfo
136
- ) = TargetManagerLib.updateLockingPeriod(
137
- this,
138
- targetNftId,
139
- lockingPeriod);
140
-
141
- _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
348
+ (Seconds oldLockingPeriod, ) = _getStakingStorage()._store.setLockingPeriod(targetNftId, lockingPeriod);
142
349
 
143
- emit LogStakingLockingPeriodSet(targetNftId, oldLockingPeriod, lockingPeriod);
350
+ emit LogStakingTargetLockingPeriodSet(targetNftId, lockingPeriod, oldLockingPeriod);
144
351
  }
145
352
 
146
- // TODO add function to set protocol reward rate: onlyOwner
147
- // get protocol nft id (from where)
148
353
 
354
+ /// @inheritdoc IStaking
149
355
  function setRewardRate(NftId targetNftId, UFixed rewardRate)
150
356
  external
151
357
  virtual
152
358
  restricted()
153
359
  onlyTarget(targetNftId)
154
360
  {
155
- (
156
- UFixed oldRewardRate,
157
- TargetInfo memory targetInfo
158
- ) = TargetManagerLib.updateRewardRate(
159
- this,
160
- targetNftId,
161
- rewardRate);
162
-
163
- _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
164
-
165
- emit LogStakingRewardRateSet(targetNftId, oldRewardRate, rewardRate);
361
+ (UFixed oldRewardRate,) = _getStakingStorage()._store.setRewardRate(targetNftId, rewardRate);
362
+ emit LogStakingTargetRewardRateSet(targetNftId, rewardRate, oldRewardRate);
166
363
  }
167
364
 
168
365
 
169
- function refillRewardReserves(NftId targetNftId, Amount dipAmount)
366
+ /// @inheritdoc IStaking
367
+ function setMaxStakedAmount(NftId targetNftId, Amount maxStakedAmount)
170
368
  external
171
369
  virtual
172
370
  restricted()
173
- returns (Amount newBalance)
371
+ onlyTarget(targetNftId)
174
372
  {
175
- // update book keeping of reward reserves
176
- StakingStorage storage $ = _getStakingStorage();
177
- newBalance = $._store.increaseReserves(targetNftId, dipAmount);
373
+ _getStakingStorage()._store.setMaxStakedAmount(targetNftId, maxStakedAmount);
374
+ emit LogStakingTargetMaxStakedAmountSet(targetNftId, maxStakedAmount);
178
375
  }
179
376
 
180
-
181
- function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
377
+ // TODO cleanup
378
+ // /// @inheritdoc IStaking
379
+ // function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address from)
380
+ // external
381
+ // virtual
382
+ // restricted()
383
+ // returns (Amount newBalance)
384
+ // {
385
+ // _refillRewardReserves(targetNftId, dipAmount, from);
386
+ // }
387
+
388
+
389
+ // /// @inheritdoc IStaking
390
+ // function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address to)
391
+ // external
392
+ // virtual
393
+ // restricted()
394
+ // returns (Amount newBalance)
395
+ // {
396
+ // _withdrawRewardReserves(targetNftId, dipAmount, to);
397
+ // }
398
+
399
+
400
+ /// @inheritdoc IStaking
401
+ function addTargetToken(NftId targetNftId, address token)
182
402
  external
183
403
  virtual
184
404
  restricted()
185
- returns (Amount newBalance)
405
+ onlyTarget(targetNftId)
186
406
  {
187
- // update book keeping of reward reserves
188
407
  StakingStorage storage $ = _getStakingStorage();
189
- newBalance = $._store.decreaseReserves(targetNftId, dipAmount);
408
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
409
+ _addToken($, chainId, token);
410
+
411
+ $._store.addTargetToken(targetNftId, token);
412
+
413
+ emit LogStakingTargetTokenAdded(targetNftId, chainId, token);
190
414
  }
191
415
 
192
416
 
417
+ /// @inheritdoc IStaking
193
418
  function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
194
419
  external
195
420
  virtual
@@ -197,12 +422,13 @@ contract Staking is
197
422
  returns (Amount newBalance)
198
423
  {
199
424
  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);
425
+ newBalance = $._store.increaseTotalValueLocked(targetNftId, token, amount);
426
+
427
+ emit LogStakingTotalValueLockedIncreased(targetNftId, token, amount, newBalance);
203
428
  }
204
429
 
205
430
 
431
+ /// @inheritdoc IStaking
206
432
  function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
207
433
  external
208
434
  virtual
@@ -210,12 +436,14 @@ contract Staking is
210
436
  returns (Amount newBalance)
211
437
  {
212
438
  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);
439
+ newBalance = $._store.decreaseTotalValueLocked(targetNftId, token, amount);
440
+
441
+ emit LogStakingTotalValueLockedDecreased(targetNftId, token, amount, newBalance);
216
442
  }
217
443
 
218
444
 
445
+ // TODO add to interface and implement
446
+ /// inheritdoc IStaking
219
447
  function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
220
448
  external
221
449
  virtual
@@ -225,6 +453,8 @@ contract Staking is
225
453
 
226
454
  }
227
455
 
456
+ // TODO add to interface and implement
457
+ /// @inheritdoc IStaking
228
458
  function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
229
459
  external
230
460
  virtual
@@ -236,270 +466,451 @@ contract Staking is
236
466
 
237
467
  //--- staking functions -------------------------------------------------//
238
468
 
469
+ /// @inheritdoc IStaking
239
470
  function createStake(
240
- NftId stakeNftId,
241
471
  NftId targetNftId,
242
- Amount stakeAmount
472
+ Amount stakeAmount,
473
+ address stakeOwner
243
474
  )
244
475
  external
245
476
  virtual
246
- restricted() // only staking service
477
+ restricted()
478
+ onlyTarget(targetNftId)
479
+ returns (NftId stakeNftId)
247
480
  {
248
481
  StakingStorage storage $ = _getStakingStorage();
249
- Timestamp lockedUntil = StakeManagerLib.checkCreateParameters(
250
- $._reader,
251
- targetNftId,
252
- stakeAmount);
253
482
 
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);
483
+ // effects (includes further checks in service)
484
+ stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
485
+ Timestamp lockedUntil = $._store.createStake(stakeNftId, targetNftId, stakeAmount);
486
+
487
+ emit LogStakingStakeCreated(stakeNftId, targetNftId, stakeAmount, lockedUntil, stakeOwner);
488
+
489
+ // interactions
490
+ $._stakingService.pullDipToken(stakeAmount, stakeOwner);
265
491
  }
266
492
 
267
493
 
494
+ /// @inheritdoc IStaking
268
495
  function stake(
269
496
  NftId stakeNftId,
270
497
  Amount stakeAmount
271
498
  )
272
499
  external
273
500
  virtual
274
- restricted() // only staking service
275
- onlyStake(stakeNftId)
276
- returns (Amount stakeBalance)
501
+ restricted()
502
+ onlyStakeOwner(stakeNftId)
503
+ returns (Amount newStakeBalance)
277
504
  {
278
505
  StakingStorage storage $ = _getStakingStorage();
279
- stakeBalance = StakeManagerLib.stake(
280
- getRegistry(),
281
- $._reader,
282
- $._store,
283
- stakeNftId,
284
- stakeAmount);
285
- }
286
506
 
507
+ // update rewards for stake (add rewards since last update)
508
+ (
509
+ Amount rewardIncreaseAmount,
510
+ Seconds targetLockingPeriod,
511
+ Amount stakeBalance,
512
+ Amount rewardBalance,
513
+ Timestamp lockedUntil
514
+ ) = _updateRewards($, stakeNftId);
515
+
516
+ // no additional locking duration if no additional stakes
517
+ if (stakeAmount.eqz()) {
518
+ targetLockingPeriod = SecondsLib.zero();
519
+ }
287
520
 
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();
521
+ // increase stakes and restake rewards
522
+ bool restakeRewards = true;
523
+ if (restakeRewards && rewardBalance.gtz()) {
524
+ emit LogStakingRewardsRestaked(stakeNftId, rewardBalance + rewardBalance, stakeBalance, AmountLib.zero(), lockedUntil);
525
+ }
300
526
 
301
- // TODO implement
302
- }
527
+ (
528
+ stakeBalance,
529
+ rewardBalance,
530
+ lockedUntil
531
+ ) = $._store.increaseStakes(
532
+ stakeNftId,
533
+ stakeAmount,
534
+ targetLockingPeriod,
535
+ restakeRewards);
303
536
 
537
+ // collect staked DIP token by staking service
538
+ if (stakeAmount.gtz()) {
539
+ emit LogStakingStaked(stakeNftId, stakeAmount, stakeBalance, rewardBalance, lockedUntil);
304
540
 
305
- function updateRewards(NftId stakeNftId)
306
- external
307
- virtual
308
- restricted() // only staking service
309
- onlyStake(stakeNftId)
310
- {
311
- StakingStorage storage $ = _getStakingStorage();
312
- _updateRewards($._reader, $._store, stakeNftId);
541
+ // interactions
542
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
543
+ $._stakingService.pullDipToken(stakeAmount, stakeOwner);
544
+ }
313
545
  }
314
546
 
315
547
 
316
- function claimRewards(NftId stakeNftId)
548
+ /// @inheritdoc IStaking
549
+ function unstake(NftId stakeNftId)
317
550
  external
318
551
  virtual
319
552
  restricted() // only staking service
320
- onlyStake(stakeNftId)
553
+ onlyStakeOwner(stakeNftId)
321
554
  returns (
555
+ Amount unstakedAmount,
322
556
  Amount rewardsClaimedAmount
323
557
  )
324
558
  {
325
559
  StakingStorage storage $ = _getStakingStorage();
560
+ bool restakeRewards = true;
561
+ Timestamp lockedUntil;
326
562
 
327
- // update rewards since last update
328
- NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
329
-
330
- // unstake all available rewards
331
- rewardsClaimedAmount = $._store.claimUpTo(
563
+ (
564
+ unstakedAmount,
565
+ rewardsClaimedAmount,
566
+ lockedUntil
567
+ ) = _unstakeAll(
568
+ $,
332
569
  stakeNftId,
333
- targetNftId,
334
- AmountLib.max());
570
+ restakeRewards); // restake rewards
335
571
 
336
- // update reward reserves
337
- $._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
572
+ // collect staked DIP token by staking service
573
+ Amount collectedAmount = unstakedAmount + rewardsClaimedAmount;
574
+ if (collectedAmount.gtz()) {
575
+
576
+ // interactions
577
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
578
+ $._stakingService.pushDipToken(collectedAmount, stakeOwner);
579
+ }
338
580
  }
339
581
 
340
582
 
341
- function unstake(NftId stakeNftId)
583
+ /// @inheritdoc IStaking
584
+ function restake(
585
+ NftId stakeNftId,
586
+ NftId newTargetNftId
587
+ )
342
588
  external
343
589
  virtual
344
590
  restricted() // only staking service
345
- onlyStake(stakeNftId)
591
+ onlyStakeOwner(stakeNftId)
592
+ onlyTarget(newTargetNftId)
346
593
  returns (
347
- Amount unstakedAmount,
348
- Amount rewardsClaimedAmount
594
+ NftId newStakeNftId,
595
+ Amount newStakedAmount
349
596
  )
350
597
  {
351
- // TODO add check that stake locking is in the past
352
598
  StakingStorage storage $ = _getStakingStorage();
599
+ address stakeOwner = msg.sender;
353
600
 
354
- // update rewards since last update
355
- NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
356
-
357
- // unstake all available dips
358
601
  (
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
- }
602
+ Amount unstakedAmount,
603
+ Amount rewardsClaimedAmount,
604
+ ) = _unstakeAll($, stakeNftId, true); // restake rewards
370
605
 
606
+ newStakeNftId = $._stakingService.createStakeObject(newTargetNftId, stakeOwner);
607
+ newStakedAmount = unstakedAmount + rewardsClaimedAmount;
608
+ $._store.createStake(
609
+ newStakeNftId,
610
+ newTargetNftId,
611
+ newStakedAmount);
371
612
 
613
+ emit LogStakingStakeRestaked(newStakeNftId, newTargetNftId, newStakedAmount, stakeOwner, stakeNftId);
614
+ }
372
615
 
373
- //--- other functions ---------------------------------------------------//
374
616
 
375
- function collectDipAmount(address from, Amount dipAmount)
617
+ function updateRewards(NftId stakeNftId)
376
618
  external
619
+ virtual
377
620
  restricted() // only staking service
621
+ onlyStake(stakeNftId)
622
+ returns (Amount newRewardAmount)
378
623
  {
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);
624
+ _updateRewards(
625
+ _getStakingStorage(),
626
+ stakeNftId);
389
627
  }
390
628
 
391
629
 
392
- function transferDipAmount(address to, Amount dipAmount)
630
+ function claimRewards(NftId stakeNftId)
393
631
  external
632
+ virtual
394
633
  restricted() // only staking service
634
+ onlyStake(stakeNftId)
635
+ returns (
636
+ Amount rewardsClaimedAmount
637
+ )
395
638
  {
396
- TokenHandler tokenHandler = getTokenHandler();
397
- address stakingWallet = getWallet();
639
+ StakingStorage storage $ = _getStakingStorage();
640
+
641
+ // update rewards since last update
642
+ _updateRewards($, stakeNftId);
643
+
644
+ (
645
+ Amount restakedRewardAmount,
646
+ Amount unstakedAmount,
647
+ Amount claimedAmount,
648
+ Amount stakedBalance,
649
+ Amount rewardBalance,
650
+ Timestamp lockedUntil
651
+ ) = $._store.decreaseStakes(
652
+ stakeNftId,
653
+ AmountLib.zero(), // unstake dip amount
654
+ AmountLib.max(), // unstake reward amount
655
+ false); // restake rewards
398
656
 
399
- StakeManagerLib.checkDipBalanceAndAllowance(
400
- getToken(),
401
- stakingWallet,
402
- address(tokenHandler),
403
- dipAmount);
657
+ // collect staked DIP token by staking service
658
+ if (claimedAmount.gtz()) {
659
+ emit LogStakingRewardsClaimed(stakeNftId, claimedAmount, stakedBalance, rewardBalance, lockedUntil);
404
660
 
405
- tokenHandler.transfer(stakingWallet, to, dipAmount);
661
+ // interactions
662
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
663
+ $._stakingService.pushDipToken(claimedAmount, stakeOwner);
664
+ }
406
665
  }
407
666
 
408
667
 
409
668
  //--- view functions ----------------------------------------------------//
410
669
 
411
- function getStakingReader() public view returns (StakingReader reader) {
670
+ function getStakingReader() public virtual view returns (StakingReader reader) {
412
671
  return _getStakingStorage()._reader;
413
672
  }
414
673
 
415
- function getStakingStore() external view returns (StakingStore stakingStore) {
674
+ function getStakingStore() external virtual view returns (StakingStore stakingStore) {
416
675
  return _getStakingStorage()._store;
417
676
  }
418
677
 
419
- function getTokenRegistryAddress() external view returns (address tokenRegistry) {
678
+ function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
420
679
  return address(_getStakingStorage()._tokenRegistry);
421
680
  }
422
681
 
682
+ function getTokenHandler() public virtual override(Component, IComponent) view returns (TokenHandler tokenHandler) {
683
+ return _getStakingStorage()._tokenHandler;
684
+ }
423
685
 
424
- // from Versionable
686
+ // from IRegisterable
687
+ function getRelease()
688
+ public
689
+ pure
690
+ virtual override (IRelease, Registerable)
691
+ returns(VersionPart)
692
+ {
693
+ return VersionPartLib.toVersionPart(3);
694
+ }
695
+
696
+ // from IVersionable
425
697
  function getVersion()
426
698
  public
427
699
  pure
428
- virtual override (IVersionable, Versionable)
700
+ virtual override (Component, IVersionable, Versionable)
429
701
  returns(Version)
430
702
  {
431
- return VersionLib.toVersion(GIF_MAJOR_VERSION,0,0);
703
+ return VersionLib.toVersion(3,0,0);
432
704
  }
433
705
 
434
706
  //--- internal functions ------------------------------------------------//
435
707
 
708
+
709
+ function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
710
+ internal
711
+ virtual
712
+ returns (Amount newBalance)
713
+ {
714
+ // checks + effects
715
+ StakingStorage storage $ = _getStakingStorage();
716
+ newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
717
+
718
+ // interactions
719
+ // collect DIP token from target owner
720
+ if (dipAmount.gtz()) {
721
+ $._stakingService.pullDipToken(dipAmount, transferFrom);
722
+ }
723
+ }
724
+
725
+
726
+ function _withdrawRewardReserves(NftId targetNftId, Amount dipAmount, address transferTo)
727
+ internal
728
+ virtual
729
+ returns (Amount newBalance)
730
+ {
731
+ // checks + effects
732
+ StakingStorage storage $ = _getStakingStorage();
733
+ newBalance = $._store.withdrawRewardReserves(targetNftId, dipAmount);
734
+
735
+ // interactions
736
+ // transfer DIP token to designated address
737
+ if (dipAmount.gtz()) {
738
+ $._stakingService.pushDipToken(dipAmount, transferTo);
739
+ }
740
+ }
741
+
742
+
436
743
  function _updateRewards(
437
- StakingReader reader,
438
- StakingStore store,
744
+ StakingStorage storage $,
439
745
  NftId stakeNftId
746
+ )
747
+ internal
748
+ virtual
749
+ returns (
750
+ Amount rewardIncreaseAmount,
751
+ Seconds targetLockingPeriod,
752
+ Amount stakeBalance,
753
+ Amount rewardBalance,
754
+ Timestamp lockedUntil
755
+ )
756
+ {
757
+ (
758
+ rewardIncreaseAmount,
759
+ targetLockingPeriod,
760
+ stakeBalance,
761
+ rewardBalance,
762
+ lockedUntil
763
+ ) = $._store.updateRewards(stakeNftId);
764
+
765
+ if (rewardIncreaseAmount.gtz()) {
766
+ emit LogStakingStakeRewardsUpdated(stakeNftId, rewardIncreaseAmount, stakeBalance, rewardBalance, lockedUntil);
767
+ }
768
+ }
769
+
770
+
771
+ function _unstakeAll(
772
+ StakingStorage storage $,
773
+ NftId stakeNftId,
774
+ bool restakeRewards
440
775
  )
441
776
  internal
442
777
  virtual
443
- returns (NftId targetNftId)
778
+ returns (
779
+ Amount unstakedAmount,
780
+ Amount claimedAmount,
781
+ Timestamp lockedUntil
782
+ )
444
783
  {
445
- UFixed rewardRate;
784
+ // additional checks (most checks are done prior to calling this function)
785
+ if ($._store.isStakeLocked(stakeNftId)) {
786
+ revert ErrorStakingStakeLocked(stakeNftId, $._store.getStakeInfo(stakeNftId).lockedUntil);
787
+ }
788
+
789
+ // update rewards since last update
790
+ (,,,, lockedUntil) = _updateRewards($, stakeNftId);
791
+ Amount restakedRewardAmount;
792
+ Amount stakeBalance;
793
+ Amount rewardBalance;
446
794
 
447
- (targetNftId, rewardRate) = reader.getTargetRewardRate(stakeNftId);
448
- (Amount rewardIncrement, ) = StakeManagerLib.calculateRewardIncrease(
449
- reader,
795
+ (
796
+ restakedRewardAmount,
797
+ unstakedAmount,
798
+ claimedAmount,
799
+ stakeBalance,
800
+ rewardBalance,
801
+ ) = $._store.decreaseStakes(
450
802
  stakeNftId,
451
- rewardRate);
803
+ AmountLib.max(), // unstake all stakes
804
+ AmountLib.max(), // claim all rewards
805
+ restakeRewards);
452
806
 
453
- store.updateRewards(
454
- stakeNftId,
455
- targetNftId,
456
- rewardIncrement);
807
+ if (restakedRewardAmount.gtz()) {
808
+ emit LogStakingRewardsRestaked(stakeNftId, restakedRewardAmount, stakeBalance + unstakedAmount, rewardBalance + claimedAmount, lockedUntil);
809
+ }
810
+
811
+ if (unstakedAmount.gtz() || claimedAmount.gtz()) {
812
+ emit LogStakingUnstaked(stakeNftId, unstakedAmount + claimedAmount, stakeBalance, rewardBalance, lockedUntil);
813
+ }
814
+ }
815
+
816
+
817
+ function _addToken(
818
+ StakingStorage storage $,
819
+ ChainId chainId,
820
+ address token
821
+ )
822
+ internal
823
+ virtual
824
+ {
825
+ if ($._store.getTokenInfo(chainId, token).lastUpdateIn.eqz()) {
826
+ $._store.addToken(chainId, token);
827
+
828
+ emit LogStakingTokenAdded(chainId, token);
829
+ }
457
830
  }
458
831
 
459
832
 
833
+ /// @dev top level initializer (upgradable contract)
460
834
  function _initialize(
461
835
  address owner,
462
836
  bytes memory data
463
837
  )
464
838
  internal
465
839
  virtual override
466
- initializer
840
+ onlyInitializing()
467
841
  {
468
842
  (
469
843
  address registryAddress,
470
844
  address tokenRegistryAddress,
471
- address stakingStoreAddress,
472
- address stakingOwner
473
- ) = abi.decode(data, (address, address, address, address));
845
+ address stakingStoreAddress
846
+ ) = abi.decode(data, (address, address, address));
474
847
 
475
- // only admin(authority) and dip token address are set in registry at this point
848
+ // wiring to external contracts
476
849
  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(),
850
+ StakingStorage storage $ = _getStakingStorage();
851
+ $._protocolNftId = registry.getProtocolNftId();
852
+ $._store = StakingStore(stakingStoreAddress);
853
+ $._reader = StakingStore(stakingStoreAddress).getStakingReader();
854
+ $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
855
+ // staking service has to be set via setStakingService after deploying the first GIF release
856
+
857
+ __Component_init(
858
+ registry.getAuthority(),
859
+ address(registry),
860
+ registry.getNftId(), // parent nft id
485
861
  CONTRACT_NAME,
486
- dipTokenAddress,
487
862
  STAKING(),
488
863
  false, // is interceptor
489
- stakingOwner,
864
+ owner,
490
865
  "", // registry data
491
866
  ""); // component data
492
867
 
493
- _createAndSetTokenHandler();
868
+ // Protocol target is created in the StakingStore constructor.
869
+ // This allows setting up the protocol target before the full
870
+ // staking authorization setup is in place.
871
+ _checkAndLogProtocolTargetCreation();
494
872
 
495
- // wiring to external contracts
873
+ _registerInterface(type(IStaking).interfaceId);
874
+ }
875
+
876
+
877
+ function _checkAndLogProtocolTargetCreation()
878
+ internal
879
+ virtual
880
+ {
496
881
  StakingStorage storage $ = _getStakingStorage();
497
- $._protocolNftId = getRegistry().getProtocolNftId();
498
- $._store = StakingStore(stakingStoreAddress);
499
- $._reader = StakingStore(stakingStoreAddress).getStakingReader();
500
- $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
882
+ TargetInfo memory protocolInfo = $._store.getTargetInfo($._protocolNftId);
501
883
 
502
- registerInterface(type(IStaking).interfaceId);
884
+ if (protocolInfo.lastUpdateIn.eqz()) {
885
+ revert ErrorStakingTargetNotFound($._protocolNftId);
886
+ }
887
+
888
+ emit LogStakingTargetCreated($._protocolNftId, protocolInfo.objectType, protocolInfo.lockingPeriod, protocolInfo.rewardRate, protocolInfo.maxStakedAmount);
889
+ }
890
+
891
+
892
+ function _checkTypeAndOwner(NftId nftId, ObjectType expectedObjectType, bool checkOwner)
893
+ internal
894
+ view
895
+ {
896
+ if (expectedObjectType == STAKE()) {
897
+ if (!_getStakingStorage()._store.exists(nftId)) {
898
+ revert ErrorStakingNotStake(nftId);
899
+ }
900
+ } else {
901
+ if (expectedObjectType == TARGET()) {
902
+ if (!_getStakingStorage()._store.getTargetSet().exists(nftId)) {
903
+ revert ErrorStakingNotTarget(nftId);
904
+ }
905
+ }
906
+ }
907
+
908
+ if (checkOwner) {
909
+ address nftOwner = getRegistry().ownerOf(nftId);
910
+ if (msg.sender != nftOwner) {
911
+ revert ErrorStakingNotOwner(nftId, nftOwner, msg.sender);
912
+ }
913
+ }
503
914
  }
504
915
 
505
916