@etherisc/gif-next 0.0.2-e5a6af8-639 → 0.0.2-e5bdc7a-937

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 (355) hide show
  1. package/README.md +27 -6
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
  4. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  6. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +55 -133
  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 +8 -38
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +133 -78
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +78 -46
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +11 -23
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +23 -0
  30. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  31. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  32. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +38 -147
  33. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  34. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +49 -17
  35. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  36. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +92 -190
  37. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  38. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +2 -2
  39. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  40. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  41. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +66 -107
  42. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  43. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +33 -87
  44. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  45. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +155 -141
  46. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  47. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +391 -205
  48. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  49. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +147 -42
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +46 -0
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +24 -4
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +78 -11
  56. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +85 -72
  58. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +40 -27
  60. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +302 -74
  62. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +61 -25
  64. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +46 -22
  66. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +36 -46
  68. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  69. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
  70. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  72. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  75. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  77. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  79. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  85. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  86. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +22 -100
  88. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  90. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +11 -23
  93. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +8 -38
  96. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +84 -60
  98. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +66 -22
  100. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  101. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +8 -53
  102. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +49 -17
  104. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +101 -206
  106. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +58 -70
  108. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  109. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +19 -57
  110. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +11 -62
  112. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +77 -75
  114. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  115. package/artifacts/contracts/pool/Pool.sol/Pool.json +8 -77
  116. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  117. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +153 -159
  118. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +61 -33
  120. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  121. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +66 -31
  122. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +42 -22
  124. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  125. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +13 -38
  126. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  128. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  129. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +84 -76
  130. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +67 -47
  132. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  133. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -7
  134. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +38 -19
  137. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  139. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +16 -23
  140. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  141. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  142. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +132 -121
  143. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +70 -42
  145. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  146. package/artifacts/contracts/product/PricingService.sol/PricingService.json +54 -38
  147. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +56 -32
  149. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  150. package/artifacts/contracts/product/Product.sol/Product.json +13 -38
  151. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  152. package/artifacts/contracts/product/RiskService.sol/RiskService.json +34 -18
  153. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +40 -16
  155. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  156. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +24 -0
  158. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  159. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  160. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  161. package/artifacts/contracts/registry/Registry.sol/Registry.json +62 -38
  162. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  163. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +107 -94
  164. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +32 -16
  166. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  167. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +39 -15
  168. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  169. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  170. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +12 -12
  172. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  173. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  174. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  175. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  176. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  177. package/artifacts/contracts/shared/Component.sol/Component.json +8 -38
  178. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  179. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +169 -102
  180. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  181. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +74 -42
  182. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  183. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  184. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +402 -6
  185. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  186. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  187. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  188. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  189. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  190. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +11 -23
  191. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  192. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +67 -0
  193. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  194. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +11 -23
  195. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  197. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  202. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  203. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  204. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +8 -38
  205. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  206. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  207. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  208. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  209. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  210. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  211. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  212. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  213. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  214. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  215. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  216. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  217. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  218. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  219. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
  220. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  221. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  222. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  223. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  224. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  225. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +29 -59
  226. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  227. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  228. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  229. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  230. package/artifacts/contracts/staking/Staking.sol/Staking.json +80 -152
  231. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  232. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  233. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +50 -46
  235. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  236. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  237. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +36 -20
  239. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +43 -19
  241. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
  243. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  244. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  245. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  246. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  250. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  252. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  254. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  255. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  256. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  257. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  259. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  260. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  261. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  263. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  265. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  267. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  269. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +43 -5
  271. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  273. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  280. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  282. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  283. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  284. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  285. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +18 -2
  286. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  287. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  288. package/contracts/authorization/AccessAdmin.sol +21 -1
  289. package/contracts/distribution/BasicDistribution.sol +2 -2
  290. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  291. package/contracts/distribution/Distribution.sol +5 -6
  292. package/contracts/distribution/DistributionService.sol +19 -20
  293. package/contracts/distribution/IDistributionService.sol +5 -6
  294. package/contracts/examples/fire/FirePool.sol +19 -8
  295. package/contracts/examples/fire/FireProduct.sol +24 -11
  296. package/contracts/examples/unpermissioned/SimpleDistribution.sol +8 -0
  297. package/contracts/examples/unpermissioned/SimplePool.sol +34 -2
  298. package/contracts/examples/unpermissioned/SimpleProduct.sol +15 -21
  299. package/contracts/instance/BundleSet.sol +38 -34
  300. package/contracts/instance/IInstance.sol +6 -0
  301. package/contracts/instance/IInstanceService.sol +7 -5
  302. package/contracts/instance/Instance.sol +14 -5
  303. package/contracts/instance/InstanceAdmin.sol +6 -5
  304. package/contracts/instance/InstanceAuthorizationV3.sol +30 -7
  305. package/contracts/instance/InstanceReader.sol +85 -1
  306. package/contracts/instance/InstanceService.sol +32 -19
  307. package/contracts/instance/RiskSet.sol +119 -0
  308. package/contracts/instance/base/ObjectSet.sol +24 -25
  309. package/contracts/instance/module/IComponents.sol +1 -2
  310. package/contracts/instance/module/IPolicy.sol +2 -1
  311. package/contracts/instance/module/IRisk.sol +1 -0
  312. package/contracts/oracle/OracleService.sol +87 -69
  313. package/contracts/pool/BasicPool.sol +24 -3
  314. package/contracts/pool/BasicPoolAuthorization.sol +12 -1
  315. package/contracts/pool/BundleService.sol +37 -94
  316. package/contracts/pool/IBundleService.sol +2 -23
  317. package/contracts/pool/IPoolComponent.sol +1 -7
  318. package/contracts/pool/IPoolService.sol +12 -26
  319. package/contracts/pool/Pool.sol +112 -102
  320. package/contracts/pool/PoolService.sol +177 -99
  321. package/contracts/product/ApplicationService.sol +20 -18
  322. package/contracts/product/BasicProduct.sol +7 -11
  323. package/contracts/product/ClaimService.sol +19 -9
  324. package/contracts/product/IApplicationService.sol +5 -2
  325. package/contracts/product/IPolicyService.sol +17 -7
  326. package/contracts/product/PolicyService.sol +241 -191
  327. package/contracts/product/PricingService.sol +4 -1
  328. package/contracts/product/Product.sol +12 -40
  329. package/contracts/product/RiskService.sol +14 -3
  330. package/contracts/registry/IRegistry.sol +2 -0
  331. package/contracts/registry/Registry.sol +9 -1
  332. package/contracts/registry/RegistryAdmin.sol +14 -11
  333. package/contracts/registry/ReleaseRegistry.sol +2 -18
  334. package/contracts/registry/ServiceAuthorizationV3.sol +12 -31
  335. package/contracts/shared/Component.sol +35 -83
  336. package/contracts/shared/ComponentService.sol +105 -34
  337. package/contracts/shared/ComponentVerifyingService.sol +15 -13
  338. package/contracts/shared/ContractLib.sol +196 -10
  339. package/contracts/shared/IComponent.sol +5 -12
  340. package/contracts/shared/IComponentService.sol +13 -3
  341. package/contracts/shared/InstanceLinkedComponent.sol +1 -9
  342. package/contracts/shared/NftOwnable.sol +5 -1
  343. package/contracts/shared/Registerable.sol +0 -2
  344. package/contracts/shared/RegistryLinked.sol +6 -12
  345. package/contracts/shared/TokenHandler.sol +316 -66
  346. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  347. package/contracts/staking/IStaking.sol +9 -4
  348. package/contracts/staking/Staking.sol +29 -21
  349. package/contracts/staking/StakingService.sol +55 -8
  350. package/contracts/type/Key32.sol +2 -2
  351. package/contracts/type/Key32Set.sol +62 -0
  352. package/contracts/type/NftId.sol +6 -0
  353. package/contracts/type/ObjectType.sol +2 -0
  354. package/contracts/type/RiskId.sol +18 -6
  355. package/package.json +3 -3
