@etherisc/gif-next 0.0.2-7dc3cd3-858 → 0.0.2-7e48d89-379

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. package/README.md +32 -3
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +38 -33
  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 +1 -1
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +8 -8
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +8 -8
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +23 -4
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +85 -90
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +19 -19
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -64
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +182 -74
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +71 -55
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -26
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +71 -0
  32. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  33. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +7 -7
  36. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  37. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +10 -5
  38. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.json +19 -19
  40. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  41. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1626 -0
  42. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
  44. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +80 -122
  46. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -39
  48. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +35 -35
  50. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +89 -212
  52. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  53. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  54. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  55. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  56. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  57. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  58. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  59. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  60. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  61. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  67. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  68. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  69. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -77
  71. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  72. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +21 -21
  73. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  74. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -26
  76. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  77. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -61
  79. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  80. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -32
  81. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +34 -34
  83. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  84. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +54 -125
  85. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +19 -19
  87. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  88. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +394 -62
  89. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  90. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +107 -43
  91. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  93. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  94. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -83
  95. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +158 -54
  97. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  98. package/artifacts/contracts/pool/Pool.sol/Pool.json +44 -121
  99. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +226 -90
  101. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +52 -36
  103. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  104. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +33 -44
  105. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +32 -40
  107. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  108. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -64
  109. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  110. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +19 -19
  111. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  112. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +88 -72
  113. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +54 -54
  115. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  116. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  117. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  119. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  120. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +188 -108
  121. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  122. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  123. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -26
  124. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  125. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  126. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +260 -167
  127. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +59 -43
  129. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  130. package/artifacts/contracts/product/PricingService.sol/PricingService.json +63 -58
  131. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +47 -47
  133. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  134. package/artifacts/contracts/product/Product.sol/Product.json +19 -64
  135. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  136. package/artifacts/contracts/product/ProductService.sol/ProductService.json +20 -20
  137. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +28 -28
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  140. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
  143. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  144. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  145. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  147. package/artifacts/contracts/registry/Registry.sol/Registry.json +101 -29
  148. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  149. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +100 -95
  150. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  151. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -18
  152. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -27
  154. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  155. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  156. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  157. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  158. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  159. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +26 -7
  160. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  161. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  162. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  163. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  164. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +255 -62
  166. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  167. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +69 -49
  168. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  169. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  171. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  173. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -26
  175. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +11 -5
  177. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  178. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +0 -5
  179. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  180. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  183. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  184. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  185. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  186. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  187. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  188. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -64
  189. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  190. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +15 -89
  191. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +4 -65
  193. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  194. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  195. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  196. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -6
  197. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  198. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +6 -6
  199. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  200. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -8
  201. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  202. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  203. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  204. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  205. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  206. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  207. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  208. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  209. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  210. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  211. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +40 -113
  213. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  214. package/artifacts/contracts/staking/Staking.sol/Staking.json +55 -119
  215. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  216. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  217. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  218. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +46 -46
  219. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  220. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  221. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  222. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -26
  223. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  224. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +31 -31
  225. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  226. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +146 -165
  227. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  228. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +27 -22
  229. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  230. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  231. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  233. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  235. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  236. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  237. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  239. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
  241. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  242. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  243. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +4 -4
  245. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  246. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  247. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  249. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  251. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  253. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
  255. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  257. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +14 -14
  259. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  261. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +2 -2
  263. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  265. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  267. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/String.sol/StrLib.json +2 -2
  269. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  271. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  273. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  275. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  277. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  279. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  280. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  281. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  282. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  283. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  284. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  285. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  286. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  287. package/contracts/authorization/AccessAdmin.sol +8 -10
  288. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  289. package/contracts/authorization/Authorization.sol +0 -1
  290. package/contracts/authorization/IServiceAuthorization.sol +3 -0
  291. package/contracts/authorization/ServiceAuthorization.sol +4 -0
  292. package/contracts/distribution/BasicDistribution.sol +4 -15
  293. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  294. package/contracts/distribution/Distribution.sol +22 -10
  295. package/contracts/distribution/DistributionService.sol +47 -27
  296. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  297. package/contracts/distribution/IDistributionComponent.sol +8 -4
  298. package/contracts/distribution/IDistributionService.sol +10 -0
  299. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  300. package/contracts/instance/IInstance.sol +7 -7
  301. package/contracts/instance/IInstanceService.sol +6 -5
  302. package/contracts/instance/Instance.sol +8 -8
  303. package/contracts/instance/{InstanceAdminNew.sol → InstanceAdmin.sol} +33 -9
  304. package/contracts/instance/InstanceAuthorizationV3.sol +16 -21
  305. package/contracts/instance/InstanceReader.sol +10 -7
  306. package/contracts/instance/InstanceService.sol +69 -32
  307. package/contracts/instance/InstanceServiceManager.sol +2 -6
  308. package/contracts/instance/InstanceStore.sol +8 -4
  309. package/contracts/instance/base/ObjectLifecycle.sol +105 -0
  310. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
  311. package/contracts/instance/module/IBundle.sol +1 -1
  312. package/contracts/instance/module/IComponents.sol +1 -7
  313. package/contracts/instance/module/IDistribution.sol +0 -1
  314. package/contracts/instance/module/IPolicy.sol +1 -1
  315. package/contracts/mock/Dip.sol +1 -1
  316. package/contracts/oracle/IOracleComponent.sol +2 -1
  317. package/contracts/oracle/Oracle.sol +15 -6
  318. package/contracts/oracle/OracleServiceManager.sol +2 -5
  319. package/contracts/pool/BasicPool.sol +7 -5
  320. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  321. package/contracts/pool/BundleService.sol +181 -41
  322. package/contracts/pool/BundleServiceManager.sol +2 -5
  323. package/contracts/pool/IBundleService.sol +33 -5
  324. package/contracts/pool/IPoolComponent.sol +6 -0
  325. package/contracts/pool/IPoolService.sol +14 -17
  326. package/contracts/pool/Pool.sol +32 -15
  327. package/contracts/pool/PoolService.sol +152 -85
  328. package/contracts/pool/PoolServiceManager.sol +2 -5
  329. package/contracts/product/ApplicationService.sol +49 -53
  330. package/contracts/product/ApplicationServiceManager.sol +2 -2
  331. package/contracts/product/BasicProduct.sol +3 -33
  332. package/contracts/product/BasicProductAuthorization.sol +3 -0
  333. package/contracts/product/ClaimService.sol +13 -39
  334. package/contracts/product/ClaimServiceManager.sol +2 -2
  335. package/contracts/product/IApplicationService.sol +1 -0
  336. package/contracts/product/IClaimService.sol +1 -0
  337. package/contracts/product/IPolicyService.sol +23 -17
  338. package/contracts/product/IProductComponent.sol +1 -0
  339. package/contracts/product/IProductService.sol +1 -0
  340. package/contracts/product/PolicyService.sol +251 -134
  341. package/contracts/product/PolicyServiceManager.sol +2 -5
  342. package/contracts/product/PricingService.sol +5 -1
  343. package/contracts/product/PricingServiceManager.sol +2 -5
  344. package/contracts/product/Product.sol +27 -6
  345. package/contracts/product/ProductService.sol +7 -32
  346. package/contracts/product/ProductServiceManager.sol +2 -5
  347. package/contracts/registry/IRegistry.sol +26 -13
  348. package/contracts/registry/IRegistryService.sol +6 -6
  349. package/contracts/registry/Registry.sol +80 -82
  350. package/contracts/registry/RegistryAdmin.sol +34 -23
  351. package/contracts/registry/RegistryService.sol +4 -18
  352. package/contracts/registry/RegistryServiceManager.sol +2 -2
  353. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  354. package/contracts/registry/{ReleaseManager.sol → ReleaseRegistry.sol} +145 -178
  355. package/contracts/registry/ServiceAuthorizationV3.sol +5 -5
  356. package/contracts/registry/TokenRegistry.sol +2 -2
  357. package/contracts/shared/Component.sol +24 -37
  358. package/contracts/shared/ComponentService.sol +83 -21
  359. package/contracts/shared/ComponentServiceManager.sol +2 -2
  360. package/contracts/shared/IComponent.sol +4 -4
  361. package/contracts/shared/IComponentService.sol +15 -9
  362. package/contracts/shared/IInstanceLinkedComponent.sol +9 -3
  363. package/contracts/shared/IKeyValueStore.sol +1 -0
  364. package/contracts/shared/ILifecycle.sol +1 -2
  365. package/contracts/shared/IService.sol +1 -1
  366. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  367. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  368. package/contracts/shared/KeyValueStore.sol +6 -2
  369. package/contracts/shared/Lifecycle.sol +16 -69
  370. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  371. package/contracts/shared/NftOwnable.sol +2 -2
  372. package/contracts/shared/PolicyHolder.sol +2 -5
  373. package/contracts/shared/Service.sol +3 -4
  374. package/contracts/shared/TokenHandler.sol +100 -19
  375. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  376. package/contracts/staking/IStaking.sol +1 -2
  377. package/contracts/staking/IStakingService.sol +12 -5
  378. package/contracts/staking/StakeManagerLib.sol +0 -25
  379. package/contracts/staking/Staking.sol +21 -37
  380. package/contracts/staking/StakingLifecycle.sol +23 -0
  381. package/contracts/staking/StakingManager.sol +2 -6
  382. package/contracts/staking/StakingReader.sol +12 -16
  383. package/contracts/staking/StakingService.sol +8 -12
  384. package/contracts/staking/StakingServiceManager.sol +2 -2
  385. package/contracts/staking/StakingStore.sol +15 -23
  386. package/contracts/type/Amount.sol +12 -5
  387. package/contracts/type/Blocknumber.sol +7 -1
  388. package/contracts/type/ObjectType.sol +3 -7
  389. package/contracts/type/Referral.sol +1 -0
  390. package/contracts/type/Seconds.sol +13 -1
  391. package/contracts/type/Timestamp.sol +11 -1
  392. package/contracts/type/UFixed.sol +29 -10
  393. package/contracts/type/Version.sol +3 -1
  394. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  395. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  396. package/package.json +3 -3
  397. package/artifacts/contracts/authorization/InstanceAdmin.sol/InstanceAdmin.dbg.json +0 -4
  398. package/artifacts/contracts/authorization/InstanceAdmin.sol/InstanceAdmin.json +0 -1385
  399. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  400. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
  401. package/artifacts/contracts/instance/InstanceAdminNew.sol/InstanceAdminNew.dbg.json +0 -4
  402. package/artifacts/contracts/instance/InstanceAdminNew.sol/InstanceAdminNew.json +0 -1616
  403. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  404. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -181
  405. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  406. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1140
  407. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  408. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  409. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  410. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  411. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
  412. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  413. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  414. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  415. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  416. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  417. package/contracts/authorization/InstanceAdmin.sol +0 -108
  418. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  419. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -6,7 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
