@etherisc/gif-next 0.0.2-b3a9c97-695 → 0.0.2-b3e9a44-364

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 (419) hide show
  1. package/README.md +5 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +33 -52
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +0 -19
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +52 -212
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +16 -184
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +148 -284
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +100 -120
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +16 -37
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +65 -31
  31. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  33. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1507 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1978 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  41. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1427 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1187 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1561 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1996 -0
  51. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +16 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +16 -0
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +26 -99
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +97 -100
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +424 -74
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +55 -146
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +77 -81
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +249 -111
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  86. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +42 -202
  89. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
  91. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +16 -37
  94. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +16 -0
  96. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +16 -184
  98. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +53 -144
  100. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +76 -80
  102. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +45 -185
  104. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  106. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +146 -220
  108. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +115 -107
  110. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +40 -0
  112. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +48 -41
  114. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +219 -118
  116. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  117. package/artifacts/contracts/pool/Pool.sol/Pool.json +45 -185
  118. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +284 -300
  120. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +96 -92
  122. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +47 -146
  124. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +73 -81
  126. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +44 -210
  128. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  130. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +256 -229
  132. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +117 -109
  134. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +16 -0
  136. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +148 -7
  138. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +128 -16
  140. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +59 -43
  142. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +44 -63
  144. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  145. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +18 -2
  146. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +218 -289
  148. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +108 -128
  150. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.json +133 -261
  152. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +97 -117
  154. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  155. package/artifacts/contracts/product/Product.sol/Product.json +44 -210
  156. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.json +604 -0
  158. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +698 -0
  160. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  162. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +288 -21
  164. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +16 -0
  166. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  167. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  168. package/artifacts/contracts/registry/Registry.sol/Registry.json +494 -82
  169. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  170. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +243 -131
  171. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +39 -313
  173. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +68 -72
  175. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  176. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  177. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  179. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  181. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  182. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  183. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  184. package/artifacts/contracts/shared/Component.sol/Component.json +16 -173
  185. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  186. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +103 -265
  187. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +112 -126
  189. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +21 -112
  191. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  192. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  193. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  194. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +16 -26
  195. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +16 -0
  197. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +16 -37
  199. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  200. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  201. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  202. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  203. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  204. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  205. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +16 -0
  207. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  209. package/artifacts/contracts/shared/IService.sol/IService.json +16 -0
  210. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  211. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  212. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  213. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +16 -184
  214. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  215. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  216. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  217. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  218. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  219. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  220. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  221. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  222. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  223. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +24 -97
  224. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  225. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  226. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  227. package/artifacts/contracts/shared/Service.sol/Service.json +21 -112
  228. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  229. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +288 -16
  230. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  231. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  232. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  233. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +43 -27
  234. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  235. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +16 -21
  236. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  237. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  238. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  239. package/artifacts/contracts/staking/Staking.sol/Staking.json +101 -248
  240. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  241. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  242. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  243. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +93 -100
  244. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  245. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  246. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  247. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +47 -159
  248. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +72 -76
  250. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +84 -84
  252. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  253. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  254. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  255. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  257. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  260. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  262. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  264. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  266. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  268. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  269. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  270. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  272. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  274. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  276. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  278. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  280. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  282. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  284. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  288. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  291. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  293. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  295. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  297. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  298. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
  300. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  301. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  302. package/contracts/authorization/AccessAdmin.sol +25 -24
  303. package/contracts/authorization/Authorization.sol +5 -2
  304. package/contracts/authorization/IAccessAdmin.sol +0 -1
  305. package/contracts/distribution/BasicDistribution.sol +2 -0
  306. package/contracts/distribution/Distribution.sol +3 -2
  307. package/contracts/distribution/DistributionService.sol +70 -45
  308. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  309. package/contracts/distribution/IDistributionService.sol +8 -2
  310. package/contracts/examples/fire/DamageLevel.sol +59 -0
  311. package/contracts/examples/fire/FirePool.sol +75 -0
  312. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  313. package/contracts/examples/fire/FireProduct.sol +411 -0
  314. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  315. package/contracts/examples/fire/FireUSD.sol +26 -0
  316. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  317. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  318. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  319. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  320. package/contracts/instance/IInstance.sol +7 -30
  321. package/contracts/instance/Instance.sol +10 -35
  322. package/contracts/instance/InstanceAdmin.sol +29 -7
  323. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  324. package/contracts/instance/InstanceReader.sol +106 -19
  325. package/contracts/instance/InstanceService.sol +12 -14
  326. package/contracts/instance/InstanceServiceManager.sol +6 -7
  327. package/contracts/instance/InstanceStore.sol +11 -1
  328. package/contracts/instance/base/ObjectLifecycle.sol +7 -1
  329. package/contracts/instance/module/IComponents.sol +4 -2
  330. package/contracts/instance/module/IPolicy.sol +23 -23
  331. package/contracts/oracle/Oracle.sol +2 -1
  332. package/contracts/oracle/OracleService.sol +41 -33
  333. package/contracts/oracle/OracleServiceManager.sol +6 -6
  334. package/contracts/pool/BasicPool.sol +12 -13
  335. package/contracts/pool/BundleService.sol +41 -17
  336. package/contracts/pool/BundleServiceManager.sol +6 -6
  337. package/contracts/pool/IBundleService.sol +10 -0
  338. package/contracts/pool/IPoolComponent.sol +18 -8
  339. package/contracts/pool/IPoolService.sol +49 -25
  340. package/contracts/pool/Pool.sol +61 -32
  341. package/contracts/pool/PoolService.sol +116 -77
  342. package/contracts/pool/PoolServiceManager.sol +4 -4
  343. package/contracts/product/ApplicationService.sol +13 -12
  344. package/contracts/product/ApplicationServiceManager.sol +4 -4
  345. package/contracts/product/BasicProduct.sol +1 -0
  346. package/contracts/product/ClaimService.sol +245 -81
  347. package/contracts/product/ClaimServiceManager.sol +4 -4
  348. package/contracts/product/IClaimService.sol +30 -7
  349. package/contracts/product/IPolicyService.sol +16 -20
  350. package/contracts/product/IPricingService.sol +7 -7
  351. package/contracts/product/IProductComponent.sol +17 -4
  352. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  353. package/contracts/product/PolicyService.sol +209 -118
  354. package/contracts/product/PolicyServiceManager.sol +4 -4
  355. package/contracts/product/PricingService.sol +42 -46
  356. package/contracts/product/PricingServiceManager.sol +3 -3
  357. package/contracts/product/Product.sol +67 -46
  358. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  359. package/contracts/product/RiskServiceManager.sol +39 -0
  360. package/contracts/registry/ChainNft.sol +65 -32
  361. package/contracts/registry/IRegistry.sol +55 -15
  362. package/contracts/registry/IRegistryService.sol +0 -9
  363. package/contracts/registry/Registry.sol +336 -197
  364. package/contracts/registry/RegistryAdmin.sol +150 -51
  365. package/contracts/registry/RegistryService.sol +55 -48
  366. package/contracts/registry/RegistryServiceManager.sol +2 -2
  367. package/contracts/registry/ReleaseRegistry.sol +12 -6
  368. package/contracts/registry/ServiceAuthorizationV3.sol +6 -8
  369. package/contracts/shared/Component.sol +12 -32
  370. package/contracts/shared/ComponentService.sol +17 -16
  371. package/contracts/shared/ComponentServiceManager.sol +8 -5
  372. package/contracts/shared/ComponentVerifyingService.sol +2 -3
  373. package/contracts/shared/ContractLib.sol +38 -0
  374. package/contracts/shared/IComponent.sol +0 -1
  375. package/contracts/shared/IInstanceLinkedComponent.sol +0 -7
  376. package/contracts/shared/INftOwnable.sol +2 -0
  377. package/contracts/shared/IPolicyHolder.sol +12 -22
  378. package/contracts/shared/InitializableERC165.sol +2 -2
  379. package/contracts/shared/InstanceLinkedComponent.sol +5 -6
  380. package/contracts/shared/NftOwnable.sol +21 -5
  381. package/contracts/shared/PolicyHolder.sol +15 -52
  382. package/contracts/shared/Registerable.sol +4 -4
  383. package/contracts/shared/RegistryLinked.sol +3 -2
  384. package/contracts/shared/Service.sol +16 -11
  385. package/contracts/shared/TokenHandler.sol +99 -22
  386. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  387. package/contracts/staking/IStaking.sol +2 -1
  388. package/contracts/staking/IStakingService.sol +0 -3
  389. package/contracts/staking/StakeManagerLib.sol +18 -25
  390. package/contracts/staking/Staking.sol +11 -29
  391. package/contracts/staking/StakingManager.sol +8 -6
  392. package/contracts/staking/StakingReader.sol +12 -5
  393. package/contracts/staking/StakingService.sol +3 -17
  394. package/contracts/staking/StakingServiceManager.sol +2 -2
  395. package/contracts/staking/TargetManagerLib.sol +7 -3
  396. package/contracts/type/Amount.sol +15 -0
  397. package/contracts/type/ClaimId.sol +6 -1
  398. package/contracts/type/NftId.sol +1 -0
  399. package/contracts/type/ObjectType.sol +16 -11
  400. package/contracts/type/PayoutId.sol +10 -10
  401. package/contracts/type/RiskId.sol +15 -1
  402. package/contracts/type/Seconds.sol +8 -0
  403. package/contracts/type/StateId.sol +1 -0
  404. package/contracts/type/UFixed.sol +4 -0
  405. package/contracts/upgradeability/ProxyManager.sol +67 -34
  406. package/contracts/upgradeability/Versionable.sol +2 -2
  407. package/package.json +2 -1
  408. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  409. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  410. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  411. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  412. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  413. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  414. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  415. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.dbg.json +0 -4
  416. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.json +0 -42
  417. package/contracts/product/ProductServiceManager.sol +0 -39
  418. package/contracts/shared/InitializableCustom.sol +0 -177
  419. package/contracts/shared/TokenTransferLib.sol +0 -60
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
5
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+ import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
6
7
 
