@etherisc/gif-next 0.0.2-b4fc06b-491 → 0.0.2-b643f7e-850

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 (216) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +139 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +149 -15
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +101 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +181 -16
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +157 -56
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  40. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  41. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
  43. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  44. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +74 -3
  45. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1369 -22
  48. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +6 -1
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +182 -155
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -47
  56. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +177 -38
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +250 -35
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +95 -15
  64. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
  66. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +59 -0
  68. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
  84. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  86. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  88. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +167 -0
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +40 -31
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1049 -0
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1147 -0
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +23 -105
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +70 -145
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +61 -29
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +44 -35
  114. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  115. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  116. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  118. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  125. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  126. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  127. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  129. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  131. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  132. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  133. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  134. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  135. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  136. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  137. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  139. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  141. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  145. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  146. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  147. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  151. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  153. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  154. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  160. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  162. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  167. package/contracts/components/BaseComponent.sol +57 -11
  168. package/contracts/components/Distribution.sol +15 -18
  169. package/contracts/components/IBaseComponent.sol +7 -0
  170. package/contracts/components/IDistributionComponent.sol +1 -0
  171. package/contracts/components/IPoolComponent.sol +5 -1
  172. package/contracts/components/Pool.sol +36 -28
  173. package/contracts/components/Product.sol +34 -42
  174. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  175. package/contracts/instance/BundleManager.sol +129 -0
  176. package/contracts/instance/Cloneable.sol +46 -0
  177. package/contracts/instance/IInstance.sol +35 -7
  178. package/contracts/instance/IInstanceBase.sol +26 -0
  179. package/contracts/instance/IInstanceService.sol +5 -3
  180. package/contracts/instance/Instance.sol +43 -32
  181. package/contracts/instance/InstanceAccessManager.sol +6 -6
  182. package/contracts/instance/InstanceBase.sol +41 -0
  183. package/contracts/instance/InstanceReader.sol +26 -1
  184. package/contracts/instance/InstanceService.sol +112 -17
  185. package/contracts/instance/InstanceServiceManager.sol +6 -5
  186. package/contracts/instance/ObjectManager.sol +95 -0
  187. package/contracts/instance/base/ComponentServiceBase.sol +91 -6
  188. package/contracts/instance/module/IBundle.sol +1 -0
  189. package/contracts/instance/module/ISetup.sol +3 -0
  190. package/contracts/instance/service/DistributionService.sol +88 -0
  191. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  192. package/contracts/instance/service/IPoolService.sol +16 -2
  193. package/contracts/instance/service/IProductService.sol +6 -3
  194. package/contracts/instance/service/PoolService.sol +287 -0
  195. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  196. package/contracts/instance/service/ProductService.sol +570 -0
  197. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  198. package/contracts/registry/IRegistry.sol +8 -17
  199. package/contracts/registry/IRegistryService.sol +27 -12
  200. package/contracts/registry/Registry.sol +20 -40
  201. package/contracts/registry/RegistryService.sol +30 -116
  202. package/contracts/registry/RegistryServiceManager.sol +21 -5
  203. package/contracts/registry/TokenRegistry.sol +111 -0
  204. package/contracts/shared/ERC165.sol +6 -2
  205. package/contracts/shared/NftOwnable.sol +2 -4
  206. package/contracts/shared/Registerable.sol +1 -0
  207. package/contracts/shared/Service.sol +1 -0
  208. package/contracts/types/NftIdSet.sol +26 -24
  209. package/contracts/types/RoleId.sol +8 -0
  210. package/contracts/types/StateId.sol +4 -0
  211. package/package.json +1 -1
  212. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  213. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  214. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  215. package/contracts/instance/AccessManagedSimple.sol +0 -122
  216. package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -2,9 +2,32 @@
2
2
  "_format": "hh-sol-artifact-1",
3
3
  "contractName": "LibNftIdSet",
4
4
  "sourceName": "contracts/types/NftIdSet.sol",
