@etherisc/gif-next 0.0.2-78e428e-483 → 0.0.2-79292f9-089

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 (310) hide show
  1. package/README.md +4 -1
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +21 -21
  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/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +10 -5
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +38 -97
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -75
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +76 -131
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +64 -76
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +0 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +0 -31
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +71 -71
  38. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +7 -7
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +24 -24
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +40 -40
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +24 -24
  48. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  55. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  61. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  62. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  63. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +26 -85
  64. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  65. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  66. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  67. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -37
  69. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -75
  72. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +26 -26
  74. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +39 -39
  76. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  77. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +7 -82
  78. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  79. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
  80. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  81. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +54 -109
  82. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +60 -72
  84. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  85. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +0 -31
  86. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  87. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +5 -42
  88. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +43 -38
  90. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  91. package/artifacts/contracts/pool/Pool.sol/Pool.json +5 -80
  92. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +87 -162
  94. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +45 -85
  96. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  97. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +27 -38
  98. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +37 -45
  100. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  101. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -75
  102. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  103. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  104. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  105. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +74 -58
  106. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +59 -59
  108. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  109. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  110. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  111. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  112. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  113. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +124 -129
  114. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  115. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  116. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  117. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  118. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  119. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  120. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +190 -227
  121. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +55 -55
  123. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  124. package/artifacts/contracts/product/PricingService.sol/PricingService.json +52 -52
  125. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +52 -52
  127. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  128. package/artifacts/contracts/product/Product.sol/Product.json +0 -75
  129. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  130. package/artifacts/contracts/product/RiskService.sol/RiskService.json +695 -0
  131. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  132. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +702 -0
  133. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  134. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  136. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +220 -20
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  139. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  140. package/artifacts/contracts/registry/Registry.sol/Registry.json +418 -81
  141. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  142. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +229 -114
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  144. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +12 -12
  145. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  146. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +32 -32
  147. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  148. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +4 -4
  149. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +29 -55
  151. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  152. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +8 -8
  153. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  154. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  155. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  157. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  158. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +72 -88
  159. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +65 -73
  161. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  162. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  164. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -37
  167. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  168. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  169. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  174. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  175. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  176. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  177. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -75
  178. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  179. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  180. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  181. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  183. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  184. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  185. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  186. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  187. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  188. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  189. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  190. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  191. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  192. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  193. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  194. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  195. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  196. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  197. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  198. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +30 -113
  199. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  200. package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -108
  201. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  202. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  203. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +51 -51
  205. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  206. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  207. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  208. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  209. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  210. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +36 -36
  211. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
  213. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  214. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  215. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  216. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  217. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  219. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  222. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  224. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  226. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  228. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  231. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  236. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Version.sol/VersionLib.json +3 -3
  242. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +15 -2
  244. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  245. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  246. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +19 -19
  247. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  248. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  249. package/contracts/authorization/AccessAdmin.sol +0 -1
  250. package/contracts/authorization/Authorization.sol +6 -4
  251. package/contracts/authorization/IAccessAdmin.sol +0 -1
  252. package/contracts/authorization/ServiceAuthorization.sol +4 -3
  253. package/contracts/distribution/DistributionService.sol +4 -19
  254. package/contracts/distribution/IDistributionService.sol +1 -3
  255. package/contracts/instance/IInstance.sol +7 -30
  256. package/contracts/instance/Instance.sol +8 -33
  257. package/contracts/instance/InstanceAdmin.sol +23 -4
  258. package/contracts/instance/InstanceReader.sol +2 -7
  259. package/contracts/instance/InstanceService.sol +54 -31
  260. package/contracts/instance/base/ObjectLifecycle.sol +2 -3
  261. package/contracts/instance/module/IComponents.sol +1 -2
  262. package/contracts/instance/module/IPolicy.sol +1 -1
  263. package/contracts/oracle/Oracle.sol +1 -0
  264. package/contracts/oracle/OracleService.sol +2 -1
  265. package/contracts/pool/BasicPool.sol +2 -2
  266. package/contracts/pool/BasicPoolAuthorization.sol +1 -1
  267. package/contracts/pool/BundleService.sol +8 -23
  268. package/contracts/pool/IBundleService.sol +2 -3
  269. package/contracts/pool/IPoolService.sol +31 -17
  270. package/contracts/pool/Pool.sol +12 -12
  271. package/contracts/pool/PoolService.sol +62 -75
  272. package/contracts/product/ApplicationService.sol +38 -18
  273. package/contracts/product/BasicProduct.sol +1 -0
  274. package/contracts/product/ClaimService.sol +9 -10
  275. package/contracts/product/IApplicationService.sol +1 -0
  276. package/contracts/product/IClaimService.sol +1 -0
  277. package/contracts/product/IPolicyService.sol +17 -17
  278. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  279. package/contracts/product/PolicyService.sol +193 -138
  280. package/contracts/product/PricingService.sol +6 -2
  281. package/contracts/product/Product.sol +22 -22
  282. package/contracts/product/{ProductService.sol → RiskService.sol} +5 -7
  283. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  284. package/contracts/registry/ChainNft.sol +65 -32
  285. package/contracts/registry/IRegistry.sol +48 -14
  286. package/contracts/registry/Registry.sol +324 -195
  287. package/contracts/registry/RegistryAdmin.sol +150 -51
  288. package/contracts/registry/RegistryService.sol +1 -2
  289. package/contracts/registry/ReleaseLifecycle.sol +3 -1
  290. package/contracts/registry/ReleaseRegistry.sol +125 -72
  291. package/contracts/registry/ServiceAuthorizationV3.sol +1 -1
  292. package/contracts/shared/Component.sol +11 -23
  293. package/contracts/shared/ComponentService.sol +14 -24
  294. package/contracts/shared/IComponent.sol +4 -4
  295. package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
  296. package/contracts/shared/TokenHandler.sol +100 -19
  297. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  298. package/contracts/staking/StakeManagerLib.sol +0 -25
  299. package/contracts/staking/Staking.sol +6 -25
  300. package/contracts/staking/StakingService.sol +9 -13
  301. package/contracts/type/StateId.sol +4 -0
  302. package/contracts/type/Version.sol +5 -2
  303. package/contracts/upgradeability/ProxyManager.sol +14 -14
  304. package/contracts/upgradeability/Versionable.sol +2 -2
  305. package/package.json +1 -1
  306. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  307. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  308. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  309. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  310. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
