@etherisc/gif-next 0.0.2-92c50c2-136 → 0.0.2-9346c9b-763

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 (402) hide show
  1. package/README.md +13 -1
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +95 -252
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/{registry → authorization}/IServiceAuthorization.sol/IServiceAuthorization.json +10 -10
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1548 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +46 -228
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +272 -90
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +70 -38
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +100 -132
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +134 -16
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -19
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +32 -44
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +35 -96
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1208 -290
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +110 -76
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +66 -126
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +18 -42
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +55 -61
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  61. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  63. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  71. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  72. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  73. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  74. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1185 -0
  75. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  76. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  77. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
  79. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  80. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +43 -0
  81. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  83. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +43 -96
  84. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  85. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +4 -4
  86. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +3 -3
  88. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  89. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1520 -0
  90. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  91. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  92. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +221 -55
  94. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +55 -23
  96. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  97. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +102 -0
  98. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  99. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +43 -195
  100. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  101. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  102. package/artifacts/contracts/pool/Pool.sol/Pool.json +43 -296
  103. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  104. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
  105. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
  107. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  108. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +4 -4
  109. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +3 -3
  111. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  112. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1318 -0
  113. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  114. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  115. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  116. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
  117. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  119. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  120. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  121. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  122. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  123. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  124. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +32 -42
  125. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  126. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  127. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +10 -10
  128. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +6 -6
  130. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  131. package/artifacts/contracts/product/PricingService.sol/PricingService.json +40 -40
  132. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +21 -21
  134. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  135. package/artifacts/contracts/product/Product.sol/Product.json +32 -153
  136. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  137. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  138. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  139. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  140. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  143. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -46
  144. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  145. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  146. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  147. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  148. package/artifacts/contracts/registry/Registry.sol/Registry.json +97 -69
  149. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +234 -389
  151. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  152. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  153. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  155. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  156. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  157. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  158. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  159. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  160. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +24 -16
  161. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  162. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  163. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  164. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +215 -86
  166. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  167. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +60 -44
  168. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  169. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +97 -0
  173. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +32 -0
  175. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  176. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  177. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  178. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  179. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  180. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  182. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  183. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  184. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +32 -53
  185. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  186. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  187. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  188. package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
  189. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  190. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  191. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  192. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  193. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  194. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  195. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  196. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  197. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  198. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  199. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  200. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  201. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  202. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  203. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  204. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  205. package/artifacts/contracts/staking/Staking.sol/Staking.json +36 -36
  206. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  207. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  208. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  209. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +19 -19
  210. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  211. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  212. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  213. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  214. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  216. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  217. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +5 -5
  218. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  219. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  220. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  221. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  223. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  226. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  228. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  230. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  232. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  234. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  235. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  236. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +55 -2
  238. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  240. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  242. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  244. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  246. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +117 -14
  248. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  256. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +21 -2
  258. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  260. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  262. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  263. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  264. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  265. package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
  266. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  267. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  268. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  269. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  270. package/contracts/{shared → authorization}/AccessAdmin.sol +135 -303
  271. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  272. package/contracts/authorization/Authorization.sol +218 -0
  273. package/contracts/authorization/IAccess.sol +48 -0
  274. package/contracts/{shared → authorization}/IAccessAdmin.sol +22 -54
  275. package/contracts/authorization/IAuthorization.sol +54 -0
  276. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  277. package/contracts/{registry → authorization}/IServiceAuthorization.sol +5 -5
  278. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  279. package/contracts/{registry → authorization}/ServiceAuthorization.sol +17 -17
  280. package/contracts/distribution/BasicDistribution.sol +149 -0
  281. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  282. package/contracts/distribution/Distribution.sol +142 -102
  283. package/contracts/distribution/DistributionService.sol +70 -22
  284. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  285. package/contracts/distribution/IDistributionComponent.sol +25 -39
  286. package/contracts/distribution/IDistributionService.sol +17 -1
  287. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  288. package/contracts/instance/IInstance.sol +8 -9
  289. package/contracts/instance/IInstanceService.sol +13 -18
  290. package/contracts/instance/Instance.sol +61 -70
  291. package/contracts/instance/InstanceAdmin.sol +202 -267
  292. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  293. package/contracts/instance/InstanceReader.sol +22 -9
  294. package/contracts/instance/InstanceService.sol +74 -70
  295. package/contracts/instance/InstanceServiceManager.sol +2 -6
  296. package/contracts/instance/InstanceStore.sol +5 -1
  297. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -12
  298. package/contracts/instance/module/IComponents.sol +0 -1
  299. package/contracts/oracle/BasicOracle.sol +48 -0
  300. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  301. package/contracts/oracle/IOracle.sol +16 -0
  302. package/contracts/oracle/IOracleComponent.sol +2 -1
  303. package/contracts/oracle/Oracle.sol +72 -47
  304. package/contracts/oracle/OracleServiceManager.sol +2 -5
  305. package/contracts/pool/BasicPool.sol +164 -0
  306. package/contracts/pool/BasicPoolAuthorization.sol +55 -0
  307. package/contracts/pool/BundleService.sol +71 -25
  308. package/contracts/pool/BundleServiceManager.sol +2 -5
  309. package/contracts/pool/IBundleService.sol +14 -0
  310. package/contracts/pool/IPoolComponent.sol +6 -60
  311. package/contracts/pool/Pool.sol +160 -131
  312. package/contracts/pool/PoolService.sol +11 -27
  313. package/contracts/pool/PoolServiceManager.sol +2 -5
  314. package/contracts/product/ApplicationService.sol +12 -36
  315. package/contracts/product/ApplicationServiceManager.sol +2 -2
  316. package/contracts/product/BasicProduct.sol +82 -0
  317. package/contracts/product/BasicProductAuthorization.sol +43 -0
  318. package/contracts/product/ClaimService.sol +5 -31
  319. package/contracts/product/ClaimServiceManager.sol +2 -2
  320. package/contracts/product/IProductComponent.sol +7 -9
  321. package/contracts/product/PolicyServiceManager.sol +2 -5
  322. package/contracts/product/PricingServiceManager.sol +2 -5
  323. package/contracts/product/Product.sol +103 -88
  324. package/contracts/product/ProductService.sol +7 -32
  325. package/contracts/product/ProductServiceManager.sol +2 -5
  326. package/contracts/registry/IRegistry.sol +26 -16
  327. package/contracts/registry/IRegistryService.sol +6 -6
  328. package/contracts/registry/Registry.sol +81 -87
  329. package/contracts/registry/RegistryAdmin.sol +118 -88
  330. package/contracts/registry/RegistryService.sol +4 -18
  331. package/contracts/registry/RegistryServiceManager.sol +2 -2
  332. package/contracts/registry/{ReleaseManager.sol → ReleaseRegistry.sol} +97 -113
  333. package/contracts/registry/ServiceAuthorizationV3.sol +14 -14
  334. package/contracts/registry/TokenRegistry.sol +2 -2
  335. package/contracts/shared/Component.sol +13 -14
  336. package/contracts/shared/ComponentService.sol +71 -69
  337. package/contracts/shared/ComponentServiceManager.sol +2 -2
  338. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  339. package/contracts/shared/IComponentService.sol +10 -0
  340. package/contracts/shared/IInstanceLinkedComponent.sol +10 -0
  341. package/contracts/shared/IService.sol +1 -1
  342. package/contracts/shared/InstanceLinkedComponent.sol +47 -19
  343. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  344. package/contracts/shared/Service.sol +3 -4
  345. package/contracts/staking/IStaking.sol +1 -2
  346. package/contracts/staking/IStakingService.sol +12 -5
  347. package/contracts/staking/Staking.sol +17 -16
  348. package/contracts/staking/StakingManager.sol +2 -6
  349. package/contracts/staking/StakingReader.sol +12 -16
  350. package/contracts/staking/StakingServiceManager.sol +2 -2
  351. package/contracts/staking/StakingStore.sol +12 -22
  352. package/contracts/type/Amount.sol +7 -2
  353. package/contracts/type/ObjectType.sol +37 -7
  354. package/contracts/type/RoleId.sol +55 -82
  355. package/contracts/type/UFixed.sol +6 -0
  356. package/contracts/type/Version.sol +3 -1
  357. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  358. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  359. package/package.json +3 -3
  360. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  361. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
  362. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  363. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
  364. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  365. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
  366. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
  367. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  368. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1177
  369. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
  370. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -190
  371. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
  372. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1559
  373. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  374. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
  375. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  376. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
  377. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  378. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
  379. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  380. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
  381. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  382. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
  383. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
  384. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  385. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
  386. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  387. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
  388. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  389. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  390. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  391. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  392. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  393. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
  394. package/contracts/shared/AccessManagerCustom.sol +0 -741
  395. package/contracts/shared/AccessManagerExtended.sol +0 -481
  396. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  397. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
  398. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  399. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  400. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
  401. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  402. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,32 +1,33 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {Amount, AmountLib} from "../type/Amount.sol";