5
- "abi": [],
6
- "bytecode": "0x61048d61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80632bfdd6b91461007157806331a97de214610099578063a3082a18146100ac578063a73d5756146100cc578063d2fa1e36146100ec578063e797d8991461010c575b600080fd5b61008461007f366004610393565b610137565b60405190151581526020015b60405180910390f35b6100846100a73660046103cf565b541590565b8180156100b857600080fd5b506100846100c7366004610393565b61015b565b8180156100d857600080fd5b506100846100e7366004610393565b6101da565b6100fe6100fa3660046103cf565b5490565b604051908152602001610090565b61011f61011a3660046103e8565b61034b565b6040516001600160601b039091168152602001610090565b6001600160601b038116600090815260018301602052604090205415155b92915050565b6001600160601b038116600090815260018301602052604081205481036101d2575081546001818101845560008481526020808220600285040180546001600160601b03808816600c978716979097026101000a878102910219909116179055855493825282860190526040902091909155610155565b506000610155565b6001600160601b0381166000908152600183016020526040812054801561034157600061020860018361040a565b855490915060009061021c9060019061040a565b90508181146102c657600086600001828154811061023c5761023c61042b565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b031690508087600001848154811061027d5761027d61042b565b60009182526020808320600283040180546001600160601b03958616600c6001958616026101000a90810290870219909116179055939092168152908801909152604090208390555b85548690806102d7576102d7610441565b6001900381819060005260206000209060029182820401919006600c026101000a8154906001600160601b0302191690559055856001016000866001600160601b03166001600160601b031681526020019081526020016000206000905560019350505050610155565b6000915050610155565b60008260000182815481106103625761036261042b565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b0316905092915050565b600080604083850312156103a657600080fd5b8235915060208301356001600160601b03811681146103c457600080fd5b809150509250929050565b6000602082840312156103e157600080fd5b5035919050565b600080604083850312156103fb57600080fd5b50508035926020909101359150565b8181038181111561015557634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220391bcca3e0f726ed4a106be56ba7b8ff7e86a89fb2d14b665b751d124abd5b1764736f6c63430008140033",
7
- "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80632bfdd6b91461007157806331a97de214610099578063a3082a18146100ac578063a73d5756146100cc578063d2fa1e36146100ec578063e797d8991461010c575b600080fd5b61008461007f366004610393565b610137565b60405190151581526020015b60405180910390f35b6100846100a73660046103cf565b541590565b8180156100b857600080fd5b506100846100c7366004610393565b61015b565b8180156100d857600080fd5b506100846100e7366004610393565b6101da565b6100fe6100fa3660046103cf565b5490565b604051908152602001610090565b61011f61011a3660046103e8565b61034b565b6040516001600160601b039091168152602001610090565b6001600160601b038116600090815260018301602052604090205415155b92915050565b6001600160601b038116600090815260018301602052604081205481036101d2575081546001818101845560008481526020808220600285040180546001600160601b03808816600c978716979097026101000a878102910219909116179055855493825282860190526040902091909155610155565b506000610155565b6001600160601b0381166000908152600183016020526040812054801561034157600061020860018361040a565b855490915060009061021c9060019061040a565b90508181146102c657600086600001828154811061023c5761023c61042b565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b031690508087600001848154811061027d5761027d61042b565b60009182526020808320600283040180546001600160601b03958616600c6001958616026101000a90810290870219909116179055939092168152908801909152604090208390555b85548690806102d7576102d7610441565b6001900381819060005260206000209060029182820401919006600c026101000a8154906001600160601b0302191690559055856001016000866001600160601b03166001600160601b031681526020019081526020016000206000905560019350505050610155565b6000915050610155565b60008260000182815481106103625761036261042b565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b0316905092915050565b600080604083850312156103a657600080fd5b8235915060208301356001600160601b03811681146103c457600080fd5b809150509250929050565b6000602082840312156103e157600080fd5b5035919050565b600080604083850312156103fb57600080fd5b50508035926020909101359150565b8181038181111561015557634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220391bcca3e0f726ed4a106be56ba7b8ff7e86a89fb2d14b665b751d124abd5b1764736f6c63430008140033",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "NftId",
10
+ "name": "nftId",
11
+ "type": "uint96"
12
+ }
13
+ ],
14
+ "name": "ErrorNftIdSetAlreadyAdded",
15
+ "type": "error"
16
+ },
17
+ {
18
+ "inputs": [
19
+ {
20
+ "internalType": "NftId",
21
+ "name": "nftId",
22
+ "type": "uint96"
23
+ }
24
+ ],
25
+ "name": "ErrorNftIdSetNotInSet",
26
+ "type": "error"
27
+ }
28
+ ],
29
+ "bytecode": "0x6104c261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80632bfdd6b91461007157806331a97de2146100995780638b6233dd146100ac578063a3082a18146100cc578063a73d5756146100ee578063e797d8991461010e575b600080fd5b61008461007f3660046103c8565b610139565b60405190151581526020015b60405180910390f35b6100846100a7366004610404565b541590565b6100be6100ba366004610404565b5490565b604051908152602001610090565b8180156100d857600080fd5b506100ec6100e73660046103c8565b61015d565b005b8180156100fa57600080fd5b506100ec6101093660046103c8565b6101f8565b61012161011c36600461041d565b610380565b6040516001600160601b039091168152602001610090565b6001600160601b038116600090815260018301602052604090205415155b92915050565b6001600160601b0381166000908152600183016020526040902054156101a6576040516301eae2c560e61b81526001600160601b03821660048201526024015b60405180910390fd5b81546001818101845560008481526020808220600285040180546001600160601b03968716600c968616969096026101000a868102970219169590951790945584549281529301909152604090912055565b6001600160601b03811660009081526001830160205260408120549081900361023f5760405163482084f160e01b81526001600160601b038316600482015260240161019d565b600061024c60018361043f565b84549091506000906102609060019061043f565b905081811461030a57600085600001828154811061028057610280610460565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b03169050808660000184815481106102c1576102c1610460565b60009182526020808320600283040180546001600160601b03958616600c6001958616026101000a90810290870219909116179055939092168152908701909152604090208390555b845485908061031b5761031b610476565b6001900381819060005260206000209060029182820401919006600c026101000a8154906001600160601b0302191690559055846001016000856001600160601b03166001600160601b03168152602001908152602001600020600090555050505050565b600082600001828154811061039757610397610460565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b0316905092915050565b600080604083850312156103db57600080fd5b8235915060208301356001600160601b03811681146103f957600080fd5b809150509250929050565b60006020828403121561041657600080fd5b5035919050565b6000806040838503121561043057600080fd5b50508035926020909101359150565b8181038181111561015757634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a59021e4afbe697b487a178e328b0427efd3acf42ac7b39308d6f8fbbe16b6d664736f6c63430008140033",
30
+ "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c80632bfdd6b91461007157806331a97de2146100995780638b6233dd146100ac578063a3082a18146100cc578063a73d5756146100ee578063e797d8991461010e575b600080fd5b61008461007f3660046103c8565b610139565b60405190151581526020015b60405180910390f35b6100846100a7366004610404565b541590565b6100be6100ba366004610404565b5490565b604051908152602001610090565b8180156100d857600080fd5b506100ec6100e73660046103c8565b61015d565b005b8180156100fa57600080fd5b506100ec6101093660046103c8565b6101f8565b61012161011c36600461041d565b610380565b6040516001600160601b039091168152602001610090565b6001600160601b038116600090815260018301602052604090205415155b92915050565b6001600160601b0381166000908152600183016020526040902054156101a6576040516301eae2c560e61b81526001600160601b03821660048201526024015b60405180910390fd5b81546001818101845560008481526020808220600285040180546001600160601b03968716600c968616969096026101000a868102970219169590951790945584549281529301909152604090912055565b6001600160601b03811660009081526001830160205260408120549081900361023f5760405163482084f160e01b81526001600160601b038316600482015260240161019d565b600061024c60018361043f565b84549091506000906102609060019061043f565b905081811461030a57600085600001828154811061028057610280610460565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b03169050808660000184815481106102c1576102c1610460565b60009182526020808320600283040180546001600160601b03958616600c6001958616026101000a90810290870219909116179055939092168152908701909152604090208390555b845485908061031b5761031b610476565b6001900381819060005260206000209060029182820401919006600c026101000a8154906001600160601b0302191690559055846001016000856001600160601b03166001600160601b03168152602001908152602001600020600090555050505050565b600082600001828154811061039757610397610460565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b0316905092915050565b600080604083850312156103db57600080fd5b8235915060208301356001600160601b03811681146103f957600080fd5b809150509250929050565b60006020828403121561041657600080fd5b5035919050565b6000806040838503121561043057600080fd5b50508035926020909101359150565b8181038181111561015757634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a59021e4afbe697b487a178e328b0427efd3acf42ac7b39308d6f8fbbe16b6d664736f6c63430008140033",
8
31
  "linkReferences": {},