7
8
  import {IRegistry} from "../registry/IRegistry.sol";
8
9
  import {IService} from "./IService.sol";
@@ -19,28 +20,23 @@ abstract contract Service is
19
20
  Registerable,
20
21
  Versionable,
21
22
  AccessManagedUpgradeable,
23
+ ReentrancyGuardUpgradeable,
22
24
  IService
23
25
  {
24
26
 
25
27
  uint8 private constant GIF_MAJOR_VERSION = 3;
26
28
 
27
29
 
28
- function initializeService(
30
+ function _initializeService(
29
31
  address registry,
30
32
  address authority, // real authority for registry service adress(0) for other services
31
33
  address initialOwner
32
34
  )
33
- public
35
+ internal
34
36
  virtual
35
37
  onlyInitializing()
36
38
  {
37
- initializeRegisterable(
38
- registry,
39
- IRegistry(registry).getNftId(),
40
- SERVICE(),
41
- false, // is interceptor
42
- initialOwner,
43
- ""); // data
39
+ __ReentrancyGuard_init();
44
40
 
45
41
  // externally provided authority
46
42
  if(authority != address(0)) {
@@ -52,8 +48,17 @@ abstract contract Service is
52
48
  __AccessManaged_init(IAccessManaged(registryServiceAddress).authority());
53
49
  }
54
50
 
55
- registerInterface(type(IAccessManaged).interfaceId);
56
- registerInterface(type(IService).interfaceId);
51
+ _initializeRegisterable(
52
+ registry,
53
+ IRegistry(registry).getNftId(),
54
+ SERVICE(),
55
+ false, // is interceptor
56
+ initialOwner,
57
+ ""); // data
58
+
59
+
60
+ _registerInterface(type(IAccessManaged).interfaceId);
61
+ _registerInterface(type(IService).interfaceId);
57
62
  }
58
63
 
59
64
  function getDomain() external virtual pure returns(ObjectType serviceDomain) {
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
4
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
6
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
6
7
 
@@ -9,54 +10,130 @@ import {Amount} from "../type/Amount.sol";
9
10
  /// @dev token specific transfer helper
10
11
  /// a default token contract is provided via contract constructor
11
12
  /// relies internally on oz SafeERC20.safeTransferFrom
12
- contract TokenHandler {
13
- event LogTokenHandlerTokenTransfer(address token, address from, address to, uint256 amount);
13
+ contract TokenHandler is AccessManaged {
14
+ error ErrorTokenHandlerAmountIsZero();
15
+ error ErrorTokenHandlerBalanceTooLow(address token, address from, uint256 balance, uint256 expectedBalance);
16
+ error ErrorTokenHandlerAllowanceTooSmall(address token, address from, address spender, uint256 allowance, uint256 expectedAllowance);
17
+ error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
18
+
19
+ event LogTokenHandlerTokenTransfer(address token, address from, address to, uint256 amountTransferred);
14
20
 
15
21
  IERC20Metadata private _token;
16
22
 
17
- constructor(address token) {
23
+ constructor(address token, address initialAuthority) AccessManaged(initialAuthority) {
18
24
  _token = IERC20Metadata(token);
19
25
  }
20
26
 
21
- /// @dev transfer amount default tokens
22
- function transfer(
27
+ /// @dev returns the default token defined for this TokenHandler
28
+ function getToken()
29
+ external
30
+ view
31
+ returns (IERC20Metadata)
32
+ {
33
+ return _token;
34
+ }
35
+
36
+ /// @dev collect tokens from outside of the gif and transfer them to one wallet within the scope of gif.
37
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
38
+ function collectTokens(
23
39
  address from,
24
40
  address to,
25
41
  Amount amount
26
42
  )
27
43
  external
44
+ restricted()
28
45
  {
29
- emit LogTokenHandlerTokenTransfer(address(_token), from, to, amount.toInt());
30
- SafeERC20.safeTransferFrom(
31
- _token,
32
- from,
33
- to,
34
- amount.toInt());
46
+ _transfer(from, to, amount, true);
47
+ }
48
+
49
+ /// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
50
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
51
+ function collectTokensToThreeRecipients(
52
+ address from,
53
+ address to,
54
+ Amount amount,
55
+ address to2,
56
+ Amount amount2,
57
+ address to3,
58
+ Amount amount3
59
+ )
60
+ external
61
+ restricted()
62
+ {
63
+ if (to == to2 || to == to3 || to2 == to3) {
64
+ revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
65
+ }
66
+
67
+ _checkPreconditions(from, amount + amount2 + amount3);
68
+
69
+ if (amount.gtz()) {
70
+ _transfer(from, to, amount, false);
71
+ }
72
+ if (amount2.gtz()) {
73
+ _transfer(from, to2, amount2, false);
74
+ }
75
+ if (amount3.gtz()) {
76
+ _transfer(from, to3, amount3, false);
77
+ }
35
78
  }
36
79
 
37
- /// @dev transfer amount of the specified token
38
- function safeTransferFrom(
39
- address token,
80
+ /// @dev distribute tokens from a wallet within the scope of gif to an external address.
81
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
82
+ function distributeTokens(
40
83
  address from,
41
84
  address to,
42
85
  Amount amount
43
86
  )
44
87
  external
88
+ restricted()
45
89
  {
46
- emit LogTokenHandlerTokenTransfer(token, from, to, amount.toInt());
90
+ _transfer(from, to, amount, true);
91
+ }
92
+
93
+ function _transfer(
94
+ address from,
95
+ address to,
96
+ Amount amount,
97
+ bool checkPreconditions
98
+ )
99
+ internal
100
+ {
101
+ if (checkPreconditions) {
102
+ // check amount > 0, balance >= amount and allowance >= amount
103
+ _checkPreconditions(from, amount);
104
+ }
105
+
106
+ // transfer the tokens
107
+ emit LogTokenHandlerTokenTransfer(address(_token), from, to, amount.toInt());
47
108
  SafeERC20.safeTransferFrom(
48
- IERC20Metadata(token),
109
+ _token,
49
110
  from,
50
111
  to,
51
112
  amount.toInt());
52
113
  }
53
114
 
54
- /// @dev returns the default token defined for this TokenHandler
55
- function getToken()
56
- external
57
- view
58
- returns (IERC20Metadata)
115
+ function _checkPreconditions(
116
+ address from,
117
+ Amount amount
118
+ )
119
+ internal
120
+ view
59
121
  {
60
- return _token;
122
+ // amount must be greater than zero
123
+ if (amount.eqz()) {
124
+ revert ErrorTokenHandlerAmountIsZero();
125
+ }
126
+
127
+ // balance must be >= amount
128
+ uint256 balance = _token.balanceOf(from);
129
+ if (balance < amount.toInt()) {
130
+ revert ErrorTokenHandlerBalanceTooLow(address(_token), from, balance, amount.toInt());
131
+ }
132
+
133
+ // allowance must be >= amount
134
+ uint256 allowance = _token.allowance(from, address(this));
135
+ if (allowance < amount.toInt()) {
136
+ revert ErrorTokenHandlerAllowanceTooSmall(address(_token), from, address(this), allowance, amount.toInt());
137
+ }
61
138
  }
62
139
  }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {TokenHandler} from "./TokenHandler.sol";
5
+
6
+ library TokenHandlerDeployerLib {
7
+
8
+ function deployTokenHandler(address token, address authority) public returns (TokenHandler) {
9
+ return new TokenHandler(address(token), authority);
10
+ }
11
+
12
+ }
@@ -42,8 +42,9 @@ interface IStaking is
42
42
  error ErrorStakingTargetNftIdZero();
43
43
  error ErrorStakingTargetTypeNotSupported(NftId targetNftId, ObjectType objectType);
44
44
  error ErrorStakingTargetUnexpectedObjectType(NftId targetNftId, ObjectType expectedObjectType, ObjectType actualObjectType);
45
- error ErrorStakingLockingPeriodZero(NftId targetNftId);
45
+ error ErrorStakingLockingPeriodTooShort(NftId targetNftId, Seconds minLockingPeriod, Seconds lockingPeriod);
46
46
  error ErrorStakingLockingPeriodTooLong(NftId targetNftId, Seconds maxLockingPeriod, Seconds lockingPeriod);
47
+ error ErrorStakingStakeLocked(NftId stakeNftId, Timestamp lockedUntil);
47
48
  error ErrorStakingRewardRateTooHigh(NftId targetNftId, UFixed maxRewardRate, UFixed rewardRate);
48
49
  error ErrorStakingTargetNotFound(NftId targetNftId);
49
50
  error ErrorStakingTargetTokenNotFound(NftId targetNftId, uint256 chainId, address token);
@@ -7,9 +7,7 @@ import {Amount} from "../type/Amount.sol";
7
7
  import {IService} from "../shared/IService.sol";
8
8
  import {IStaking} from "./IStaking.sol";
9
9
  import {NftId} from "../type/NftId.sol";
10
- import {ObjectType} from "../type/ObjectType.sol";
11
10
  import {Seconds} from "../type/Seconds.sol";
12
- import {Timestamp} from "../type/Timestamp.sol";
13
11
  import {TokenHandler} from "../shared/TokenHandler.sol";
14
12
  import {UFixed} from "../type/UFixed.sol";
15
13
 
@@ -33,7 +31,6 @@ interface IStakingService is IService
33
31
  event LogStakingServiceRewardsClaimed(NftId stakeNftId, address stakeOwner, Amount rewardsClaimedAmount);
34
32
 
35
33
  // modifiers
36
- error ErrorStakingServiceNotNftOwner(NftId nftId, address expectedOwner, address owner);
37
34
  error ErrorStakingServiceNotStaking(address stakingAddress);
38
35
  error ErrorStakingServiceNotSupportingIStaking(address stakingAddress);
39
36
 
@@ -114,6 +114,24 @@ library StakeManagerLib {
114
114
  lockingPeriod = info.lockingPeriod;
115
115
  }
116
116
 
117
+ function checkUnstakeParameters(
118
+ StakingReader stakingReader,
119
+ NftId stakeNftId
120
+ )
121
+ public
122
+ view
123
+ returns (
124
+ UFixed rewardRate,
125
+ Seconds lockingPeriod
126
+ )
127
+ {
128
+ IStaking.StakeInfo memory stakeInfo = stakingReader.getStakeInfo(stakeNftId);
129
+
130
+ if (stakeInfo.lockedUntil > TimestampLib.blockTimestamp()) {
131
+ revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
132
+ }
133
+ }
134
+
117
135
 
118
136
  function checkTarget(
119
137
  StakingReader stakingReader,
@@ -153,31 +171,6 @@ library StakeManagerLib {
153
171
  // TODO add check for target specific max dip amount (min stake + tvl * stake rate + buffer)
154
172
  }
155
173
 
156
-
157
- function checkDipBalanceAndAllowance(
158
- IERC20Metadata dip,
159
- address owner,
160
- address tokenHandlerAddress,
161
- Amount dipAmount
162
- )
163
- public
164
- view
165
- {
166
- // check balance
167
- uint256 amount = dipAmount.toInt();
168
- uint256 dipBalance = dip.balanceOf(owner);
169
- if (dipBalance < amount) {
170
- revert IStaking.ErrorStakingDipBalanceInsufficient(owner, amount, dipBalance);
171
- }
172
-
173
- // check allowance
174
- uint256 dipAllowance = dip.allowance(owner, tokenHandlerAddress);
175
- if (dipAllowance < amount) {
176
- revert IStaking.ErrorStakingDipAllowanceInsufficient(owner, tokenHandlerAddress, amount, dipAllowance);
177
- }
178
- }
179
-
180
-
181
174
  function calculateRewardIncrease(
182
175
  StakingReader stakingReader,
183
176
  NftId stakeNftId,
@@ -18,6 +18,7 @@ import {StakingStore} from "./StakingStore.sol";
18
18
  import {TargetManagerLib} from "./TargetManagerLib.sol";
19
19
  import {Timestamp} from "../type/Timestamp.sol";
20
20
  import {TokenHandler} from "../shared/TokenHandler.sol";
21
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
21
22
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
22
23
  import {UFixed} from "../type/UFixed.sol";
23
24
  import {Version, VersionLib} from "../type/Version.sol";
@@ -300,7 +301,7 @@ contract Staking is
300
301
  StakingStorage storage $ = _getStakingStorage();
301
302
 
302
303
  // TODO implement
303
- }
304
+ }
304
305
 
305
306
 
306
307
  function updateRewards(NftId stakeNftId)
@@ -349,9 +350,10 @@ contract Staking is
349
350
  Amount rewardsClaimedAmount
350
351
  )
351
352
  {
352
- // TODO add check that stake locking is in the past
353
353
  StakingStorage storage $ = _getStakingStorage();
354
-
354
+
355
+ StakeManagerLib.checkUnstakeParameters($._reader, stakeNftId);
356
+
355
357
  // update rewards since last update
356
358
  NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
357
359
 
@@ -377,17 +379,7 @@ contract Staking is
377
379
  external
378
380
  restricted() // only staking service
379
381
  {
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);
382
+ getTokenHandler().collectTokens(from, getWallet(), dipAmount);
391
383
  }
392
384
 
393
385
 
@@ -395,17 +387,7 @@ contract Staking is
395
387
  external
396
388
  restricted() // only staking service
397
389
  {
398
- TokenHandler tokenHandler = getTokenHandler();
399
- address stakingWallet = getWallet();
400
-
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);
390
+ getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
409
391
  }
410
392
 
411
393
 
@@ -469,7 +451,7 @@ contract Staking is
469
451
  )
470
452
  internal
471
453
  virtual override
472
- initializer
454
+ initializer()
473
455
  {
474
456
  (
475
457
  address registryAddress,
@@ -484,7 +466,7 @@ contract Staking is
484
466
  TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
485
467
  address dipTokenAddress = tokenRegistry.getDipTokenAddress();
486
468
 
487
- initializeComponent(
469
+ _initializeComponent(
488
470
  authority,
489
471
  registryAddress,
490
472
  registry.getNftId(),
@@ -502,9 +484,9 @@ contract Staking is
502
484
  $._store = StakingStore(stakingStoreAddress);
503
485
  $._reader = StakingStore(stakingStoreAddress).getStakingReader();
504
486
  $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
505
- $._tokenHandler = new TokenHandler(address(getToken()));
487
+ $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
506
488
 
507
- registerInterface(type(IStaking).interfaceId);
489
+ _registerInterface(type(IStaking).interfaceId);
508
490
  }
509
491
 
510
492
 
@@ -18,9 +18,9 @@ contract StakingManager is
18
18
  address registry,
19
19
  address tokenRegistry,
20
20
  address stakingStore,
21
- address initialOwner
21
+ address initialOwner,
22
+ bytes32 salt
22
23
  )
23
- ProxyManager(registry)
24
24
  {
25
25
  Staking stakingImplementation = new Staking();
26
26
 
@@ -30,10 +30,12 @@ contract StakingManager is
30
30
  tokenRegistry,
31
31
  stakingStore,
32
32
  initialOwner);
33
-
34
- IVersionable versionable = deploy(
35
- _initialImplementation,
36
- _initializationData);
33
+
34
+ IVersionable versionable = initialize(
35
+ registry,
36
+ _initialImplementation,
37
+ _initializationData,
38
+ salt);
37
39
 
38
40
  _staking = Staking(address(versionable));
39
41
  }
@@ -1,13 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
+
4
6
  import {IRegistry} from "../registry/IRegistry.sol";
5
7
  import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
6
8
  import {IStaking} from "../staking/IStaking.sol";
7
9
 
8
10
  import {Amount} from "../type/Amount.sol";
9
11
  import {Blocknumber} from "../type/Blocknumber.sol";
10
- import {InitializableCustom} from "../shared/InitializableCustom.sol";
11
12
  import {NftId} from "../type/NftId.sol";
12
13
  import {STAKE, TARGET} from "../type/ObjectType.sol";
13
14
  import {StakingStore} from "./StakingStore.sol";
@@ -16,16 +17,18 @@ import {UFixed} from "../type/UFixed.sol";
16
17
 
17
18
  contract StakingReader is
18
19
  IRegistryLinked,
19
- InitializableCustom
20
+ Initializable
20
21
  {
21
22
 
22
- error ErrorStakingReaderDependenciesAlreadySet();
23
+ error ErrorStakingReaderUnauthorizedCaler();
23
24
 
25
+ address private _initializeOwner;
24
26
  IRegistry private _registry;
25
27
  IStaking private _staking;
26
28
  StakingStore private _store;
27
29
 
28
- constructor(IRegistry registry) InitializableCustom() {
30
+ constructor(IRegistry registry) {
31
+ _initializeOwner = msg.sender;
29
32
  _registry = registry;
30
33
  }
31
34
 
@@ -34,8 +37,12 @@ contract StakingReader is
34
37
  address stakingStoreAddress
35
38
  )
36
39
  external
37
- initializer
40
+ initializer()
38
41
  {
42
+ if (msg.sender != _initializeOwner) {
43
+ revert ErrorStakingReaderUnauthorizedCaler();
44
+ }
45
+
39
46
  _staking = IStaking(stakingAddress);
40
47
  _store = StakingStore(stakingStoreAddress);
41
48
  }
@@ -4,21 +4,15 @@ pragma solidity ^0.8.20;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {Amount} from "../type/Amount.sol";
7
- import {ChainNft} from "../registry/ChainNft.sol";
8
- import {IPoolService} from "../pool/IPoolService.sol";
9
7
  import {IRegisterable} from "../shared/IRegisterable.sol";
10
8
  import {IRegistry} from "../registry/IRegistry.sol";
11
9
  import {RegistryService} from "../registry/RegistryService.sol";
12
10
  import {IStaking} from "./IStaking.sol";
13
11
  import {IStakingService} from "./IStakingService.sol";
14
12
  import {NftId, NftIdLib} from "../type/NftId.sol";
15
- import {ObjectType, INSTANCE, PROTOCOL, REGISTRY, STAKE, STAKING} from "../type/ObjectType.sol";
13
+ import {ObjectType, INSTANCE, REGISTRY, STAKE, STAKING} from "../type/ObjectType.sol";
16
14
  import {Seconds} from "../type/Seconds.sol";
17
15
  import {Service} from "../shared/Service.sol";
18
- import {StakeManagerLib} from "./StakeManagerLib.sol";
19
- import {StakingReader} from "./StakingReader.sol";
20
- import {TargetManagerLib} from "./TargetManagerLib.sol";
21
- import {Timestamp} from "../type/Timestamp.sol";
22
16
  import {TokenHandler} from "../shared/TokenHandler.sol";
23
17
  import {UFixed} from "../type/UFixed.sol";
24
18
 
@@ -38,14 +32,6 @@ contract StakingService is
38
32
  TokenHandler _tokenHandler;
39
33
  }
40
34
 
41
- modifier onlyNftOwner(NftId nftId) {
42
- if(msg.sender != getRegistry().ownerOf(nftId)) {
43
- revert ErrorStakingServiceNotNftOwner(nftId, getRegistry().ownerOf(nftId), msg.sender);
44
- }
45
- _;
46
- }
47
-
48
-
49
35
  function createInstanceTarget(
50
36
  NftId targetNftId,
51
37
  Seconds initialLockingPeriod,
@@ -331,7 +317,7 @@ contract StakingService is
331
317
  address stakingAddress
332
318
  ) = abi.decode(data, (address, address, address));
333
319
 
334
- initializeService(registryAddress, authority, owner);
320
+ _initializeService(registryAddress, authority, owner);
335
321
 
336
322
  StakingServiceStorage storage $ = _getStakingServiceStorage();
337
323
  $._registryService = RegistryService(_getServiceAddress(REGISTRY()));
@@ -339,7 +325,7 @@ contract StakingService is
339
325
  $._dip = $._staking.getToken();
340
326
  $._tokenHandler = $._staking.getTokenHandler();
341
327
 
342
- registerInterface(type(IStakingService).interfaceId);
328
+ _registerInterface(type(IStakingService).interfaceId);
343
329
  }
344
330
 
345
331
 
@@ -18,14 +18,14 @@ contract StakingServiceManager is
18
18
  address registryAddress,
19
19
  bytes32 salt
20
20
  )
21
- ProxyManager(registryAddress)
22
21
  {
23
22
  StakingService svc = new StakingService();
24
23
  bytes memory data = abi.encode(
25
24
  authority,
26
25
  registryAddress,
27
26
  IRegistry(registryAddress).getStakingAddress());
28
- IVersionable versionable = deployDetermenistic(
27
+ IVersionable versionable = initialize(
28
+ registryAddress,
29
29
  address(svc),
30
30
  data,
31
31
  salt);
@@ -132,9 +132,9 @@ library TargetManagerLib {
132
132
  public
133
133
  pure
134
134
  {
135
- // check locking period is > 0
136
- if (lockingPeriod.eqz()) {
137
- revert IStaking.ErrorStakingLockingPeriodZero(targetNftId);
135
+ // check locking period is >= min locking period
136
+ if (lockingPeriod.lt(getMinimumLockingPeriod())) {
137
+ revert IStaking.ErrorStakingLockingPeriodTooShort(targetNftId, getMinimumLockingPeriod(), lockingPeriod);
138
138
  }
139
139
 
140
140
  // check locking period <= max locking period
@@ -190,6 +190,10 @@ library TargetManagerLib {
190
190
  return SecondsLib.toSeconds(365 * 24 * 3600 / 2);
191
191
  }
192
192
 
193
+ /// @dev the minimum locking period is 24 hours
194
+ function getMinimumLockingPeriod() public pure returns (Seconds minLockingPeriod) {
195
+ return SecondsLib.toSeconds(24 * 3600);
196
+ }
193
197
 
194
198
  function getMaxRewardRate() public pure returns (UFixed maxRewardRate) {
195
199
  return UFixedLib.toUFixed(33, -2);
@@ -11,7 +11,9 @@ using {
11
11
  eqAmount as ==,
12
12
  nqAmount as !=,
13
13
  ltAmount as <,
14
+ ltAmount as <=,
14
15
  gtAmount as >,
16
+ gteAmount as >=,
15
17
  AmountLib.add,
16
18
  AmountLib.eq,
17
19
  AmountLib.eqz,
@@ -43,10 +45,18 @@ function ltAmount(Amount a, Amount b) pure returns (bool) {
43
45
  return AmountLib.lt(a, b);
44
46
  }
45
47
 
48
+ function lteAmount(Amount a, Amount b) pure returns (bool) {
49
+ return AmountLib.lte(a, b);
50
+ }
51
+
46
52
  function gtAmount(Amount a, Amount b) pure returns (bool) {
47
53
  return AmountLib.gt(a, b);
48
54
  }
49
55
 
56
+ function gteAmount(Amount a, Amount b) pure returns (bool) {
57
+ return AmountLib.gte(a, b);
58
+ }
59
+
50
60
  library AmountLib {
51
61
 
52
62
  error ErrorAmountLibValueTooBig(uint256 amount);
@@ -84,6 +94,11 @@ library AmountLib {
84
94
  return Amount.unwrap(a1) < Amount.unwrap(a2);
85
95
  }
86
96
 
97
+ /// @dev return true if amount a1 is less or equal than a2
98
+ function lte(Amount a1, Amount a2) public pure returns (bool) {
99
+ return Amount.unwrap(a1) <= Amount.unwrap(a2);
100
+ }
101
+
87
102
  /// @dev return true if amount a1 is greater than a2
88
103
  function gt(Amount a1, Amount a2) public pure returns (bool) {
89
104
  return Amount.unwrap(a1) > Amount.unwrap(a2);
@@ -12,6 +12,7 @@ import {NftId} from "./NftId.sol";
12
12
  using {
13
13
  eqClaimId as ==,
14
14
  neClaimId as !=,
15
+ ClaimIdLib.eq,
15
16
  ClaimIdLib.eqz,
16
17
  ClaimIdLib.gtz,
17
18
  ClaimIdLib.toInt,
@@ -21,7 +22,7 @@ using {
21
22
 
22
23
  // pure free functions for operators
23
24
  function eqClaimId(ClaimId a, ClaimId b) pure returns (bool isSame) {
24
- return ClaimId.unwrap(a) == ClaimId.unwrap(b);
25
+ return ClaimIdLib.eq(a, b);
25
26
  }
26
27
 
27
28
  function neClaimId(ClaimId a, ClaimId b) pure returns (bool isDifferent) {
@@ -68,6 +69,10 @@ library ClaimIdLib {
68
69
  return ClaimId.unwrap(a) > 0;
69
70
  }
70
71
 
72
+ function eq(ClaimId a, ClaimId b) public pure returns (bool) {
73
+ return ClaimId.unwrap(a) == ClaimId.unwrap(b);
74
+ }
75
+
71
76
  /// @dev Returns true if the value is zero (== 0).
72
77
  function eqz(ClaimId a) public pure returns (bool) {
73
78
  return ClaimId.unwrap(a) == 0;
@@ -14,6 +14,7 @@ using {
14
14
  NftIdLib.toInt,
15
15
  NftIdLib.gtz,
16
16
  NftIdLib.eqz,
17
+ NftIdLib.eq,
17
18
  NftIdLib.toKeyId,
18
19
  NftIdLib.toKey32
19
20
  } for NftId global;