@@ -3,10 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
8
- import {ContractLib} from "../shared/ContractLib.sol";
9
- import {Fee, FeeLib} from "../type/Fee.sol";
6
+ import {IComponent} from "../shared/IComponent.sol";
10
7
  import {IComponents} from "../instance/module/IComponents.sol";
11
8
  import {IComponentService} from "./IComponentService.sol";
12
9
  import {IInstance} from "../instance/IInstance.sol";
@@ -15,22 +12,27 @@ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
15
12
  import {InstanceReader} from "../instance/InstanceReader.sol";
16
13
  import {InstanceStore} from "../instance/InstanceStore.sol";
17
14
  import {IInstanceService} from "../instance/IInstanceService.sol";
18
- import {IRegisterable} from "../shared/IRegisterable.sol";
19
15
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
20
16
  import {IProductComponent} from "../product/IProductComponent.sol";
17
+ import {IRegisterable} from "../shared/IRegisterable.sol";
21
18
  import {IRegistry} from "../registry/IRegistry.sol";
22
19
  import {IRegistryService} from "../registry/IRegistryService.sol";
20
+
21
+ import {Amount, AmountLib} from "../type/Amount.sol";
22
+ import {ContractLib} from "../shared/ContractLib.sol";
23
+ import {Fee, FeeLib} from "../type/Fee.sol";
23
24
  import {KEEP_STATE} from "../type/StateId.sol";