9
32
  "deployedLinkReferences": {}
10
33
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -131,8 +131,8 @@
131
131
  "type": "function"
132
132
  }
133
133
  ],
134
- "bytecode": "0x6102a461003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100875760003560e01c806368aebf7b1161006557806368aebf7b14610119578063a42e52e914610127578063bc1b392d14610144578063f37f38f01461014b57600080fd5b8063057182b41461008c578063545ce21c146100bd57806367cb8ec1146100e7575b600080fd5b6100a861009a36600461020b565b67ffffffffffffffff161590565b60405190151581526020015b60405180910390f35b6100ce6100cb36600461020b565b90565b60405167ffffffffffffffff90911681526020016100b4565b6101066100f536600461020b565b60081b68ffffffffffffffff001690565b60405160ff1990911681526020016100b4565b6100ce6100cb36600461023c565b6100a861013536600461020b565b67ffffffffffffffff16151590565b60006100ce565b61015e61015936600461020b565b61016c565b6040519081526020016100b4565b600073__$c8f743efd2b4f0c9300f2558c784479d3e$__63f48016ce6014600885901b68ffffffffffffffff00166040516001600160e01b031960e085901b16815260ff909216600483015260ff19166024820152604401602060405180830381865af41580156101e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102059190610255565b92915050565b60006020828403121561021d57600080fd5b813567ffffffffffffffff8116811461023557600080fd5b9392505050565b60006020828403121561024e57600080fd5b5035919050565b60006020828403121561026757600080fd5b505191905056fea2646970667358221220c2f9ad21f7470fe03633259935663aa90115553713bf08b8aa003f63582c958364736f6c63430008140033",
135
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100875760003560e01c806368aebf7b1161006557806368aebf7b14610119578063a42e52e914610127578063bc1b392d14610144578063f37f38f01461014b57600080fd5b8063057182b41461008c578063545ce21c146100bd57806367cb8ec1146100e7575b600080fd5b6100a861009a36600461020b565b67ffffffffffffffff161590565b60405190151581526020015b60405180910390f35b6100ce6100cb36600461020b565b90565b60405167ffffffffffffffff90911681526020016100b4565b6101066100f536600461020b565b60081b68ffffffffffffffff001690565b60405160ff1990911681526020016100b4565b6100ce6100cb36600461023c565b6100a861013536600461020b565b67ffffffffffffffff16151590565b60006100ce565b61015e61015936600461020b565b61016c565b6040519081526020016100b4565b600073__$c8f743efd2b4f0c9300f2558c784479d3e$__63f48016ce6014600885901b68ffffffffffffffff00166040516001600160e01b031960e085901b16815260ff909216600483015260ff19166024820152604401602060405180830381865af41580156101e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102059190610255565b92915050565b60006020828403121561021d57600080fd5b813567ffffffffffffffff8116811461023557600080fd5b9392505050565b60006020828403121561024e57600080fd5b5035919050565b60006020828403121561026757600080fd5b505191905056fea2646970667358221220c2f9ad21f7470fe03633259935663aa90115553713bf08b8aa003f63582c958364736f6c63430008140033",
134
+ "bytecode": "0x6102a461003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100875760003560e01c806368aebf7b1161006557806368aebf7b14610119578063a42e52e914610127578063bc1b392d14610144578063f37f38f01461014b57600080fd5b8063057182b41461008c578063545ce21c146100bd57806367cb8ec1146100e7575b600080fd5b6100a861009a36600461020b565b67ffffffffffffffff161590565b60405190151581526020015b60405180910390f35b6100ce6100cb36600461020b565b90565b60405167ffffffffffffffff90911681526020016100b4565b6101066100f536600461020b565b60081b68ffffffffffffffff001690565b60405160ff1990911681526020016100b4565b6100ce6100cb36600461023c565b6100a861013536600461020b565b67ffffffffffffffff16151590565b60006100ce565b61015e61015936600461020b565b61016c565b6040519081526020016100b4565b600073__$c8f743efd2b4f0c9300f2558c784479d3e$__63f48016ce6014600885901b68ffffffffffffffff00166040516001600160e01b031960e085901b16815260ff909216600483015260ff19166024820152604401602060405180830381865af41580156101e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102059190610255565b92915050565b60006020828403121561021d57600080fd5b813567ffffffffffffffff8116811461023557600080fd5b9392505050565b60006020828403121561024e57600080fd5b5035919050565b60006020828403121561026757600080fd5b505191905056fea26469706673582212201bbe398c7ebcc3086285b26f4788921744a5d1e91626675009c8c003c20257c664736f6c63430008140033",
135
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100875760003560e01c806368aebf7b1161006557806368aebf7b14610119578063a42e52e914610127578063bc1b392d14610144578063f37f38f01461014b57600080fd5b8063057182b41461008c578063545ce21c146100bd57806367cb8ec1146100e7575b600080fd5b6100a861009a36600461020b565b67ffffffffffffffff161590565b60405190151581526020015b60405180910390f35b6100ce6100cb36600461020b565b90565b60405167ffffffffffffffff90911681526020016100b4565b6101066100f536600461020b565b60081b68ffffffffffffffff001690565b60405160ff1990911681526020016100b4565b6100ce6100cb36600461023c565b6100a861013536600461020b565b67ffffffffffffffff16151590565b60006100ce565b61015e61015936600461020b565b61016c565b6040519081526020016100b4565b600073__$c8f743efd2b4f0c9300f2558c784479d3e$__63f48016ce6014600885901b68ffffffffffffffff00166040516001600160e01b031960e085901b16815260ff909216600483015260ff19166024820152604401602060405180830381865af41580156101e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102059190610255565b92915050565b60006020828403121561021d57600080fd5b813567ffffffffffffffff8116811461023557600080fd5b9392505050565b60006020828403121561024e57600080fd5b5035919050565b60006020828403121561026757600080fd5b505191905056fea26469706673582212201bbe398c7ebcc3086285b26f4788921744a5d1e91626675009c8c003c20257c664736f6c63430008140033",
136
136
  "linkReferences": {
137
137
  "contracts/types/Key32.sol": {
138
138
  "Key32Lib": [
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -85,8 +85,8 @@
85
85
  "type": "function"
86
86
  }
87
87
  ],
88
- "bytecode": "0x61018c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80632c2f8a671461005b5780636f91962014610083578063ac43d83414610098578063b2466acf146100c9575b600080fd5b61006e610069366004610108565b6100df565b60405190151581526020015b60405180910390f35b61006e61009136600461013b565b60ff161590565b6100ac6100a636600461013b565b60ff1690565b6040516bffffffffffffffffffffffff909116815260200161007a565b61006e6100d736600461013b565b60ff16151590565b600060ff808416908316145b9392505050565b803560ff8116811461010357600080fd5b919050565b6000806040838503121561011b57600080fd5b610124836100f2565b9150610132602084016100f2565b90509250929050565b60006020828403121561014d57600080fd5b6100eb826100f256fea264697066735822122087c0a1882ea3728cc059e9c0ca0fe6e5855441782f34522a7b4a441b773012a964736f6c63430008140033",
89
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80632c2f8a671461005b5780636f91962014610083578063ac43d83414610098578063b2466acf146100c9575b600080fd5b61006e610069366004610108565b6100df565b60405190151581526020015b60405180910390f35b61006e61009136600461013b565b60ff161590565b6100ac6100a636600461013b565b60ff1690565b6040516bffffffffffffffffffffffff909116815260200161007a565b61006e6100d736600461013b565b60ff16151590565b600060ff808416908316145b9392505050565b803560ff8116811461010357600080fd5b919050565b6000806040838503121561011b57600080fd5b610124836100f2565b9150610132602084016100f2565b90509250929050565b60006020828403121561014d57600080fd5b6100eb826100f256fea264697066735822122087c0a1882ea3728cc059e9c0ca0fe6e5855441782f34522a7b4a441b773012a964736f6c63430008140033",
88
+ "bytecode": "0x61018c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80632c2f8a671461005b5780636f91962014610083578063ac43d83414610098578063b2466acf146100c9575b600080fd5b61006e610069366004610108565b6100df565b60405190151581526020015b60405180910390f35b61006e61009136600461013b565b60ff161590565b6100ac6100a636600461013b565b60ff1690565b6040516bffffffffffffffffffffffff909116815260200161007a565b61006e6100d736600461013b565b60ff16151590565b600060ff808416908316145b9392505050565b803560ff8116811461010357600080fd5b919050565b6000806040838503121561011b57600080fd5b610124836100f2565b9150610132602084016100f2565b90509250929050565b60006020828403121561014d57600080fd5b6100eb826100f256fea26469706673582212204cd4e6f2bb672e5640aaa5a4af92ef3714ca5bf00495f7a3790a03dec2aaa3fc64736f6c63430008140033",
89
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80632c2f8a671461005b5780636f91962014610083578063ac43d83414610098578063b2466acf146100c9575b600080fd5b61006e610069366004610108565b6100df565b60405190151581526020015b60405180910390f35b61006e61009136600461013b565b60ff161590565b6100ac6100a636600461013b565b60ff1690565b6040516bffffffffffffffffffffffff909116815260200161007a565b61006e6100d736600461013b565b60ff16151590565b600060ff808416908316145b9392505050565b803560ff8116811461010357600080fd5b919050565b6000806040838503121561011b57600080fd5b610124836100f2565b9150610132602084016100f2565b90509250929050565b60006020828403121561014d57600080fd5b6100eb826100f256fea26469706673582212204cd4e6f2bb672e5640aaa5a4af92ef3714ca5bf00495f7a3790a03dec2aaa3fc64736f6c63430008140033",
90
90
  "linkReferences": {},
91
91
  "deployedLinkReferences": {}
92
92
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/1ecb24600495a144208862f75000fc22.json"
4
4
  }