7
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
8
 
9
- import {Amount} from "../type/Amount.sol";
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
10
  import {IComponent} from "./IComponent.sol";
11
11
  import {IComponents} from "../instance/module/IComponents.sol";
12
12
  import {NftId, NftIdLib} from "../type/NftId.sol";
@@ -26,7 +26,6 @@ abstract contract Component is
26
26
  struct ComponentStorage {
27
27
  string _name; // unique (per instance) component name
28
28
  IERC20Metadata _token; // token for this component
29
- TokenHandler _tokenHandler;
30
29
  address _wallet;
31
30
  bool _isInterceptor;
32
31
  bytes _data;
@@ -40,6 +39,12 @@ abstract contract Component is
40
39
  _;
41
40
  }
42
41
 
42
+ modifier onlyNftOwner(NftId nftId) {
43
+ if(msg.sender != getRegistry().ownerOf(nftId)) {
44
+ revert ErrorNftOwnableNotOwner(msg.sender);
45
+ }
46
+ _;
47
+ }
43
48
 
44
49
  function _getComponentStorage() private pure returns (ComponentStorage storage $) {
45
50
  assembly {
@@ -78,7 +83,6 @@ abstract contract Component is
78
83
  ComponentStorage storage $ = _getComponentStorage();
79
84
  $._name = name;
80
85
  $._token = IERC20Metadata(token);
81
- $._tokenHandler = TokenHandler(address(0));
82
86
  $._wallet = address(this);
83
87
  $._isInterceptor = isInterceptor;
84
88
  $._data = componentData;
@@ -105,11 +109,11 @@ abstract contract Component is
105
109
  revert ErrorComponentWalletNotComponent();
106
110
  }
107
111
 
112
+ emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
113
+
108
114
  IERC20Metadata(token).approve(
109
115
  address(getTokenHandler()),
110
116
  spendingLimitAmount.toInt());
111
-
112
- emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
113
117
  }
