@etherisc/gif-next 0.0.2-858f0b8-208 → 0.0.2-85e1eb3-876

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