@@ -1,23 +1,22 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IBaseComponent} from "./IBaseComponent.sol";
5
+ import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
4
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
-
6
- import {Registerable} from "../shared/Registerable.sol";
7
-
8
- import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IInstance} from "../instance/IInstance.sol";
10
-
11
7
  import {IInstance} from "../instance/IInstance.sol";
12
- import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
13
- import {IBaseComponent} from "./IBaseComponent.sol";
14
- import {NftId} from "../types/NftId.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
15
10
  import {ObjectType} from "../types/ObjectType.sol";
11
+ import {Registerable} from "../shared/Registerable.sol";
12
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
16
13
 
17
14
  abstract contract BaseComponent is
18
15
  Registerable,
19
16
  IBaseComponent
20
17
  {
18
+ using NftIdLib for NftId;
19
+
21
20
  IComponentOwnerService internal _componentOwnerService;
22
21
 
23
22
  address internal _deployer;
@@ -29,7 +28,6 @@ abstract contract BaseComponent is
29
28
  constructor(
30
29
  address registry,
31
30
  NftId instanceNftId,
32
- NftId productNftId,
33
31
  address token,
34
32
  ObjectType componentType,
35
33
  bool isInterceptor,
@@ -49,16 +47,17 @@ abstract contract BaseComponent is
49
47
  _componentOwnerService = _instance.getComponentOwnerService();
50
48
  _wallet = address(this);
51
49
  _token = IERC20Metadata(token);
52
- _productNftId = productNftId;
53
50
 
54
51
  _registerInterface(type(IBaseComponent).interfaceId);
55
52
  }
56
53
 
57
54
  // from component contract
55
+ // TODO consider to remove/replace with access manager contract locking
58
56
  function lock() external onlyOwner override {
59
57
  _componentOwnerService.lock(this);
60
58
  }
61
59
 
60
+ // TODO consider to remove/replace with access manager contract locking
62
61
  function unlock() external onlyOwner override {
63
62
  _componentOwnerService.unlock(this);
64
63
  }
@@ -72,6 +71,48 @@ abstract contract BaseComponent is
72
71
  return _wallet;
73
72
  }