@@ -9,12 +9,12 @@ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManage
9
9
  import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
10
10
 
11
11
  import {NftId} from "../type/NftId.sol";
12
- import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
12
+ import {RoleId, RoleIdLib, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
13
13
  import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
14
14
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
15
15
  import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
16
16
  import {Seconds, SecondsLib} from "../type/Seconds.sol";
17
- import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
17
+ import {StateId, INITIAL, SCHEDULED, DEPLOYING, SKIPPED, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
18
18
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
19
19
 
20
20
  import {IService} from "../shared/IService.sol";
@@ -39,7 +39,7 @@ contract ReleaseRegistry is
39
39
  {
40
40
  using ObjectTypeLib for ObjectType;
41
41
 
42
- uint256 public constant INITIAL_GIF_VERSION = 3;
42
+ uint256 public constant INITIAL_GIF_VERSION = 3;// first active version
43
43
 
44
44
  event LogReleaseCreation(VersionPart version, bytes32 salt);
45
45
  event LogReleaseActivation(VersionPart version);
@@ -95,15 +95,9 @@ contract ReleaseRegistry is
95
95
  address private _stakingOwner;
96
96
 
97
97
  mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
98
- mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
99
98
 
100
- // TODO check where/why this is used
101
- mapping(address registryService => VersionPart version) _releaseVersionByAddress;
102
-
103
- VersionPart private _initial;// first active version
104
99
  VersionPart internal _latest; // latest active version
105
100
  VersionPart internal _next; // version to create and activate
106
- mapping(VersionPart verson => StateId releaseState) private _state;
107
101
 
108
102
  uint256 internal _registeredServices;
109
103
  uint256 internal _servicesToRegister;
@@ -121,7 +115,6 @@ contract ReleaseRegistry is
121
115
  _registry = registry;
122
116
  _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
123
117
 
124
- _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
125
118
  _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
126
119
  }
127
120
 
@@ -132,10 +125,19 @@ contract ReleaseRegistry is
132
125
  restricted() // GIF_ADMIN_ROLE
133
126
  returns(VersionPart)
134
127
  {
135
- _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
128
+ VersionPart version = _next;
129
+
130
+ if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
131
+ // set previous release into SKIPPED state if was created but not activated
132
+ _releaseInfo[version].state == SKIPPED();
133
+ }
134
+
135
+ version = VersionPartLib.toVersionPart(version.toInt() + 1);
136
+
137
+ _next = version;
138
+ _releaseInfo[version].state = getInitialState(RELEASE());
136
139
  _servicesToRegister = 0;
137
140
  _registeredServices = 0;
138
- _state[_next] = getInitialState(RELEASE());
139
141
 
140
142
  return _next;
141
143
  }
@@ -148,75 +150,75 @@ contract ReleaseRegistry is
148
150
  restricted() // GIF_MANAGER_ROLE
149
151
  returns(
150
152
  address authority,
151
- VersionPart version,
153
+ VersionPart releaseVersion,
152
154
  bytes32 releaseSalt
153
155
  )
154
156
  {
155
157
  authority = _admin.authority();
156
- version = _next;
158
+ releaseVersion = _next;
159
+ StateId state = _releaseInfo[releaseVersion].state;
160
+ StateId newState = DEPLOYING();
157
161
 
158
162
  // ensures unique salt
159
163
  // TODO CreateX have clones capability also
160
164
  // what would releaseSalt look like if used with CreateX in pemissioned mode?
161
165
  releaseSalt = keccak256(
162
166
  bytes.concat(
163
- bytes32(version.toInt()),
167
+ bytes32(releaseVersion.toInt()),
164
168
  salt));
165
169
 
166
- // verify release in state SCHEDULED
167
- if (!isValidTransition(RELEASE(), _state[version], DEPLOYING())) {
168
- revert ErrorReleaseRegistryReleasePreparationDisallowed(version, _state[version]);
170
+ // verify release in state SCHEDULED or DEPLOYING
171
+ if (!isValidTransition(RELEASE(), state, newState)) {
172
+ revert ErrorReleaseRegistryReleasePreparationDisallowed(releaseVersion, state);
169
173
  }
170
174
 
171
- _state[version] = DEPLOYING();
172
-
173
175
  // verify authorizaion contract release matches with expected version
174
- VersionPart releaseVersion = serviceAuthorization.getRelease();
175
- if (releaseVersion != version) {
176
- revert ErrorReleaseRegistryVersionMismatch(version, releaseVersion);
176
+ VersionPart authVersion = serviceAuthorization.getRelease();
177
+ if (releaseVersion != authVersion) {
178
+ revert ErrorReleaseRegistryVersionMismatch(releaseVersion, authVersion);
177
179
  }
178
180
 
179
-
180
181
  // sanity check to ensure service domain list is not empty
181
182
  uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
182
183
  if (serviceDomainsCount == 0) {
183
- revert ErrorReleaseRegistryNoDomains(version);
184
+ revert ErrorReleaseRegistryNoDomains(releaseVersion);
184
185
  }
185
186
 
186
- // verify prepareNextRelease is only called once per release
187
+ // verify prepareNextRelease is only called once per release, in state SCHEDULED
187
188
  if(_servicesToRegister > 0) {
188
- revert ErrorReleaseRegistryReleaseAlreadyPrepared(version, _state[version]);
189
+ revert ErrorReleaseRegistryReleaseAlreadyPrepared(releaseVersion, state);
189
190
  }
190
191
 
191
192
  _servicesToRegister = serviceDomainsCount;
192
- _serviceAuthorization[version] = serviceAuthorization;
193
+ // TODO allow for the same serviceAuthorization address to be used for multiple releases????
194
+ _releaseInfo[releaseVersion].auth = serviceAuthorization;
195
+ _releaseInfo[releaseVersion].state = newState;
193
196
 
194
- emit LogReleaseCreation(version, releaseSalt);
197
+ emit LogReleaseCreation(releaseVersion, releaseSalt);
195
198
  }
196
199
 
197
- // TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
198
200
  function registerService(IService service)
199
201
  external
200
202
  restricted // GIF_MANAGER_ROLE
201
203
  returns(NftId nftId)
202
204
  {
203
205
  VersionPart releaseVersion = _next;
204
- StateId state = _state[releaseVersion];
206
+ StateId state = _releaseInfo[releaseVersion].state;
207
+ StateId newState = DEPLOYING();
208
+ IServiceAuthorization auth = _releaseInfo[releaseVersion].auth;
205
209
 
206
210
  // verify release in state DEPLOYING
207
- if (!isValidTransition(RELEASE(), state, DEPLOYING())) {
211
+ if (!isValidTransition(RELEASE(), state, newState)) {
208
212
  // TOOD name must represent failed state transition
209
213
  revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
210
214
  }
211
215
 
212
- _state[releaseVersion] = DEPLOYING();
213
-
214
216
  // not all services are registered
215
217
  if (_servicesToRegister == _registeredServices) {
216
218
  revert ErrorReleaseRegistryNoServiceRegistrationExpected();
217
219
  }
218
220
 
219
- // service can work with release manager
221
+ // service can work with release registry and release version
220
222
  (
221
223
  IRegistry.ObjectInfo memory info,
222
224
  ObjectType serviceDomain,
@@ -224,27 +226,39 @@ contract ReleaseRegistry is
224
226
  ) = _verifyService(service);
225
227
 
226
228
  // service domain matches defined in release config
227
- ObjectType expectedDomain = _serviceAuthorization[releaseVersion].getServiceDomain(_registeredServices);
229
+ ObjectType expectedDomain = auth.getServiceDomain(_registeredServices);
228
230
  if (serviceDomain != expectedDomain) {
229
231
  revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
230
232
  }
231
233
 
232
- // register service with registry
233
- nftId = _registry.registerService(info, serviceVersion, serviceDomain);
234
- service.linkToRegisteredNftId();
235
- _registeredServices++;
234
+ // TODO: service address matches defined in release auth
236
235
 
237
236
  // setup service authorization
238
237
  _admin.authorizeService(
239
- _serviceAuthorization[releaseVersion],
240
- service);
238
+ auth,
239
+ service,
240
+ serviceDomain,
241
+ releaseVersion);
241
242
 
242
- // TODO consider to extend this to REGISTRY
243
243
  // special roles for registry/staking/pool service
244
- if (serviceDomain == STAKING() || serviceDomain == POOL()) {
245
- // TODO rename to grantServiceDomainRole()
244
+ if (
245
+ serviceDomain == REGISTRY() ||
246
+ serviceDomain == STAKING() ||
247
+ serviceDomain == POOL())
248
+ {
246
249
  _admin.grantServiceRoleForAllVersions(service, serviceDomain);
247
250
  }
251
+
252
+ _releaseInfo[releaseVersion].state = newState;
253
+ //_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
254
+ //_releaseInfo[releaseVersion].domains.push(serviceDomain);
255
+ //_releaseInfo[releaseVersion].names.push(service.getName()); // TODO if needed read name in _verifyService()?
256
+
257
+ _registeredServices++;
258
+
259
+ // register service with registry
260
+ nftId = _registry.registerService(info, serviceVersion, serviceDomain);
261
+ service.linkToRegisteredNftId();
248
262
  }
249
263
 
250
264
 
@@ -253,7 +267,7 @@ contract ReleaseRegistry is
253
267
  restricted // GIF_ADMIN_ROLE
254
268
  {
255
269
  VersionPart version = _next;
256
- StateId state = _state[version];
270
+ StateId state = _releaseInfo[version].state;
257
271
  StateId newState = ACTIVE();
258
272
 
259
273
  // verify release in state DEPLOYING
@@ -273,9 +287,7 @@ contract ReleaseRegistry is
273
287
  }
274
288
 
275
289
  _latest = version;
276
- _state[version] = newState;
277
-
278
- _releaseVersionByAddress[service] = version;
290
+ _releaseInfo[version].state = newState;
279
291
  _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
280
292
 
281
293
  emit LogReleaseActivation(version);
@@ -286,7 +298,7 @@ contract ReleaseRegistry is
286
298
  external
287
299
  restricted // GIF_ADMIN_ROLE
288
300
  {
289
- StateId state = _state[version];
301
+ StateId state = _releaseInfo[version].state;
290
302
  StateId newState = PAUSED();
291
303
 
292
304
  // verify release in state ACTIVE
@@ -294,22 +306,22 @@ contract ReleaseRegistry is
294
306
  revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
295
307
  }
296
308
 
297
- // TODO come up with a substitute
298
- //_releaseAccessManager[version].disable();
309
+ // TODO may run out of gas
310
+ // TODO test how many service roles can be revoked in one transaction -> add to docs + each release must test for this -> add to release registry tests, call in test with some gas limit?
311
+ _revokeReleaseRoles(version);
299
312
 
300
- _state[version] = newState;
313
+ _releaseInfo[version].state = newState;
301
314
  _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
302
315
 
303
316
  emit LogReleaseDisabled(version);
304
317
  }
305
318
 
306
- // TODO consider revert if some delay is expired -> becomes disabled automatically
307
319
  /// @dev resume operations with release services
308
320
  function unpauseRelease(VersionPart version)
309
321
  external
310
322
  restricted // GIF_ADMIN_ROLE
311
323
  {
312
- StateId state = _state[version];
324
+ StateId state = _releaseInfo[version].state;
313
325
  StateId newState = ACTIVE();
314
326
 
315
327
  // verify release in state PAUSED
@@ -317,10 +329,9 @@ contract ReleaseRegistry is
317
329
  revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
318
330
  }
319
331
 
320
- // TODO come up with a substitute
321
- // _releaseAccessManager[version].enable();
332
+ _grantReleaseRoles(version);
322
333
 
323
- _state[version] = newState;
334
+ _releaseInfo[version].state = newState;
324
335
  _releaseInfo[version].disabledAt = zeroTimestamp();
325
336
 
326
337
  emit LogReleaseEnabled(version);
@@ -336,13 +347,8 @@ contract ReleaseRegistry is
336
347
  return Clones.predictDeterministicAddress(implementation, salt, deployer);
337
348
  }
338
349
 
339
- function isActiveRegistryService(address service) external view returns(bool) {
340
- VersionPart version = _releaseVersionByAddress[service];
341
- return isActiveRelease(version);
342
- }
343
-
344
350
  function isActiveRelease(VersionPart version) public view returns(bool) {
345
- return _state[version] == ACTIVE();
351
+ return _releaseInfo[version].state == ACTIVE();
346
352
  }
347
353
 
348
354
  function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
@@ -357,12 +363,8 @@ contract ReleaseRegistry is
357
363
  return _latest;
358
364
  }
359
365
 
360
- function getInitialVersion() external view returns(VersionPart) {
361
- return _initial;
362
- }
363
-
364
366
  function getState(VersionPart version) external view returns (StateId stateId) {
365
- return _state[version];
367
+ return _releaseInfo[version].state;
366
368
  }
367
369
 
368
370
  function getRemainingServicesToRegister() external view returns (uint256 services) {
@@ -374,7 +376,7 @@ contract ReleaseRegistry is
374
376
  view
375
377
  returns (IServiceAuthorization serviceAuthorization)
376
378
  {
377
- return _serviceAuthorization[version];
379
+ return _releaseInfo[version].auth;
378
380
  }
379
381
 
380
382
  function getRegistryAdmin() external view returns (address) {
@@ -389,6 +391,58 @@ contract ReleaseRegistry is
389
391
 
390
392
  //--- private functions ----------------------------------------------------//
391
393
 
394
+ function _revokeReleaseRoles(VersionPart version)
395
+ private
396
+ {
397
+ address service;
398
+ ObjectType domain;
399
+ IServiceAuthorization auth = _releaseInfo[version].auth;
400
+
401
+ ObjectType[] memory domains = auth.getServiceDomains();
402
+ for(uint idx = 0; idx < domains.length; idx++)
403
+ {
404
+ domain = domains[idx];
405
+ service = _registry.getServiceAddress(domain, version);
406
+ _admin.revokeServiceRole(IService(service), domain, version);
407
+
408
+ // special roles for registry/staking/pool service
409
+ if(
410
+ domain == REGISTRY() ||
411
+ domain == STAKING() ||
412
+ domain == POOL()
413
+ )
414
+ {
415
+ _admin.revokeServiceRoleForAllVersions(IService(service), domain);
416
+ }
417
+ }
418
+ }
419
+
420
+ function _grantReleaseRoles(VersionPart version)
421
+ private
422
+ {
423
+ address service;
424
+ ObjectType domain;
425
+ IServiceAuthorization auth = _releaseInfo[version].auth;
426
+
427
+ ObjectType[] memory domains = auth.getServiceDomains();
428
+ for(uint idx = 0; idx < domains.length; idx++)
429
+ {
430
+ domain = domains[idx];
431
+ service = _registry.getServiceAddress(domain, version);
432
+ _admin.grantServiceRole(IService(service), domain, version);
433
+
434
+ // special roles for registry/staking/pool service
435
+ if(
436
+ domain == REGISTRY() ||
437
+ domain == STAKING() ||
438
+ domain == POOL()
439
+ )
440
+ {
441
+ _admin.grantServiceRoleForAllVersions(IService(service), domain);
442
+ }
443
+ }
444
+ }
445
+
392
446
  function _verifyService(IService service)
393
447
  internal
394
448
  view
@@ -472,8 +526,7 @@ contract ReleaseRegistry is
472
526
  if (registryAddress == address(0)) {
473
527
  return false;
474
528
  }
475
- // TODO try catch and return false in case of revert
476
- // or just panic
529
+ // TODO try catch and return false in case of revert or just panic
477
530
  // check if contract returns a zero nft id for its own address
478
531
  if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
479
532
  return false;
@@ -22,7 +22,7 @@ contract ServiceAuthorizationV3
22
22
  {
23
23
 
24
24
  constructor(string memory commitHash)
25
- ServiceAuthorization(commitHash)
25
+ ServiceAuthorization(commitHash, 3)
26
26
  {}
27
27
 
28
28
  function _setupDomains()
@@ -6,7 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
7
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
8
 
9
- import {Amount} from "../type/Amount.sol";
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
10
  import {IComponent} from "./IComponent.sol";
11
11
  import {IComponents} from "../instance/module/IComponents.sol";
12
12
  import {NftId, NftIdLib} from "../type/NftId.sol";
@@ -109,11 +109,11 @@ abstract contract Component is
109
109
  revert ErrorComponentWalletNotComponent();
110
110
  }
111
111
 
112
+ emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
113
+
112
114
  IERC20Metadata(token).approve(
113
115
  address(getTokenHandler()),
114
116
  spendingLimitAmount.toInt());
115
-
116
- emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
117
117
  }
118
118
 
119
119
  function setWallet(address newWallet)
@@ -124,34 +124,22 @@ abstract contract Component is
124
124
  {
125
125
  // checks
126
126
  address currentWallet = getWallet();
127
- IERC20Metadata token = getToken();
128
- uint256 currentBalance = token.balanceOf(currentWallet);
129
-
130
- if (currentBalance > 0) {
131
- if (currentWallet == address(this)) {
132
- // move tokens from component smart contract to external wallet
133
- } else {
134
- // move tokens from external wallet to component smart contract or another external wallet
135
- uint256 allowance = token.allowance(currentWallet, address(this));
136
- if (allowance < currentBalance) {
137
- revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
138
- }
139
- }
140
- }
127
+ uint256 currentBalance = getToken().balanceOf(currentWallet);
141
128
 
142
129
  // effects
143
130
  _setWallet(newWallet);
144
131
 
145
132
  // interactions
146
133
  if (currentBalance > 0) {
147
- // transfer tokens from current wallet to new wallet
134
+ // move tokens from old to new wallet
135
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
136
+
148
137
  if (currentWallet == address(this)) {
149
- // transferFrom requires self allowance too
150
- token.approve(address(this), currentBalance);
138
+ // transfer from the component requires an allowance
139
+ getTokenHandler().distributeTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
140
+ } else {
141
+ getTokenHandler().collectTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
151
142
  }
152
-
153
- SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
154
- emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
155
143
  }
156
144
  }
157
145
 
@@ -1,8 +1,6 @@
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
-
6
4
  import {Amount, AmountLib} from "../type/Amount.sol";
7
5
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
8
6
  import {Fee, FeeLib} from "../type/Fee.sol";
@@ -21,7 +19,7 @@ import {KEEP_STATE} from "../type/StateId.sol";
21
19
  import {NftId} from "../type/NftId.sol";
22
20
  import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
23
21
  import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
24
- import {TokenHandler} from "./TokenHandler.sol";
22
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
25
23
 
26
24
  contract ComponentService is
27
25
  ComponentVerifyingService,
@@ -48,7 +46,7 @@ contract ComponentService is
48
46
  )
49
47
  internal
50
48
  virtual override
51
- initializer()
49
+ onlyInitializing()
52
50
  {
53
51
  // TODO check this, might no longer be the way, refactor if necessary
54
52
  address registryAddress;
@@ -115,23 +113,13 @@ contract ComponentService is
115
113
  }
116
114
  }
