@etherisc/gif-next 0.0.2-9620cae-586 → 0.0.2-9628b30-648

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