5
7
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
8
  import {Fee, FeeLib} from "../type/Fee.sol";
7
- import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
8
- import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IRegistryService} from "../registry/IRegistryService.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IAccess} from "../instance/module/IAccess.sol";
12
- import {NftId} from "../type/NftId.sol";
13
- import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
14
- import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, POLICY_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../type/RoleId.sol";
15
- import {KEEP_STATE} from "../type/StateId.sol";
16
9
  import {IComponents} from "../instance/module/IComponents.sol";
17
10
  import {IComponentService} from "./IComponentService.sol";
18
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
11
+ import {IInstance} from "../instance/IInstance.sol";
12
+ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
13
+ import {InstanceReader} from "../instance/InstanceReader.sol";
14
+ import {InstanceStore} from "../instance/InstanceStore.sol";
19
15
  import {IInstanceService} from "../instance/IInstanceService.sol";
20
16
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
21
17
  import {IProductComponent} from "../product/IProductComponent.sol";
22
- import {InstanceReader} from "../instance/InstanceReader.sol";
23
- import {InstanceStore} from "../instance/InstanceStore.sol";
18
+ import {IRegistry} from "../registry/IRegistry.sol";
19
+ import {IRegistryService} from "../registry/IRegistryService.sol";
20
+ import {KEEP_STATE} from "../type/StateId.sol";
21
+ import {NftId} from "../type/NftId.sol";
22
+ import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
23
+ import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
24
24
  import {TokenHandler} from "./TokenHandler.sol";