117
115
 
118
- // check allowance
119
- TokenHandler tokenHandler = info.tokenHandler;
120
- IERC20Metadata token = IERC20Metadata(info.token);
121
- uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
122
- if (tokenAllowance < withdrawnAmount.toInt()) {
123
- revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
124
- }
125
-
126
116
  // decrease fee counters by withdrawnAmount
127
117
  _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
128
118
 
129
119
  // transfer amount to component owner
130
120
  address componentOwner = getRegistry().ownerOf(componentNftId);
131
- // TODO: centralize token handling (issue #471)
132
- tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
133
-
134
- emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
121
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
122
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
135
123
  }
136
124
 
137
125
 
@@ -152,7 +140,7 @@ contract ComponentService is
152
140
  contractAddress,
153
141
  PRODUCT(),
154
142
  PRODUCT_OWNER_ROLE());
155
-
143
+
156
144
  // create product info
157
145
  IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
158
146
  instanceStore.createProduct(productNftId, productInfo);
@@ -523,22 +511,24 @@ contract ComponentService is
523
511
 
524
512
  component.linkToRegisteredNftId();
525
513
 
526
- // setup initial component authorization
527
- _instanceService.initializeAuthorization(
528
- instance.getNftId(),
529
- component);
530
-
531
514
  // save amended component info with instance