114
118
 
115
119
  function setWallet(address newWallet)
@@ -120,34 +124,22 @@ abstract contract Component is
120
124
  {
121
125
  // checks
122
126
  address currentWallet = getWallet();
123
- IERC20Metadata token = getToken();
124
- uint256 currentBalance = token.balanceOf(currentWallet);
125
-
126
- if (currentBalance > 0) {
127
- if (currentWallet == address(this)) {
128
- // move tokens from component smart contract to external wallet
129
- } else {
130
- // move tokens from external wallet to component smart contract or another external wallet
131
- uint256 allowance = token.allowance(currentWallet, address(this));
132
- if (allowance < currentBalance) {
133
- revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
134
- }
135
- }
136
- }
127
+ uint256 currentBalance = getToken().balanceOf(currentWallet);
137
128
 
138
129
  // effects
139
130
  _setWallet(newWallet);
140
131
 
141
132
  // interactions
142
133
  if (currentBalance > 0) {
143
- // transfer tokens from current wallet to new wallet
134
+ // move tokens from old to new wallet
135
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
136
+
144
137
  if (currentWallet == address(this)) {
145
- // transferFrom requires self allowance too
146
- token.approve(address(this), currentBalance);
138
+ // transfer from the component requires an allowance
139
+ getTokenHandler().distributeTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
140
+ } else {
141
+ getTokenHandler().collectTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
147
142
  }
148
-
149
- SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
150
- emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
151
143
  }
152
144
  }
