@etherisc/gif-next 0.0.2-f9b0591-801 → 0.0.2-fa35bce-363

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