532
515
  instanceReader = instance.getInstanceReader();
533
516
  instanceStore = instance.getInstanceStore();
534
517
 
535
- IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
536
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
518
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
519
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
520
+ address(componentInfo.token),
521
+ address(instance.getInstanceAdmin().authority()));
537
522
 
538
523
  instanceStore.createComponent(
539
524
  component.getNftId(),
540
525
  componentInfo);
541
526
 
527
+ // setup initial component authorization
528
+ _instanceService.initializeAuthorization(
529
+ instance.getNftId(),
530
+ component);
531
+
542
532
  // TODO add logging
543
533
  }
544
534
 
@@ -23,7 +23,6 @@ interface IComponent is
23
23
  error ErrorComponentNameLengthZero();
24
24
  error ErrorComponentWalletAddressZero();
25
25
  error ErrorComponentWalletAddressIsSameAsCurrent();
26
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
27
26
  error ErrorComponentWalletNotComponent();
28
27
 
29
28
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
@@ -35,10 +34,11 @@ interface IComponent is
35
34
  /// only component owner (nft holder) is authorizes to call this function
36
35
  function approveTokenHandler(Amount spendingLimitAmount) external;
37
36
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
37
+ /// @dev sets the wallet address for the component.
38
+ /// if the current wallet has tokens, these will be transferred.
40
39
  /// if the new wallet address is externally owned, an approval from the