153
145
 
@@ -253,29 +245,24 @@ abstract contract Component is
253
245
  }
254
246
 
255
247
 
256
- /// @dev for component contracts that hold its own component information
257
- /// this function creates and sets a token hanlder for the components tokens
258
- function _createAndSetTokenHandler()
259
- internal
260
- {
261
- ComponentStorage storage $ = _getComponentStorage();
262
- $._tokenHandler = new TokenHandler(address($._token));
263
- }
264
-
265
-
266
248
  /// @dev depending on the source of the component information this function needs to be overwritten.
267
249
  /// eg for instance linked components that externally store this information with the instance store contract
268
250
  function _getComponentInfo() internal virtual view returns (IComponents.ComponentInfo memory info) {
269
251
  ComponentStorage storage $ = _getComponentStorage();
270
-
252
+
271
253
  return IComponents.ComponentInfo({
272
254
  name: $._name,
273
255
  productNftId: NftIdLib.zero(),
274
256
  token: $._token,
275
- tokenHandler: $._tokenHandler,
257
+ tokenHandler: TokenHandler(address(0)),
276
258
  wallet: $._wallet, // initial wallet address
277
259
  data: $._data // user specific component data
278
260
  });
279
261
  }
280
262
 
263
+ function _approveTokenHandler(uint256 amount) internal {
264
+ ComponentStorage storage $ = _getComponentStorage();
265
+ $._token.approve(address(getComponentInfo().tokenHandler), amount);
266
+ }
267
+
281
268
  }
@@ -4,30 +4,27 @@ pragma solidity ^0.8.20;
4
4
  import {Amount, AmountLib} from "../type/Amount.sol";
5
5
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
6
  import {Fee, FeeLib} from "../type/Fee.sol";
7
+ import {IComponents} from "../instance/module/IComponents.sol";
8
+ import {IComponentService} from "./IComponentService.sol";
9
+ import {IInstance} from "../instance/IInstance.sol";
7
10
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
11
+ import {InstanceReader} from "../instance/InstanceReader.sol";
12
+ import {InstanceStore} from "../instance/InstanceStore.sol";
13
+ import {IInstanceService} from "../instance/IInstanceService.sol";
14
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
15
+ import {IProductComponent} from "../product/IProductComponent.sol";
8
16
  import {IRegistry} from "../registry/IRegistry.sol";
9
17
  import {IRegistryService} from "../registry/IRegistryService.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IAccess} from "../instance/module/IAccess.sol";
18
+ import {KEEP_STATE} from "../type/StateId.sol";
12
19
  import {NftId} from "../type/NftId.sol";
13
20
  import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
14
21
  import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