74
73
 
74
+ /// @dev Sets the wallet address for the component.
75
+ /// if the current wallet has tokens, these will be transferred.
76
+ /// if the new wallet address is externally owned, an approval from the
77
+ /// owner of the external wallet for the component to move all tokens must exist.
78
+ function setWallet(address newWallet) external override onlyOwner {
79
+ address currentWallet = _wallet;
80
+ uint256 currentBalance = _token.balanceOf(currentWallet);
81
+
82
+ // checks
83
+ if (newWallet == currentWallet) {
84
+ revert ErrorBaseComponentWalletAddressIsSameAsCurrent(newWallet);
85
+ }
86
+
87
+ if (currentBalance > 0) {
88
+ if (currentWallet == address(this)) {
89
+ // move tokens from component smart contract to external wallet
90
+ } else {
91
+ // move tokens from external wallet to component smart contract or another external wallet
92
+ uint256 allowance = _token.allowance(currentWallet, address(this));
93
+ if (allowance < currentBalance) {
94
+ revert ErrorBaseComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
95
+ }
96
+ }
97
+ }
98
+
99
+ // effects
100
+ _wallet = newWallet;
101
+ emit LogBaseComponentWalletAddressChanged(newWallet);
102
+
103
+ // interactions
104
+ if (currentBalance > 0) {
105
+ // transfer tokens from current wallet to new wallet
106
+ if (currentWallet == address(this)) {
107
+ // transferFrom requires self allowance too
108
+ _token.approve(address(this), currentBalance);
109
+ }
110
+
111
+ SafeERC20.safeTransferFrom(_token, currentWallet, newWallet, currentBalance);
112
+ emit LogBaseComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
113
+ }
114
+ }
115
+
75
116
  function getToken() public view override returns (IERC20Metadata token) {
76
117
  return _token;
77
118
  }
