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

Sign up to get free protection for your applications and to get access to all the features.
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