25
25
 
26
26
  contract ComponentService is
27
27
  ComponentVerifyingService,
28
28
  IComponentService
29
29
  {
30
+ using AmountLib for Amount;
30
31
 
31
32
  error ErrorComponentServiceAlreadyRegistered(address component);
32
33
  error ErrorComponentServiceNotComponent(address component);
@@ -94,6 +95,46 @@ contract ComponentService is
94
95
  // TODO implement
95
96
  function unlock() external virtual {}
96
97
 
98
+ function withdrawFees(Amount amount)
99
+ external
100
+ virtual
101
+ returns (Amount withdrawnAmount)
102
+ {
103
+ (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
104
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
105
+ address componentWallet = info.wallet;
106
+
107
+ // determine withdrawn amount
108
+ withdrawnAmount = amount;
109
+ if (withdrawnAmount.gte(AmountLib.max())) {
110
+ withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
111
+ } else if (withdrawnAmount.eqz()) {
112
+ revert ErrorComponentServiceWithdrawAmountIsZero();
113
+ } else {
114
+ Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
115
+ if (withdrawnAmount.gt(withdrawLimit)) {
116
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
117
+ }
118
+ }
119
+
120
+ // check allowance
121
+ TokenHandler tokenHandler = info.tokenHandler;
122
+ IERC20Metadata token = IERC20Metadata(info.token);
123
+ uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
124
+ if (tokenAllowance < withdrawnAmount.toInt()) {
125
+ revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
126
+ }
127
+
128
+ // decrease fee counters by withdrawnAmount
129
+ _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
130
+
131
+ // transfer amount to component owner
132
+ address componentOwner = getRegistry().ownerOf(componentNftId);
133
+ tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
134
+
135
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
136
+ }
137
+
97
138
 
98
139
  //-------- product ------------------------------------------------------//
99
140
 
@@ -102,12 +143,6 @@ contract ComponentService is
102
143
  virtual
103
144
  {
104
145
  address contractAddress = msg.sender;
105
- RoleId[] memory roles = new RoleId[](1);
106
- bytes4[][] memory selectors = new bytes4[][](1);
107
-
108
- // authorizaion for distribution owner
109
- roles[0] = PRODUCT_OWNER_ROLE();
110
- selectors[0] = _createSelectors(IProductComponent.setFees.selector);
111
146
 
112
147
  // register/create component setup
113
148
  (
@@ -117,9 +152,7 @@ contract ComponentService is
117
152
  ) = _register(
118
153
  contractAddress,
119
154
  PRODUCT(),
120
- PRODUCT_OWNER_ROLE(),
121
- roles,
122
- selectors);
155
+ PRODUCT_OWNER_ROLE());
123
156
 
124
157
  // create product info
125
158
  IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
@@ -193,24 +226,12 @@ contract ComponentService is
193
226
  virtual
194
227
  {
195
228
  address contractAddress = msg.sender;
196
- RoleId[] memory roles = new RoleId[](2);
197
- bytes4[][] memory selectors = new bytes4[][](2);
198
-
199
- // authorizaion for distribution owner
200
- roles[0] = DISTRIBUTION_OWNER_ROLE();
201
- selectors[0] = _createSelectors(IDistributionComponent.setFees.selector);
202
-
203
- // authorizaion for product service
204
- roles[1] = PRODUCT_SERVICE_ROLE();
205
- selectors[1] = _createSelectors(IDistributionComponent.processRenewal.selector);
206
229
 
207
230
  // register/create component info
208
231
  _register(
209
232
  contractAddress,
210
233
  DISTRIBUTION(),
211
- DISTRIBUTION_OWNER_ROLE(),
212
- roles,
213
- selectors);
234
+ DISTRIBUTION_OWNER_ROLE());
214
235
  }
215
236
 
216
237
 
@@ -282,8 +303,6 @@ contract ComponentService is
282
303
  virtual
283
304
  {
284
305
  address contractAddress = msg.sender;
285
- RoleId[] memory roles = new RoleId[](0);
286
- bytes4[][] memory selectors = new bytes4[][](0);
287
306
 
288
307
  // register/create component setup
289
308
  (
@@ -293,9 +312,7 @@ contract ComponentService is
293
312
  ) = _register(
294
313
  contractAddress,
295
314
  ORACLE(),
296
- ORACLE_OWNER_ROLE(),
297
- roles,
298
- selectors);
315
+ ORACLE_OWNER_ROLE());
299
316
  }