15
- import {KEEP_STATE} from "../type/StateId.sol";
16
- import {IComponents} from "../instance/module/IComponents.sol";
17
- import {IComponentService} from "./IComponentService.sol";
18
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
19
- import {IInstanceService} from "../instance/IInstanceService.sol";
20
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
21
- import {IProductComponent} from "../product/IProductComponent.sol";
22
- import {InstanceReader} from "../instance/InstanceReader.sol";
23
- import {InstanceStore} from "../instance/InstanceStore.sol";
24
- import {TokenHandler} from "./TokenHandler.sol";
22
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
25
23
 
26
24
  contract ComponentService is
27
25
  ComponentVerifyingService,
28
26
  IComponentService
29
27
  {
30
-
31
28
  error ErrorComponentServiceAlreadyRegistered(address component);
32
29
  error ErrorComponentServiceNotComponent(address component);
33
30
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
@@ -94,6 +91,37 @@ contract ComponentService is
94
91
  // TODO implement
95
92
  function unlock() external virtual {}
96
93
 
94
+ function withdrawFees(Amount amount)
95
+ external
96
+ virtual
97
+ returns (Amount withdrawnAmount)
98
+ {
99
+ (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
100
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
101
+ address componentWallet = info.wallet;
102
+
103
+ // determine withdrawn amount
104
+ withdrawnAmount = amount;
105
+ if (withdrawnAmount.gte(AmountLib.max())) {
106
+ withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
107
+ } else if (withdrawnAmount.eqz()) {
108
+ revert ErrorComponentServiceWithdrawAmountIsZero();
109
+ } else {
110
+ Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
111
+ if (withdrawnAmount.gt(withdrawLimit)) {
112
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
113
+ }
114
+ }
115
+
116
+ // decrease fee counters by withdrawnAmount
117
+ _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
118
+
119
+ // transfer amount to component owner
120
+ address componentOwner = getRegistry().ownerOf(componentNftId);
121
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
122
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
123
+ }
124
+
97
125
 
98
126
  //-------- product ------------------------------------------------------//
99
127
 
@@ -112,7 +140,7 @@ contract ComponentService is
112
140
  contractAddress,
113
141
  PRODUCT(),
114
142
  PRODUCT_OWNER_ROLE());
115
-
143
+
116
144
  // create product info
117
145
  IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
118
146
  instanceStore.createProduct(productNftId, productInfo);
@@ -255,6 +283,36 @@ contract ComponentService is
255
283
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
256
284
  }
257
285
 
286
+ //-------- distributor -------------------------------------------------------//
287
+
288
+ function increaseDistributorBalance(
289
+ InstanceStore instanceStore,
290
+ NftId distributorNftId,
291
+ Amount amount,
292
+ Amount feeAmount
293
+ )
294
+ external
295
+ virtual
296
+ // TODO re-enable once role granting is stable and fixed
297
+ // restricted()
298
+ {
299
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
300
+ }
301
+
302
+ function decreaseDistributorBalance(
303
+ InstanceStore instanceStore,
304
+ NftId distributorNftId,
305
+ Amount amount,
306
+ Amount feeAmount
307
+ )
308
+ external
309
+ virtual
310
+ // TODO re-enable once role granting is stable and fixed
311
+ // restricted()
312
+ {
313
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
314
+ }
315
+
258
316
  //-------- oracle -------------------------------------------------------//
259
317
 
260
318
  function registerOracle()
@@ -453,21 +511,25 @@ contract ComponentService is
453
511
 
454
512
  component.linkToRegisteredNftId();
455
513
 
456
- // setup initial component authorization
457
- _instanceService.initializeAuthorization(
458
- instance.getNftId(),
459
- component);
460
-
461
514
  // save amended component info with instance
462
515
  instanceReader = instance.getInstanceReader();
463
516
  instanceStore = instance.getInstanceStore();
464
517
 
465
- IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
466
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
518
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
519
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
520
+ address(componentInfo.token),
521
+ address(instance.getInstanceAdmin().authority()));
522
+
467
523
  instanceStore.createComponent(
468
524
  component.getNftId(),
469
525
  componentInfo);
470
526
 
527
+ // setup initial component authorization
528
+ _instanceService.initializeAuthorization(
529
+ instance.getNftId(),
530
+ component);
531
+
532
+ // TODO add logging
471
533
  }
472
534
 
473
535
 
@@ -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
 
@@ -23,7 +23,6 @@ interface IComponent is
23
23
  error ErrorComponentNameLengthZero();
