@etherisc/gif-next 0.0.2-e769e2e-077 → 0.0.2-e7a5428-226

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