300
317
 
301
318
  //-------- pool ---------------------------------------------------------//
@@ -305,16 +322,6 @@ contract ComponentService is
305
322
  virtual
306
323
  {
307
324
  address contractAddress = msg.sender;
308
- RoleId[] memory roles = new RoleId[](2);
309
- bytes4[][] memory selectors = new bytes4[][](2);
310
-
311
- // authorizaion for pool owner
312
- roles[0] = POOL_OWNER_ROLE();
313
- selectors[0] = _createSelectors(IPoolComponent.setFees.selector);
314
-
315
- // authorizaion for product service
316
- roles[1] = POLICY_SERVICE_ROLE();
317
- selectors[1] = _createSelectors(IPoolComponent.verifyApplication.selector);
318
325
 
319
326
  // register/create component setup
320
327
  (
@@ -324,14 +331,13 @@ contract ComponentService is
324
331
  ) = _register(
325
332
  contractAddress,
326
333
  POOL(),
327
- POOL_OWNER_ROLE(),
328
- roles,
329
- selectors);
334
+ POOL_OWNER_ROLE());
330
335
 
331
336
  // create info
332
337
  instanceStore.createPool(
333
338
  componentNftId,
334
- IPoolComponent(contractAddress).getInitialPoolInfo());
339
+ IPoolComponent(
340
+ contractAddress).getInitialPoolInfo());
335
341
  }
336
342
 
337
343
 
@@ -461,9 +467,7 @@ contract ComponentService is
461
467
  function _register(
462
468
  address componentAddress, // address of component to register
463
469
  ObjectType requiredType, // required type for component for registration
464
- RoleId requiredRole, // role required for comonent owner for registration
465
- RoleId[] memory roles, // roles with write access to component
466
- bytes4[][] memory selectors // authorized functions per role with write access
470
+ RoleId requiredRole // role required for comonent owner for registration
467
471
  )
468
472
  internal
469
473
  virtual
@@ -490,8 +494,10 @@ contract ComponentService is
490
494
 
491
495
  component.linkToRegisteredNftId();
492
496
 