24
24
  error ErrorComponentWalletAddressZero();
25
25
  error ErrorComponentWalletAddressIsSameAsCurrent();
26
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
27
26
  error ErrorComponentWalletNotComponent();
28
27
 
29
28
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
@@ -35,10 +34,11 @@ interface IComponent is
35
34
  /// only component owner (nft holder) is authorizes to call this function
36
35
  function approveTokenHandler(Amount spendingLimitAmount) external;
37
36
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
37
+ /// @dev sets the wallet address for the component.
38
+ /// if the current wallet has tokens, these will be transferred.
40
39
  /// if the new wallet address is externally owned, an approval from the
41
- /// owner of the external wallet for the component to move all tokens must exist
40
+ /// owner of the external wallet to the tokenhandler of the component that
41
+ /// covers the current component balance must exist
42
42
  function setWallet(address walletAddress) external;
43
43
 
44
44
  /// @dev returns the name of this component
@@ -1,21 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
4
 
7
5
  import {Amount} from "../type/Amount.sol";
8
6
  import {Fee} from "../type/Fee.sol";
9
- import {IComponents} from "../instance/module/IComponents.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
7
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
8
  import {IService} from "../shared/IService.sol";
16
9
  import {NftId} from "../type/NftId.sol";
17
- import {ObjectType} from "../type/ObjectType.sol";
18
- import {TokenHandler} from "../shared/TokenHandler.sol";
19
10
  import {UFixed} from "../type/UFixed.sol";
20
11
 
21
12
  /// @dev component base class
@@ -27,7 +18,12 @@ interface IComponentService is
27
18
  error ErrorComponentServiceWalletAddressZero();
28
19
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
29
20
 
21
+ error ErrorComponentServiceWithdrawAmountIsZero();
22
+ error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
23
+ error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
24
+
30
25
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
26
+ event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
31
27
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
32
28
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
33
29
  event LogComponentServicePoolFeesUpdated(NftId poolNftId);
@@ -51,6 +47,11 @@ interface IComponentService is
51
47
  /// @dev unlocks the component associated with the caller
52
48
  function unlock() external;
53
49
 
50
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
51
+ /// @param withdrawAmount the amount to withdraw
52
+ /// @return withdrawnAmount the amount that was actually withdrawn
53
+ function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
54
+
54
55
  //-------- product ------------------------------------------------------//
55
56
 
56
57
  /// @dev registers the sending component as a product component
@@ -77,6 +78,10 @@ interface IComponentService is
77
78
  function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
78
79
  function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
79
80
 
81
+ //-------- distributor --------------------------------------------------//
82
+ function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
+ function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
+
80
85
  //-------- oracle -------------------------------------------------------//
81
86
 
82
87
  /// @dev registers the sending component as an oracle component
@@ -99,4 +104,5 @@ interface IComponentService is
99
104
  //-------- bundle -------------------------------------------------------//
100
105
  function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
101
106
  function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
107
+
102
108
  }
@@ -4,6 +4,7 @@ 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";
8
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
9
10
  import {IComponents} from "../instance/module/IComponents.sol";
@@ -37,14 +38,19 @@ interface IInstanceLinkedComponent is
37
38
  /// only component owner (nft holder) is authorizes to call this function
38
39
  function unlock() external;
39
40
 
41
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
42
+ /// @param amount the amount to withdraw
43
+ /// @return withdrawnAmount the amount that was actually withdrawn
44
+ function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
45
+
40
46
  /// @dev defines the instance to which this component is linked to
41
47
  function getInstance() external view returns (IInstance instance);
42
48
 
49
+ /// @dev returns the initial component authorization specification.
50
+ function getAuthorization() external view returns (IAuthorization authorization);
51
+
43
52
  /// @dev defines the product to which this component is linked to
44
53
  /// this is only relevant for pool and distribution components
45
54
  function getProductNftId() external view returns (NftId productNftId);
46
55
 
47
- /// @dev returns the initial component authorization specification.
48
- function getAuthorization() external view returns (IAuthorization authorization);
49
-
50
56
  }