@@ -80,6 +121,11 @@ abstract contract BaseComponent is
80
121
  return _instance;
81
122
  }
82
123
 
124
+ function setProductNftId(NftId productNftId) public override onlyOwner {
125
+ require(_productNftId.eq(zeroNftId()), "product nft id already set");
126
+ _productNftId = productNftId;
127
+ }
128
+
83
129
  function getProductNftId() public view override returns (NftId productNftId) {
84
130
  return _productNftId;
85
131
  }
@@ -25,6 +25,8 @@ contract Distribution is
25
25
  Fee internal _initialDistributionFee;
26
26
  bool internal _isVerifying;
27
27
 
28
+ TokenHandler internal _tokenHandler;
29
+
28
30
  IDistributionService private _distributionService;
29
31
  IProductService private _productService;
30
32
 
@@ -38,21 +40,21 @@ contract Distribution is
38
40
  constructor(
39
41
  address registry,
40
42
  NftId instanceNftId,
41
- NftId productNftId,
42
43
  // TODO refactor into tokenNftId
43
44
  address token,
44
45
  bool verifying,
45
46
  Fee memory distributionFee,
46
47
  address initialOwner
47
48
  )
48
- BaseComponent(registry, instanceNftId, productNftId, token, DISTRIBUTION(), true, initialOwner)
49
+ BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
49
50
  {
50
51
  _isVerifying = verifying;
51
52
  _initialDistributionFee = distributionFee;
52
53
 
53
- // TODO: reactivate when services are available again
54
- // _distributionService = _instance.getDistributionService();
55
- // _productService = _instance.getProductService();
54
+ _tokenHandler = TokenHandler(token);
55
+
56
+ _distributionService = _instance.getDistributionService();
57
+ _productService = _instance.getProductService();
56
58
 
57
59
  _registerInterface(type(IDistributionComponent).interfaceId);
58
60
  }