493
-
494
- // TODO second part, may be done in different tx....
497
+ // setup initial component authorization
498
+ _instanceService.initializeAuthorization(
499
+ instance.getNftId(),
500
+ component);
495
501
 
496
502
  // save amended component info with instance
497
503
  instanceReader = instance.getInstanceReader();
@@ -499,15 +505,12 @@ contract ComponentService is
499
505
 
500
506
  IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
501
507
  componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
502
- instanceStore.createComponent(componentNftId, componentInfo);
503
-
504
- // configure instance authorization
505
- _instanceService.createComponentTarget(
506
- instance.getNftId(),
507
- componentAddress,
508
- component.getName(),
509
- selectors,
510
- roles);
508
+
509
+ instanceStore.createComponent(
510
+ component.getNftId(),
511
+ componentInfo);
512
+
513
+ // TODO add logging
511
514
  }
512
515
 
513
516
 
@@ -608,8 +611,7 @@ contract ComponentService is
608
611
  instance = _getInstance(info.parentNftId);
609
612
  owner = info.initialOwner;
610
613
 
611
- (bool hasRole,) = instance.getInstanceAccessManager().hasRole(requiredRole.toInt(), owner);
612
- if(!hasRole) {
614
+ if(!instance.getInstanceAdmin().hasRole(owner, requiredRole)) {
613
615
  revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
614
616
  }
615
617
  }
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "./IVersionable.sol";
5
- import {ProxyManager} from "./ProxyManager.sol";
6
4
  import {ComponentService} from "./ComponentService.sol";
5
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
6
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
7
7
 
8
8
  contract ComponentServiceManager is ProxyManager {
9
9
 
@@ -87,7 +87,7 @@ abstract contract ComponentVerifyingService is
87
87
 
88
88
  // ensure component is not locked
89
89
  if (onlyActive) {
90
- if (instance.getInstanceAccessManager().isTargetClosed(info.objectAddress)) {
90
+ if (instance.getInstanceAdmin().isTargetLocked(info.objectAddress)) {
91
91
  revert ErrorComponentVerifyingServiceComponentIsLocked(componentNftId);
92
92
  }
93
93
  }
@@ -27,7 +27,12 @@ interface IComponentService is
27
27
  error ErrorComponentServiceWalletAddressZero();
28
28
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
29
29
 
30
+ error ErrorComponentServiceWithdrawAmountIsZero();
31
+ error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
32
+ error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
33
+
30
34
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
35
+ event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
31
36
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
32
37
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
33
38
  event LogComponentServicePoolFeesUpdated(NftId poolNftId);
@@ -51,6 +56,11 @@ interface IComponentService is
51
56
  /// @dev unlocks the component associated with the caller
52
57
  function unlock() external;
53
58
 
59
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
60
+ /// @param withdrawAmount the amount to withdraw
61
+ /// @return withdrawnAmount the amount that was actually withdrawn
62
+ function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
63
+
54
64
  //-------- product ------------------------------------------------------//
55
65
 
56
66
  /// @dev registers the sending component as a product component
@@ -4,7 +4,9 @@ pragma solidity ^0.8.20;
4
4
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
6
 
7
+ import {Amount} from "../type/Amount.sol";
7
8
  import {IComponent} from "../shared/IComponent.sol";
9
+ import {IAuthorization} from "../authorization/IAuthorization.sol";
8
10
  import {IComponents} from "../instance/module/IComponents.sol";
9
11
  import {IInstance} from "../instance/IInstance.sol";
10
12
  import {IInstanceService} from "../instance/IInstanceService.sol";
@@ -43,4 +45,12 @@ interface IInstanceLinkedComponent is
43
45
  /// this is only relevant for pool and distribution components
44
46
  function getProductNftId() external view returns (NftId productNftId);
45
47
 
48
+ /// @dev returns the initial component authorization specification.
49
+ function getAuthorization() external view returns (IAuthorization authorization);
50
+
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);
55
+
46
56
  }
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
5
 
6
6
  import {IRegisterable} from "./IRegisterable.sol";
7
- import {IVersionable} from "./IVersionable.sol";
7
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
8
8
  import {ObjectType} from "../type/ObjectType.sol";
9
9
  import {RoleId} from "../type/RoleId.sol";
10
10
 
@@ -6,13 +6,14 @@ 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
10
  import {Component} from "./Component.sol";