41
- /// owner of the external wallet for the component to move all tokens must exist
40
+ /// owner of the external wallet to the tokenhandler of the component that
41
+ /// covers the current component balance must exist
42
42
  function setWallet(address walletAddress) external;
43
43
 
44
44
  /// @dev returns the name of this component
@@ -7,21 +7,14 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
7
7
  import {Amount} from "../type/Amount.sol";
8
8
  import {IComponent} from "../shared/IComponent.sol";
9
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
10
- import {IComponents} from "../instance/module/IComponents.sol";
11
10
  import {IInstance} from "../instance/IInstance.sol";
12
- import {IInstanceService} from "../instance/IInstanceService.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
11
  import {NftId} from "../type/NftId.sol";
16
- import {ObjectType} from "../type/ObjectType.sol";
17
- import {TokenHandler} from "../shared/TokenHandler.sol";
18
12
 
19
13
  /// @dev component base class
20
14
  /// component examples are product, distribution, pool and oracle
21
15
  interface IInstanceLinkedComponent is
22
16
  IComponent
23
17
  {
24
- error ErrorComponentNotProductService(address caller);
25
18
  error ErrorComponentNotInstance(NftId instanceNftId);
26
19
  error ErrorComponentProductNftAlreadySet();
27
20
 
@@ -38,19 +31,19 @@ interface IInstanceLinkedComponent is
38
31
  /// only component owner (nft holder) is authorizes to call this function
39
32
  function unlock() external;
40
33
 
34
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
35
+ /// @param amount the amount to withdraw
36
+ /// @return withdrawnAmount the amount that was actually withdrawn
37
+ function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
38
+
41
39
  /// @dev defines the instance to which this component is linked to
42
40
  function getInstance() external view returns (IInstance instance);
43
41
 
44
- /// @dev defines the product to which this component is linked to
45
- /// this is only relevant for pool and distribution components
46
- function getProductNftId() external view returns (NftId productNftId);
47
-
48
42
  /// @dev returns the initial component authorization specification.
49
43
  function getAuthorization() external view returns (IAuthorization authorization);
50
44
 
51
- /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
52
- /// @param amount the amount to withdraw
53
- /// @return withdrawnAmount the amount that was actually withdrawn
54
- function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
45
+ /// @dev defines the product to which this component is linked to
46
+ /// this is only relevant for pool and distribution components
47
+ function getProductNftId() external view returns (NftId productNftId);
55
48
 
56
49
  }