@@ -13,6 +13,7 @@ interface IKeyValueStore is ILifecycle {
13
13
 
14
14
  error ErrorKeyValueStoreTypeUndefined(ObjectType objectType);
15
15
  error ErrorKeyValueStoreAlreadyCreated(Key32 key, ObjectType objectType);
16
+ error ErrorKeyValueStoreNoLifecycle(ObjectType objectType);
16
17
  error ErrorKeyValueStoreStateZero(Key32 key);
17
18
  error ErrorKeyValueStoreNotExisting(Key32 key);
18
19
 
@@ -1,13 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../type/NftId.sol";
5
4
  import {ObjectType} from "../type/ObjectType.sol";
6
5
  import {StateId} from "../type/StateId.sol";
7
6
 
8
7
  interface ILifecycle {
9
8
 
10
- error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
9
+ error ErrorNoLifecycle(ObjectType objectType);
11
10
  error ErrorInvalidStateTransition(
12
11
  ObjectType objectType,
13
12
  StateId fromStateId,
@@ -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
 
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
6
6
 
7
- contract ERC165 is
7
+ contract InitializableERC165 is
8
8
  Initializable,
9
9
  IERC165
10
10
  {
@@ -6,6 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
7
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
8
 
9
+ import {Amount} from "../type/Amount.sol";
9
10
  import {Component} from "./Component.sol";
10
11
  import {IComponentService} from "./IComponentService.sol";
11
12
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
@@ -36,6 +37,7 @@ abstract contract InstanceLinkedComponent is
36
37
  IInstance _instance; // instance for this component
37
38
  InstanceReader _instanceReader; // instance reader for this component
38
39
  IAuthorization _initialAuthorization;
40
+ IComponentService _componentService;
39
41
  }
40
42
 
41
43
  function lock() external onlyOwner {
@@ -58,6 +60,17 @@ abstract contract InstanceLinkedComponent is
58
60
  return _getInstanceLinkedComponentStorage()._initialAuthorization;
59
61
  }
60
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);
72
+ }
73
+
61
74
  function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
62
75
  assembly {
63
76
  $.slot := INSTANCE_LINKED_COMPONENT_LOCATION_V1
@@ -105,6 +118,7 @@ abstract contract InstanceLinkedComponent is
105
118
  // set component state
106
119
  $._instanceReader = $._instance.getInstanceReader();
107
120
  $._initialAuthorization = authorization;
121
+ $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
108
122
 
109
123
  registerInterface(type(IAccessManaged).interfaceId);
110
124
  registerInterface(type(IInstanceLinkedComponent).interfaceId);
@@ -141,6 +155,13 @@ abstract contract InstanceLinkedComponent is
141
155
  return _getInstanceLinkedComponentStorage()._instanceReader;
142
156
  }
143
157
 
158
+ function _withdrawFees(Amount amount)
159
+ internal
160
+ returns (Amount withdrawnAmount)
161
+ {
162
+ return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
163
+ }
164
+
144
165
 
145
166
  /// @dev returns the service address for the specified domain
146
167
  /// gets address via lookup from registry using the major version form the linked instance
@@ -11,7 +11,7 @@ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
11
11
  import {Lifecycle} from "./Lifecycle.sol";
12
12
  import {IKeyValueStore} from "./IKeyValueStore.sol";
13
13
 
14
- contract KeyValueStore is
14
+ abstract contract KeyValueStore is
15
15
  Lifecycle,
16
16
  IKeyValueStore
17
17
  {
@@ -34,8 +34,12 @@ contract KeyValueStore is
34
34
  revert ErrorKeyValueStoreAlreadyCreated(key32, objectType);
35
35
  }
36
36
 
37
+ if(!hasLifecycle(objectType)) {
38
+ revert ErrorKeyValueStoreNoLifecycle(objectType);
39
+ }
40
+
37
41
  Blocknumber blocknumber = blockBlocknumber();
38
- StateId initialState = hasLifecycle(objectType) ? getInitialState(objectType) : ACTIVE();
42
+ StateId initialState = getInitialState(objectType);
39
43
 
40
44
  // set metadata
41
45
  metadata.objectType = objectType;
@@ -1,15 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
-
6
- import {NftId} from "../type/NftId.sol";
7
- import {ObjectType, COMPONENT, BUNDLE, POLICY, REQUEST, RISK, CLAIM, PAYOUT} from "../type/ObjectType.sol";
8
- import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED, EXPECTED, PAID, FULFILLED, FAILED, CANCELLED} from "../type/StateId.sol";
4
+ import {ObjectType} from "../type/ObjectType.sol";
5
+ import {StateId, zeroStateId} from "../type/StateId.sol";
9
6
  import {ILifecycle} from "./ILifecycle.sol";