10
11
  import {IComponentService} from "./IComponentService.sol";
11
12
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
13
+ import {IAuthorization} from "../authorization/IAuthorization.sol";
12
14
  import {IComponents} from "../instance/module/IComponents.sol";
13
15
  import {IInstanceService} from "../instance/IInstanceService.sol";
14
16
  import {IInstance} from "../instance/IInstance.sol";
15
- import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
16
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
17
18
  import {IRegistry} from "../registry/IRegistry.sol";
18
19
  import {NftId} from "../type/NftId.sol";
@@ -35,6 +36,39 @@ abstract contract InstanceLinkedComponent is
35
36
  struct InstanceLinkedComponentStorage {
36
37
  IInstance _instance; // instance for this component
37
38
  InstanceReader _instanceReader; // instance reader for this component
39
+ IAuthorization _initialAuthorization;
40
+ IComponentService _componentService;
41
+ }
42
+
43
+ function lock() external onlyOwner {
44
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
45
+ }
46
+
47
+ function unlock() external onlyOwner {
48
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
49
+ }
50
+
51
+ function getInstance() public view override returns (IInstance instance) {
52
+ return _getInstanceLinkedComponentStorage()._instance;
53
+ }
54
+
55
+ function getProductNftId() public view override returns (NftId productNftId) {
56
+ return getComponentInfo().productNftId;
57
+ }
58
+
59
+ function getAuthorization() external view returns (IAuthorization authorization) {
60
+ return _getInstanceLinkedComponentStorage()._initialAuthorization;
61
+ }
62
+
63
+ /// @inheritdoc IInstanceLinkedComponent
64
+ function withdrawFees(Amount amount)
65
+ external
66
+ virtual
67
+ onlyOwner()
68
+ restricted()
69
+ returns (Amount withdrawnAmount)
70
+ {
71
+ return _withdrawFees(amount);
38
72
  }
39
73
 
40
74
  function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
@@ -43,18 +77,19 @@ abstract contract InstanceLinkedComponent is
43
77
  }
44
78
  }
45
79
 
46
- function initializeInstanceLinkedComponent(
80
+ function _initializeInstanceLinkedComponent(
47
81
  address registry,
48
82
  NftId instanceNftId,
49
83
  string memory name,
50
84
  address token,
51
85
  ObjectType componentType,
86
+ IAuthorization authorization,
52
87
  bool isInterceptor,
53
88
  address initialOwner,
54
89
  bytes memory registryData, // writeonly data that will saved in the object info record of the registry
55
90
  bytes memory componentData // data that will saved with the component info in the instance store
56
91
  )
57
- public
92
+ internal
58
93
  virtual
59
94
  onlyInitializing()
60
95
  {
@@ -82,6 +117,8 @@ abstract contract InstanceLinkedComponent is
82
117
 
83
118
  // set component state
84
119
  $._instanceReader = $._instance.getInstanceReader();
120
+ $._initialAuthorization = authorization;
121
+ $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
85
122
 
86
123
  registerInterface(type(IAccessManaged).interfaceId);
87
124
  registerInterface(type(IInstanceLinkedComponent).interfaceId);
@@ -93,22 +130,6 @@ abstract contract InstanceLinkedComponent is
93
130
  IComponentService(_getServiceAddress(COMPONENT())).setWallet(newWallet);
94
131
  }
95
132
 
96
- function lock() external onlyOwner {
97
- IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
98
- }
99
-
100
- function unlock() external onlyOwner {
101
- IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
102
- }
103
-
104
- function getInstance() public view override returns (IInstance instance) {
105
- return _getInstanceLinkedComponentStorage()._instance;
106
- }
107
-
108
- function getProductNftId() public view override returns (NftId productNftId) {
109
- return getComponentInfo().productNftId;
110
- }
111
-
112
133
 
113
134
  function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
114
135
  NftId componentNftId = getRegistry().getNftId(address(this));
@@ -134,6 +155,13 @@ abstract contract InstanceLinkedComponent is
134
155
  return _getInstanceLinkedComponentStorage()._instanceReader;
135
156
  }
136
157
 
158
+ function _withdrawFees(Amount amount)
159
+ internal
160
+ returns (Amount withdrawnAmount)
161
+ {
162
+ return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
163
+ }
164
+
137
165
 
138
166
  /// @dev returns the service address for the specified domain