@@ -123,19 +125,10 @@ contract Distribution is
123
125
  }
124
126
 
125
127
  function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
126
- if (getNftId().eq(zeroNftId())) {
127
- return ISetup.DistributionSetupInfo(
128
- _productNftId,
129
- TokenHandler(address(0)),
130
- _initialDistributionFee,
131
- _isVerifying,
132
- address(0)
133
- );
134
- }
135
-
136
128
  InstanceReader reader = _instance.getInstanceReader();
137
129
  return reader.getDistributionSetupInfo(getNftId());
138
130
  }
131
+
139
132
 
140
133
  /// @dev returns true iff the component needs to be called when selling/renewing policis
141
134
  function isVerifying() external view returns (bool verifying) {
@@ -152,14 +145,18 @@ contract Distribution is
152
145
  {
153
146
  (
154
147
  IRegistry.ObjectInfo memory info,
155
- bytes memory data
156
148
  ) = super.getInitialInfo();
157
149
 
158
150
  return (
159
151
  info,
160
152
  abi.encode(
161
- _initialDistributionFee,
162
- _isVerifying
153
+ ISetup.DistributionSetupInfo(
154
+ _productNftId,
155
+ _tokenHandler,
156
+ _initialDistributionFee,
157
+ _isVerifying,
158
+ address(this)
159
+ )
163
160
  )
164
161
  );
165
162
  }
@@ -8,6 +8,11 @@ import {IInstance} from "../instance/IInstance.sol";
8
8
  import {NftId} from "../types/NftId.sol";
9
9
 
10
10
  interface IBaseComponent is IRegisterable {
11
+ error ErrorBaseComponentWalletAddressIsSameAsCurrent(address newWallet);
12
+ error ErrorBaseComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
13
+
14
+ event LogBaseComponentWalletAddressChanged(address newWallet);
15
+ event LogBaseComponentWalletTokensTransferred(address from, address to, uint256 amount);
11
16
 
12
17
  function lock() external;
13
18
 
@@ -15,10 +20,12 @@ interface IBaseComponent is IRegisterable {
15
20
 
16
21
  function getToken() external view returns (IERC20Metadata token);
17
22
 
23
+ function setWallet(address walletAddress) external;
18
24
  function getWallet() external view returns (address walletAddress);
19
25
 
20
26
  function getInstance() external view returns (IInstance instance);
21
27
 
28
+ function setProductNftId(NftId productNftId) external;
22
29
  function getProductNftId() external view returns (NftId productNftId);
23
30
 
24
31
  }
@@ -4,6 +4,7 @@ pragma solidity ^0.8.19;
4
4
  import {Fee} from "../types/Fee.sol";
5
5
  import {ReferralId} from "../types/Referral.sol";
6
6
  import {NftId} from "../types/NftId.sol";
7
+ import {ISetup} from "../instance/module/ISetup.sol";
7
8
 
8
9
  interface IDistributionComponent {
9
10
 
@@ -43,6 +43,10 @@ interface IPoolComponent {
43
43
  uint256 collateralizationAmount
44
44
  ) external;
45
45
 
46
+ function lockBundle(NftId bundleNftId) external;
47
+
48
+ function unlockBundle(NftId bundleNftId) external;
49
+
46
50
  /**
47
51
  * @dev returns true iff the policy application data in policyData matches
48
52
  * with the bundle filter criteria encoded in bundleFilter.
@@ -55,7 +59,7 @@ interface IPoolComponent {
55
59
  view
56
60
  returns (bool isMatching);
57
61
 
58
- function isVerifying() external view returns (bool verifying);
62
+ function isConfirmingApplication() external view returns (bool isConfirmingApplication);
59
63
 
60
64
  function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
61
65
 
@@ -25,13 +25,15 @@ import {Registerable} from "../shared/Registerable.sol";
25
25
  contract Pool is BaseComponent, IPoolComponent {
26
26
  using NftIdLib for NftId;
27
27
 
28
- bool internal _isVerifying;
28
+ bool internal _isConfirmingApplication;
29
29
  UFixed internal _collateralizationLevel;
30
30
 
31
31
  Fee internal _initialPoolFee;
32
32
  Fee internal _initialStakingFee;
33
33
  Fee internal _initialPerformanceFee;
34
34
 
35
+ TokenHandler internal _tokenHandler;
36
+
35
37
  // may be used to interact with instance by derived contracts
36
38
  IPoolService internal _poolService;
37
39
 
@@ -55,29 +57,29 @@ contract Pool is BaseComponent, IPoolComponent {
55
57
  constructor(
56
58
  address registry,
57
59
  NftId instanceNftId,
58
- NftId productNftId,
59
60
  // TODO refactor into tokenNftId
60
61
  address token,
61
62
  bool isInterceptor,
62
- bool verifying,
63
+ bool isConfirmingApplication,
63
64
  UFixed collateralizationLevel,
64
65
  Fee memory poolFee,
65
66
  Fee memory stakingFee,
66
67
  Fee memory performanceFee,
67
68
  address initialOwner
68
69
  )
69
- BaseComponent(registry, instanceNftId, productNftId, token, POOL(), isInterceptor, initialOwner)
70
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
70
71
  {
71
- _isVerifying = verifying;
72
+ _isConfirmingApplication = isConfirmingApplication;
72
73
  // TODO add validation
73
74
  _collateralizationLevel = collateralizationLevel;
74
75
  _initialPoolFee = poolFee;
75
76
  _initialStakingFee = stakingFee;
76
77
  _initialPerformanceFee = performanceFee;
77
78
 
78
- // TODO: reactivate when services are available again
79
- // _poolService = _instance.getPoolService();
80
- // _productService = _instance.getProductService();
79
+ _tokenHandler = new TokenHandler(token);
80
+
81
+ _poolService = _instance.getPoolService();
82
+ _productService = _instance.getProductService();
81
83
 
82
84
  _registerInterface(type(IPoolComponent).interfaceId);
83
85
  }
@@ -138,8 +140,8 @@ contract Pool is BaseComponent, IPoolComponent {
138
140
  }
139
141
 
140
142
 
141
- function isVerifying() external view override returns (bool verifying) {
142
- return _isVerifying;
143
+ function isConfirmingApplication() external view override returns (bool isConfirmingApplication) {
144
+ return _isConfirmingApplication;
143
145
  }
144
146
 
145
147
  function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
@@ -169,21 +171,27 @@ contract Pool is BaseComponent, IPoolComponent {
169
171
  _poolService.setBundleFee(bundleNftId, fee);
170
172
  }
171
173
 
172
- function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
173
- // TODO fix this
174
- if (getNftId().eq(zeroNftId())) {
175
- return ISetup.PoolSetupInfo(
176
- _productNftId,
177
- TokenHandler(address(0)),
178
- _collateralizationLevel,
179
- _initialPoolFee,
180
- _initialStakingFee,
181
- _initialPerformanceFee,
182
- _isVerifying,
183
- _wallet
184
- );
185
- }
174
+ function lockBundle(
175
+ NftId bundleNftId
176
+ )
177
+ external
178
+ override
179
+ // TODO add onlyBundleOwner
180
+ {
181
+ _poolService.lockBundle(bundleNftId);
182
+ }
186
183
 
184
+ function unlockBundle(
185
+ NftId bundleNftId
186
+ )
187
+ external
188
+ override
189
+ // TODO add onlyBundleOwner
190
+ {
191
+ _poolService.unlockBundle(bundleNftId);
192
+ }
193
+
194
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
187
195
  InstanceReader reader = _instance.getInstanceReader();
188
196
  return reader.getPoolSetupInfo(getNftId());
189
197
  }
@@ -200,20 +208,20 @@ contract Pool is BaseComponent, IPoolComponent {
200
208
  {
201
209
  (
202
210
  IRegistry.ObjectInfo memory info,
203
- bytes memory data
204
211
  ) = super.getInitialInfo();
205
212
 
206
213
  return (
207
214
  info,
208
215
  abi.encode(
209
216
  ISetup.PoolSetupInfo(
210
- getProductNftId(),
211
- TokenHandler(address(0)),
217
+ _productNftId,
218
+ _tokenHandler,
212
219
  _collateralizationLevel,
213
220
  _initialPoolFee,
214
221
  _initialStakingFee,
215
222
  _initialPerformanceFee,
216
- _isVerifying,
223
+ false,
224
+ _isConfirmingApplication,
217
225
  _wallet
218
226
  )
219
227
  )