24
25
  import {NftId} from "../type/NftId.sol";
25
- import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
26
- import {RoleId} from "../type/RoleId.sol";
26
+ import {ObjectType, REGISTRY, BUNDLE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
27
+ import {Service} from "../shared/Service.sol";
28
+ import {TokenHandler} from "../shared/TokenHandler.sol";
27
29
  import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
28
30
 
31
+
29
32
  contract ComponentService is
30
- ComponentVerifyingService,
33
+ Service,
31
34
  IComponentService
32
35
  {
33
-
34
36
  bool private constant INCREASE = true;
35
37
  bool private constant DECREASE = false;
36
38
 
@@ -90,27 +92,52 @@ contract ComponentService is
90
92
  revert ErrorComponentServiceTypeNotSupported(component, componentType);
91
93
  }
92
94
 
95
+ function approveTokenHandler(
96
+ IERC20Metadata token,
97
+ Amount amount
98
+ )
99
+ external
100
+ virtual
101
+ {
102
+ // checks
103
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
104
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
105
+ componentNftId).tokenHandler;
93
106
 
94
- function setWallet(address newWallet) external virtual {
95
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
96
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
97
- address currentWallet = info.wallet;
107
+ // effects
108
+ tokenHandler.approve(token, amount);
109
+ }
98
110
 
99
- if (newWallet == address(0)) {
100
- revert ErrorComponentServiceNewWalletAddressZero();
101
- }
102
111
 
103
- if (currentWallet == address(0)) {
104
- revert ErrorComponentServiceWalletAddressZero();
105
- }
112
+ function approveStakingTokenHandler(
113
+ IERC20Metadata token,
114
+ Amount amount
115
+ )
116
+ external
117
+ virtual
118
+ {
119
+ // checks
120
+ ContractLib.getAndVerifyStaking(
121
+ getRegistry(),
122
+ msg.sender); // only active
106
123
 
107
- if (newWallet == currentWallet) {
108
- revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
109
- }
124
+ // effects
125
+ TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
126
+ tokenHandler.approve(token, amount);
127
+ }
128
+
129
+
130
+ function setWallet(address newWallet)
131
+ external
132
+ virtual
133
+ {
134
+ // checks
135
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
136
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
137
+ componentNftId).tokenHandler;
110
138
 
111
- info.wallet = newWallet;
112
- instance.getInstanceStore().updateComponent(componentNftId, info, KEEP_STATE());
113
- emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
139
+ // effects
140
+ tokenHandler.setWallet(newWallet);
114
141
  }