139
167
  /// gets address via lookup from registry using the major version form the linked instance
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {LibNftIdSet} from "../type/NftIdSet.sol";
5
5
  import {NftId} from "../type/NftId.sol";
6
6
 
7
- contract NftIdSetManager {
7
+ contract NftIdSet {
8
8
 
9
9
  error ErrorNftIdSetManagerNotOwner(address owner, address sender);
10
10
  error ErrorNftIdSetManagerOwnerAlreadySet(address owner);
@@ -6,13 +6,12 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
 
7
7
  import {IRegistry} from "../registry/IRegistry.sol";
8
8
  import {IService} from "./IService.sol";
9
- import {IVersionable} from "./IVersionable.sol";
10
- import {NftId} from "../type/NftId.sol";
9
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
11
10
  import {ObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
12
11
  import {Registerable} from "./Registerable.sol";
13
12
  import {RoleId, RoleIdLib} from "../type/RoleId.sol";
14
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../type/Version.sol";
15
- import {Versionable} from "./Versionable.sol";
13
+ import {Version, VersionLib, VersionPartLib} from "../type/Version.sol";
14
+ import {Versionable} from "../upgradeability/Versionable.sol";
16
15
 
17
16
 
18
17
  /// @dev service base contract
@@ -3,9 +3,8 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount} from "../type/Amount.sol";
5
5
  import {IComponent} from "../shared/IComponent.sol";
6
- import {IVersionable} from "../shared/IVersionable.sol";
6
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
- import {NftIdSetManager} from "../shared/NftIdSetManager.sol";
9
8
  import {ObjectType} from "../type/ObjectType.sol";
10
9
  import {Seconds} from "../type/Seconds.sol";
11
10
  import {StakingReader} from "./StakingReader.sol";
@@ -44,6 +44,13 @@ interface IStakingService is IService
44
44
  error ErrorStakingServiceDipBalanceInsufficient(NftId targetNftId, uint256 amount, uint256 balance);
45
45
  error ErrorStakingServiceDipAllowanceInsufficient(NftId targetNftId, address tokenHandler, uint256 amount, uint256 allowance);
46
46
 
47
+ /// @dev Set the protocol reward rate stake locking period to the specified duration.
48
+ /// Permissioned: only staking owner
49
+ // TODO implement
50
+ // function setProtocolRewardRate(UFixed rewardRate) external;
51
+ // function setProtocolLockingPeriod(Seconds lockingPeriod) external;
52
+ // TODO also make sure that protocol rewards can be refilled and withdrawn
53
+
47
54
  /// @dev creates/registers an on-chain instance staking target.
48
55
  /// function granted to instance service
49
56
  function createInstanceTarget(
@@ -53,11 +60,11 @@ interface IStakingService is IService
53
60
  ) external;
54
61
 
55
62
  /// @dev Set the instance stake locking period to the specified duration.
56
- /// permissioned: only the owner of the specified target may set the locking period
63
+ /// Permissioned: Only owner of the specified target.
57
64
  function setInstanceLockingPeriod(NftId instanceNftId, Seconds lockingPeriod) external;
58
65
 
59
- /// @dev Set the instance reward rate to the specified value
60
- /// permissioned: only the owner of the specified target may set the locking period
66
+ /// @dev Set the instance reward rate to the specified value.
67
+ /// Permissioned: Only owner of the specified target.
61
68
  function setInstanceRewardRate(NftId instanceNftId, UFixed rewardRate) external;
62
69
 
63
70
  /// @dev (Re)fills the staking reward reserves for the specified target using the dips provided by the reward provider.
@@ -68,8 +75,8 @@ interface IStakingService is IService
68
75
  /// unpermissioned: anybody may fill up staking reward reserves
69
76
  function refillRewardReservesBySender(NftId targetNftId, Amount dipAmount) external returns (Amount newBalance);
70
77
 
71
- /// @dev defunds the staking reward reserves for the specified target
72
- /// permissioned: only the target owner may call this function
78
+ /// @dev Defunds the staking reward reserves for the specified target
79
+ /// Permissioned: only the target owner may call this function
73
80
  function withdrawInstanceRewardReserves(NftId instanceNftId, Amount dipAmount) external returns (Amount newBalance);
74
81
 
75
82
  /// @dev create a new stake with amount DIP to the specified target
@@ -1,29 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {ChainNft} from "../registry/ChainNft.sol";
6
- import {Component} from "../shared/Component.sol";
7
4
  import {IRegistry} from "../registry/IRegistry.sol";
8
5
  import {IRegistryService} from "../registry/IRegistryService.sol";
9
6
  import {IStaking} from "./IStaking.sol";
10
- import {IVersionable} from "../shared/IVersionable.sol";
11
- import {Key32} from "../type/Key32.sol";
12
- import {LibNftIdSet} from "../type/NftIdSet.sol";
13
- import {NftId, NftIdLib} from "../type/NftId.sol";
14
- import {NftIdSetManager} from "../shared/NftIdSetManager.sol";
15
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
16
- import {Seconds, SecondsLib} from "../type/Seconds.sol";
7
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
8
+
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
+ import {Component} from "../shared/Component.sol";
11
+ import {IComponent} from "../shared/IComponent.sol";
12
+ import {NftId} from "../type/NftId.sol";
13
+ import {ObjectType, STAKING} from "../type/ObjectType.sol";
14
+ import {Seconds} from "../type/Seconds.sol";
17
15
  import {StakeManagerLib} from "./StakeManagerLib.sol";
18
16
  import {StakingReader} from "./StakingReader.sol";
19
17
  import {StakingStore} from "./StakingStore.sol";
20
18
  import {TargetManagerLib} from "./TargetManagerLib.sol";
21
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
19
+ import {Timestamp} from "../type/Timestamp.sol";
22
20
  import {TokenHandler} from "../shared/TokenHandler.sol";
23
21
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
24
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
22
+ import {UFixed} from "../type/UFixed.sol";
25
23
  import {Version, VersionLib} from "../type/Version.sol";
26
- import {Versionable} from "../shared/Versionable.sol";
24
+ import {Versionable} from "../upgradeability/Versionable.sol";
27
25
 
28
26
  contract Staking is
29
27
  Component,
@@ -39,6 +37,7 @@ contract Staking is
39
37
  struct StakingStorage {
40
38
  IRegistryService _registryService;
41
39
  TokenRegistry _tokenRegistry;
40
+ TokenHandler _tokenHandler;
42
41
  StakingStore _store;
43
42
  StakingReader _reader;
44
43
  NftId _protocolNftId;
@@ -54,7 +53,7 @@ contract Staking is
54
53
 
55
54
 
56
55
  modifier onlyTarget(NftId targetNftId) {
57
- if (!_getStakingStorage()._store.getTargetManager().exists(targetNftId)) {
56
+ if (!_getStakingStorage()._store.getTargetNftIdSet().exists(targetNftId)) {
58
57
  revert ErrorStakingNotTarget(targetNftId);
59
58
  }
60
59
  _;
@@ -422,6 +421,9 @@ contract Staking is
422
421
  return address(_getStakingStorage()._tokenRegistry);
423
422
  }
424
423
 
424
+ function getTokenHandler() public virtual override(Component, IComponent) view returns (TokenHandler tokenHandler) {
425
+ return _getStakingStorage()._tokenHandler;
426
+ }
425
427
 
426
428
  // from Versionable
427
429
  function getVersion()
@@ -492,14 +494,13 @@ contract Staking is
492
494
  "", // registry data
493
495
  ""); // component data
494
496
 
495
- _createAndSetTokenHandler();
496
-
497
497
  // wiring to external contracts
498
498
  StakingStorage storage $ = _getStakingStorage();
499
499
  $._protocolNftId = getRegistry().getProtocolNftId();
500
500
  $._store = StakingStore(stakingStoreAddress);
501
501
  $._reader = StakingStore(stakingStoreAddress).getStakingReader();
502
502
  $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
503
+ $._tokenHandler = new TokenHandler(address(getToken()));
503
504
 
504
505
  registerInterface(type(IStaking).interfaceId);
505
506
  }
@@ -1,14 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
6
- import {ReleaseManager} from "../registry/ReleaseManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
7
6
  import {Staking} from "./Staking.sol";
8
- import {StakingReader} from "./StakingReader.sol";
9
- import {StakingStore} from "./StakingStore.sol";
10
7
 
11
- import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
12
8
 
13
9
  contract StakingManager is
14
10
  ProxyManager