10
7
 
11
- contract Lifecycle is
12
- Initializable,
8
+ abstract contract Lifecycle is
13
9
  ILifecycle
14
10
  {
15
11
  mapping(ObjectType objectType => StateId initialState)
@@ -18,16 +14,17 @@ contract Lifecycle is
18
14
  mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
19
15
  private _isValidTransition;
20
16
 
21
- function initializeLifecycle()
22
- public
23
- onlyInitializing
24
- {
25
- _setupBundleLifecycle();
26
- _setupComponentLifecycle();
27
- _setupPolicyLifecycle();
28
- _setupClaimAndPayoutLifecycle();
29
- _setupRiskLifecycle();
30
- _setupRequestLifecycle();
17
+ /// @dev child class must implement and CALL setup func at deployment/initializaton time
18
+ function _setupLifecycle() internal virtual;
19
+
20
+ function setInitialState(ObjectType ttype, StateId state) internal virtual {
21
+ assert(_initialState[ttype] == zeroStateId());
22
+ _initialState[ttype] = state;
23
+ }
24
+
25
+ function setStateTransition(ObjectType ttype, StateId oldState, StateId newState) internal virtual {
26
+ assert(_isValidTransition[ttype][oldState][newState] == false);
27
+ _isValidTransition[ttype][oldState][newState] = true;
31
28
  }
32
29
 
33
30
  function hasLifecycle(
@@ -59,9 +56,9 @@ contract Lifecycle is
59
56
  public
60
57
  view
61
58
  {
62
- // return if no life cycle support
59
+ // revert if no life cycle support
63
60
  if (_initialState[objectType].eqz()) {
64
- return;
61
+ revert ErrorNoLifecycle(objectType);
65
62
  }
66
63
 
67
64
  // enforce valid state transition
@@ -77,54 +74,4 @@ contract Lifecycle is
77
74
  ) public view returns (bool) {
78
75
  return _isValidTransition[objectType][fromId][toId];
79
76
  }
80
-
81
- function _setupComponentLifecycle() internal {
82
- _initialState[COMPONENT()] = ACTIVE();
83
- _isValidTransition[COMPONENT()][ACTIVE()][PAUSED()] = true;
84
- _isValidTransition[COMPONENT()][PAUSED()][ACTIVE()] = true;
85
- _isValidTransition[COMPONENT()][PAUSED()][ARCHIVED()] = true;
86
- }
87
-
88
- function _setupBundleLifecycle() internal {
89
- _initialState[BUNDLE()] = ACTIVE();
90
- _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
91
- _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
92
- _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
93
- _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
94
- }
95
-
96
- function _setupPolicyLifecycle() internal {
97
- _initialState[POLICY()] = APPLIED();
98
- _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
99
- _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
100
- _isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
101
- _isValidTransition[POLICY()][APPLIED()][ACTIVE()] = true;
102
- _isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
103
- _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
104
- }
105
-
106
- function _setupClaimAndPayoutLifecycle() internal {
107
- _initialState[CLAIM()] = SUBMITTED();
108
- _isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
109
- _isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
110
- _isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
111
-
112
- _initialState[PAYOUT()] = EXPECTED();
113
- _isValidTransition[PAYOUT()][EXPECTED()][PAID()] = true;
114
- }
115
-
116
- function _setupRiskLifecycle() internal {
117
- _initialState[RISK()] = ACTIVE();
118
- _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
119
- _isValidTransition[RISK()][PAUSED()][ACTIVE()] = true;
120
- _isValidTransition[RISK()][PAUSED()][ARCHIVED()] = true;
121
- }
122
-
123
- function _setupRequestLifecycle() internal {
124
- _initialState[REQUEST()] = ACTIVE();
125
- _isValidTransition[REQUEST()][ACTIVE()][FULFILLED()] = true;
126
- _isValidTransition[REQUEST()][ACTIVE()][FAILED()] = true;
127
- _isValidTransition[REQUEST()][FAILED()][FULFILLED()] = true;
128
- _isValidTransition[REQUEST()][ACTIVE()][CANCELLED()] = true;
129
- }
130
77
  }
@@ -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);