115
142
 
116
143
  // TODO implement
@@ -124,9 +151,9 @@ contract ComponentService is
124
151
  virtual
125
152
  returns (Amount withdrawnAmount)
126
153
  {
127
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
154
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
128
155
  IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
129
- address componentWallet = info.wallet;
156
+ address componentWallet = info.tokenHandler.getWallet();
130
157
 
131
158
  // determine withdrawn amount
132
159
  withdrawnAmount = amount;
@@ -186,7 +213,7 @@ contract ComponentService is
186
213
  external
187
214
  virtual
188
215
  {
189
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
216
+ (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
190
217
  IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
191
218
  bool feesChanged = false;
192
219
 
@@ -220,6 +247,7 @@ contract ComponentService is
220
247
  // TODO re-enable once role granting is stable and fixed
221
248
  // restricted()
222
249
  {
250
+ _checkNftType(productNftId, PRODUCT());
223
251
  _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
224
252
  }
225
253
 
@@ -230,6 +258,7 @@ contract ComponentService is
230
258
  // TODO re-enable once role granting is stable and fixed
231
259
  // restricted()
232
260
  {
261
+ _checkNftType(productNftId, PRODUCT());
233
262
  _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
234
263
  }
235
264
 
@@ -276,7 +305,7 @@ contract ComponentService is
276
305
  external
277
306
  virtual
278
307
  {
279
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
308
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
280
309
  (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
281
310
  instance.getInstanceReader(), distributionNftId);
282
311
  bool feesChanged = false;
@@ -312,6 +341,7 @@ contract ComponentService is
312
341
  // TODO re-enable once role granting is stable and fixed
313
342
  // restricted()
314
343
  {
344
+ _checkNftType(distributionNftId, DISTRIBUTION());
315
345
  _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
316
346
  }
317
347
 
@@ -327,6 +357,7 @@ contract ComponentService is
327
357
  // TODO re-enable once role granting is stable and fixed
328
358
  // restricted()
329
359
  {
360
+ _checkNftType(distributionNftId, DISTRIBUTION());
330
361
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
331
362
  }
332
363
 
@@ -343,6 +374,7 @@ contract ComponentService is
343
374
  // TODO re-enable once role granting is stable and fixed
344
375
  // restricted()
345
376
  {
377
+ _checkNftType(distributorNftId, DISTRIBUTOR());
346
378
  _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
347
379
  }
348
380
 
@@ -357,6 +389,7 @@ contract ComponentService is
357
389
  // TODO re-enable once role granting is stable and fixed
358
390
  // restricted()
359
391
  {
392
+ _checkNftType(distributorNftId, DISTRIBUTOR());
360
393
  _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
361
394
  }
362
395
 
@@ -373,7 +406,7 @@ contract ComponentService is
373
406
  InstanceStore instanceStore;
374
407
  NftId productNftId;
375
408
 
376
- (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) =_register(
409
+ (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
377
410
  oracleAddress,
378
411
  ORACLE());
379
412
 
@@ -409,7 +442,7 @@ contract ComponentService is
409
442
  InstanceStore instanceStore;
410
443
  NftId productNftId;
411
444
 
412
- (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) =_register(
445
+ (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
413
446
  poolAddress,
414
447
  POOL());
415
448
 
@@ -442,7 +475,8 @@ contract ComponentService is
442
475
  external
443
476
  virtual
444
477
  {
445
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
478
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
479
+
446
480
  (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
447
481
  instance.getInstanceReader(), poolNftId);
448
482
  bool feesChanged = false;
@@ -485,6 +519,7 @@ contract ComponentService is
485
519
  // TODO re-enable once role granting is stable and fixed
486
520
  // restricted()
487
521
  {
522
+ _checkNftType(poolNftId, POOL());
488
523
  _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
489
524
  }
490
525
 
@@ -499,6 +534,7 @@ contract ComponentService is
499
534
  // TODO re-enable once role granting is stable and fixed
500
535
  // restricted()
501
536
  {
537
+ _checkNftType(poolNftId, POOL());
502
538
  _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
503
539
  }
504
540
 
@@ -515,6 +551,7 @@ contract ComponentService is
515
551
  // TODO re-enable once role granting is stable and fixed
516
552
  // restricted()
517
553
  {
554
+ _checkNftType(bundleNftId, BUNDLE());
518
555
  _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
519
556
  }
520
557
 
@@ -529,6 +566,7 @@ contract ComponentService is
529
566
  // TODO re-enable once role granting is stable and fixed
530
567
  // restricted()
531
568
  {
569
+ _checkNftType(bundleNftId, BUNDLE());
532
570
  _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
533
571
  }
534
572
 
@@ -605,8 +643,13 @@ contract ComponentService is
605
643
  IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
606
644
  IERC20Metadata token = componentInfo.token;
607
645
  componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
646
+ address(getRegistry()),
647
+ address(component), // initially, component is its own wallet
608
648
  address(token),
609
649
  address(instanceAdmin.authority()));
650
+
651
+ // set token handler allowance to max
652
+ // componentInfo.tokenHandler.approve(token, AmountLib.max());
610
653
 
611
654
  // register component with instance
612
655
  instanceStore.createComponent(
@@ -646,7 +689,7 @@ contract ComponentService is
646
689
  IComponents.ProductInfo memory info
647
690
  )
648
691
  {
649
- productNftId = _getProductNftId(componentNftId);
692
+ productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
650
693
  info = instanceReader.getProductInfo(productNftId);
651
694
  }
652
695
 
@@ -725,9 +768,37 @@ contract ComponentService is
725
768
 
726
769
  // get initial owner and instance
727
770
  initialOwner = info.initialOwner;
728
- instance = _getInstance(registry, instanceNftId);
771
+ instance = IInstance(registry.getObjectAddress(instanceNftId));
729
772
  }
730
773
 
774
+ function _getAndVerifyActiveComponent(ObjectType expectedType)
775
+ internal
776
+ view
777
+ returns (
778
+ NftId componentNftId,
779
+ IInstance instance
780
+ )
781
+ {
782
+ IRegistry.ObjectInfo memory info;
783
+ address instanceAddress;
784
+
785
+ if (expectedType != COMPONENT()) {
786
+ (info, instanceAddress) = ContractLib.getAndVerifyComponent(
787
+ getRegistry(),
788
+ msg.sender, // caller
789
+ expectedType,
790
+ true); // only active
791
+ } else {
792
+ (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
793
+ getRegistry(),
794
+ msg.sender,
795
+ true); // only active
796
+ }
797
+
798
+ // get component nft id and instance
799
+ componentNftId = info.nftId;
800
+ instance = IInstance(instanceAddress);
801
+ }
731
802
 
732
803
  function _getDomain() internal pure virtual override returns(ObjectType) {
733
804
  return COMPONENT();
@@ -5,7 +5,7 @@ import {IInstance} from "../instance/IInstance.sol";
5
5
  import {InstanceReader} from "../instance/InstanceReader.sol";
6
6
  import {IRegistry} from "../registry/IRegistry.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
- import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
8
+ import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
9
9
  import {Service} from "../shared/Service.sol";
10
10
 
11
11
 
@@ -27,12 +27,12 @@ abstract contract ComponentVerifyingService is
27
27
  view
28
28
  returns(
29
29
  NftId componentNftId,
30
- IRegistry.ObjectInfo memory componentInfo,
30
+ IRegistry.ObjectInfo memory objectInfo,
31
31
  IInstance instance
32
32
  )
33
33
  {
34
34
  componentNftId = getRegistry().getNftIdForAddress(msg.sender);
35
- (componentInfo, instance) = _getAndVerifyComponentInfo(
35
+ (objectInfo, instance) = _getAndVerifyComponentInfo(
36
36
  componentNftId,
37
37
  expectedType,
38
38
  true); // only active
@@ -82,7 +82,15 @@ abstract contract ComponentVerifyingService is
82
82
  }
83
83
  }
84
84
 
85
- instance = _getInstanceForComponent(registry, info);
85
+ if (info.objectType == STAKING()) {
86
+ return (info, instance);
87
+ }
88
+
89
+ if (info.objectType == PRODUCT()) {
90
+ instance = _getInstance(registry, info.parentNftId);
91
+ } else {
92
+ instance = _getInstanceForComponent(registry, info.parentNftId);
93
+ }
86
94
 
87
95
  // ensure component is not locked
88
96
  if (onlyActive) {
@@ -93,21 +101,15 @@ abstract contract ComponentVerifyingService is
93
101
  }
94
102
 
95
103
 
96
- function _getInstanceForComponent(IRegistry registry, IRegistry.ObjectInfo memory componentInfo)
104
+ function _getInstanceForComponent(IRegistry registry, NftId productNftId)
97
105
  internal
98
106
  view
99
107
  returns (IInstance instance)
100
108
  {
101
- // parent of product is instance
102
- if (componentInfo.objectType == PRODUCT()) {
103
- instance = _getInstance(registry, componentInfo.parentNftId);
104
- // parent of other types is product
105
- } else {
106
- instance = _getInstance(
109
+ return _getInstance(
107
110
  registry,
108
111
  registry.getObjectInfo(
109
- componentInfo.parentNftId).parentNftId);
110
- }
112
+ productNftId).parentNftId);
111
113
  }
112
114
 
113
115
 
@@ -2,29 +2,159 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
- import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
5
 
7
- import {IPolicyHolder} from "./IPolicyHolder.sol";
6
+ // import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
9
+ import {NftId} from "../type/NftId.sol";
10
+ import {ObjectType, PRODUCT, DISTRIBUTION, ORACLE, POOL, STAKING} from "../type/ObjectType.sol";
11
+
12
+ interface ITargetHelper {
13
+ function isTargetLocked(address target) external view returns (bool);
14
+ }
15
+
16
+ interface IInstanceAdminHelper {
17
+ function getInstanceAdmin() external view returns (ITargetHelper);
18
+ }
8
19
 
9
20
  library ContractLib {
10
21
 
22
+ error ErrorContractLibNotRegistered(address target);
23
+ error ErrorContractLibNotComponent(NftId componentNftId, ObjectType objectType);
24
+ error ErrorContractLibNotStaking(NftId componentNftId, ObjectType objectType);
25
+ error ErrorContractLibComponentTypeMismatch(NftId componentNftId, ObjectType expectedType, ObjectType actualType);
26
+ error ErrorContractLibComponentInactive(NftId componentNftId);
27
+
28
+
29
+ function getAndVerifyComponent(
30
+ IRegistry registry,
31
+ address target,
32
+ ObjectType expectedType,
33
+ bool onlyActive
34
+ )
35
+ external
36
+ view
37
+ returns (
38
+ IRegistry.ObjectInfo memory info,
39
+ address instance
40
+ )
41
+ {
42
+ // check target is component
43
+ info = _getObjectInfo(registry, target);
44
+ if(info.objectType != expectedType) {
45
+ revert ErrorContractLibComponentTypeMismatch(
46
+ info.nftId,
47
+ expectedType,
48
+ info.objectType);
49
+ }
50
+
51
+ // get instance and check component is active
52
+ instance = _getInstance(registry, info);
53
+ _checkComponentActive(instance, target, info.nftId, onlyActive);
54
+ }
55
+
56
+
57
+ function getInfoAndInstance(
58
+ IRegistry registry,
59
+ NftId componentNftId,
60
+ bool onlyActive
61
+ )
62
+ external
63
+ view
64
+ returns (
65
+ IRegistry.ObjectInfo memory info,
66
+ address instance
67
+ )
68
+ {
69
+ info = registry.getObjectInfo(componentNftId);
70
+ instance = _getInstance(registry, info);
71
+ _checkComponentActive(instance, info.objectAddress, info.nftId, onlyActive);
72
+ }
73
+
74
+
75
+ function getAndVerifyStaking(
76
+ IRegistry registry,
77
+ address target
78
+ )
79
+ external
80
+ view
81
+ returns (
82
+ IRegistry.ObjectInfo memory info
83
+ )
84
+ {
85
+ // check target is component
86
+ info = _getObjectInfo(registry, target);
87
+ if(info.objectType != STAKING()) {
88
+ revert ErrorContractLibNotStaking(
89
+ info.nftId,
90
+ info.objectType);
91
+ }
92
+ }
93
+
94
+
95
+ function getAndVerifyAnyComponent(
96
+ IRegistry registry,
97
+ address target,
98
+ bool onlyActive
99
+ )
100
+ external
101
+ view
102
+ returns (
103
+ IRegistry.ObjectInfo memory info,
104
+ address instance
105
+ )
106
+ {
107
+ // check target is component
108
+ info = _getObjectInfo(registry, target);
109
+ if(!(info.objectType == PRODUCT()
110
+ || info.objectType == POOL()
111
+ || info.objectType == DISTRIBUTION()
112
+ || info.objectType == ORACLE())
113
+ ) {
114
+ revert ErrorContractLibNotComponent(
115
+ info.nftId,
116
+ info.objectType);
117
+ }
118
+
119
+ // get instance and check component is active
120
+ instance = _getInstance(registry, info);
121
+ _checkComponentActive(instance, target, info.nftId, onlyActive);
122
+ }
123
+
124
+
125
+ function getInstanceForComponent(
126
+ IRegistry registry,
127
+ NftId componentNftId
128
+ )
129
+ public
130
+ view
131
+ returns (address instance)
132
+ {
133
+ NftId productNftId = registry.getObjectInfo(componentNftId).parentNftId;
134
+ NftId instanceNftId = registry.getObjectInfo(productNftId).parentNftId;
135
+ return registry.getObjectInfo(instanceNftId).objectAddress;
136
+ }
137
+
138
+
11
139
  function isPolicyHolder(address target) external view returns (bool) {
12
140
  return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
13
141
  }
14
142
 
15
- function isAccessManaged(address target) external view returns (bool) {
16
- if (!isContract(target)) {
143
+
144
+ function isRegistry(address registry) public view returns (bool) {
145
+ if (!isContract(registry)) {
17
146
  return false;
18
147
  }
19
148
 
20
- (bool success, ) = target.staticcall(
21
- abi.encodeWithSelector(
22
- IAccessManaged.authority.selector));
23
-
24
- return success;
149
+ return supportsInterface(registry, type(IRegistry).interfaceId);
25
150
  }
26
151
 
152
+
27
153
  function isContract(address target) public view returns (bool) {
154
+ if (target == address(0)) {
155
+ return false;
156
+ }
157
+
28
158
  uint256 size;
29
159
  assembly {
30
160
  size := extcodesize(target)
@@ -32,7 +162,63 @@ library ContractLib {
32
162
  return size > 0;
33
163
  }
34
164
 
35
- function supportsInterface(address target, bytes4 interfaceId) external view returns (bool) {
165
+ function supportsInterface(address target, bytes4 interfaceId) public view returns (bool) {
36
166
  return ERC165Checker.supportsInterface(target, interfaceId);
37
167
  }
168
+
169
+
170
+ function _checkComponentActive(
171
+ address instance,
172
+ address target,
173
+ NftId componentNftId,
174
+ bool onlyActive
175
+ )
176
+ internal
177
+ view
178
+ {
179
+ if (onlyActive) {
180
+ if (IInstanceAdminHelper(
181
+ instance).getInstanceAdmin().isTargetLocked(
182
+ target)
183
+ ) {
184
+ revert ErrorContractLibComponentInactive(componentNftId);
185
+ }
186
+ }
187
+ }
188
+
189
+
190
+ function _getInstance(
191
+ IRegistry registry,
192
+ IRegistry.ObjectInfo memory info
193
+ )
194
+ internal
195
+ view
196
+ returns (address instance)
197
+ {
198
+ if (info.objectType == PRODUCT()) {
199
+ return registry.getObjectAddress(
200
+ info.parentNftId);
201
+ }
202
+
203
+ return registry.getObjectAddress(
204
+ registry.getObjectInfo(
205
+ info.parentNftId).parentNftId);
206
+ }
207
+
208
+
209
+ function _getObjectInfo(
210
+ IRegistry registry,
211
+ address target
212
+ )
213
+ internal
214
+ view
215
+ returns (IRegistry.ObjectInfo memory info)
216
+ {
217
+ NftId componentNftId = registry.getNftIdForAddress(target);
218
+ if (componentNftId.eqz()) {
219
+ revert ErrorContractLibNotRegistered(target);
220
+ }
221
+
222
+ info = registry.getObjectInfo(componentNftId);
223
+ }
38
224
  }
@@ -31,19 +31,12 @@ interface IComponent is
31
31
 
32
32
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
33
33
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
34
- event LogComponentTokenHandlerApproved(address token, Amount limit, bool isMaxAmount);
34
+ event LogComponentTokenHandlerApproved(address tokenHandler, address token, Amount limit, bool isMaxAmount);
35
35
 
36
- /// @dev approves token hanlder to spend up to the specified amount of tokens
37
- /// reverts if component wallet is not component itself
38
- /// only component owner (nft holder) is authorizes to call this function
39
- function approveTokenHandler(Amount spendingLimitAmount) external;
40
-
41
- /// @dev sets the wallet address for the component.
42
- /// if the current wallet has tokens, these will be transferred.
43
- /// if the new wallet address is externally owned, an approval from the
44
- /// owner of the external wallet to the tokenhandler of the component that
45
- /// covers the current component balance must exist
46
- function setWallet(address walletAddress) external;
36
+ /// @dev Approves token hanlder to spend up to the specified amount of tokens.
37
+ /// Reverts if component wallet is not token handler itself.
38
+ /// Only component owner (nft holder) is authorizes to call this function.
39
+ function approveTokenHandler(IERC20Metadata token, Amount spendingLimitAmount) external;
47
40
 
48
41
  /// @dev returns the name of this component
49
42
  /// to successfully register the component with an instance the name MUST be unique in the linked instance
@@ -1,6 +1,7 @@
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";
4
5
 
5
6
  import {Amount} from "../type/Amount.sol";
6
7
  import {Fee} from "../type/Fee.sol";
@@ -43,6 +44,7 @@ interface IComponentService is
43
44
 
44
45
  event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
45
46
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
47
+ event LogComponentServiceWalletTokensTransferred(NftId componentNftId, address currentWallet, address newWallet, uint256 currentBalance);
46
48
  event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
47
49
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
48
50
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
@@ -58,13 +60,21 @@ interface IComponentService is
58
60
 
59
61
  //-------- component ----------------------------------------------------//
60
62
 
61
- /// @dev sets the components associated wallet address
63
+ /// @dev Approves the callers token handler to spend up to the specified amount of tokens.
64
+ /// Reverts if the component's token handler wallet is not the token handler itself.
65
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external;
66
+
67
+ /// @dev Approves the staking token handler.
68
+ /// Reverts if the staking token handler wallet is not the token handler itself.
69
+ function approveStakingTokenHandler(IERC20Metadata token, Amount amount) external;
70
+
71
+ /// @dev Sets the components associated wallet address
62
72
  function setWallet(address newWallet) external;
63
73
 
64
- /// @dev locks the component associated with the caller
74
+ /// @dev Locks the component associated with the caller
65
75
  function lock() external;
66
76
 
67
- /// @dev unlocks the component associated with the caller
77
+ /// @dev Unlocks the component associated with the caller
68
78
  function unlock() external;
69
79
 
70
80
  /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.