@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-ff8087d-237

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 (422) hide show
  1. package/README.md +359 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +727 -33
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1376 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +636 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1095 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +861 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1281 -69
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1064 -79
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2365 -529
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +600 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2965 -581
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1569 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1099 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +724 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +631 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +532 -0
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  56. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  62. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  64. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1124 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +688 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1283 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1847 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +816 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +619 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +730 -0
  86. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1059 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +651 -0
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +1077 -0
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +442 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1281 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1622 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +864 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +784 -0
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +559 -74
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +858 -0
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +646 -77
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1150 -0
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +175 -0
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IService.sol/IService.json +327 -0
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +339 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  154. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.json +488 -0
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +114 -0
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +370 -0
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +588 -0
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  177. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  180. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  182. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  184. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  186. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  188. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  190. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.json +312 -0
  192. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  194. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +166 -0
  196. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  198. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  202. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  204. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  206. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  210. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +280 -0
  216. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/components/Component.sol +250 -40
  225. package/contracts/components/Distribution.sol +285 -0
  226. package/contracts/components/IComponent.sol +90 -0
  227. package/contracts/components/IDistributionComponent.sol +71 -0
  228. package/contracts/components/IPoolComponent.sol +114 -0
  229. package/contracts/components/IProductComponent.sol +41 -0
  230. package/contracts/components/Pool.sol +291 -18
  231. package/contracts/components/Product.sol +340 -33
  232. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  233. package/contracts/instance/BundleManager.sol +126 -0
  234. package/contracts/instance/Cloneable.sol +51 -0
  235. package/contracts/instance/IInstance.sol +99 -15
  236. package/contracts/instance/IInstanceService.sol +63 -0
  237. package/contracts/instance/Instance.sol +297 -42
  238. package/contracts/instance/InstanceAccessManager.sol +527 -0
  239. package/contracts/instance/InstanceReader.sol +366 -0
  240. package/contracts/instance/InstanceService.sol +484 -0
  241. package/contracts/instance/InstanceServiceManager.sol +54 -0
  242. package/contracts/instance/ObjectManager.sol +82 -0
  243. package/contracts/instance/base/ComponentService.sol +130 -0
  244. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  245. package/contracts/instance/base/ILifecycle.sol +30 -0
  246. package/contracts/instance/base/KeyValueStore.sol +149 -0
  247. package/contracts/instance/base/Lifecycle.sol +120 -0
  248. package/contracts/instance/module/IAccess.sol +54 -0
  249. package/contracts/instance/module/IBundle.sol +23 -0
  250. package/contracts/instance/module/IComponents.sol +41 -0
  251. package/contracts/instance/module/IDistribution.sol +42 -0
  252. package/contracts/instance/module/IPolicy.sol +77 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +33 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ApplicationService.sol +356 -0
  257. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  258. package/contracts/instance/service/BundleService.sol +385 -0
  259. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  260. package/contracts/instance/service/ClaimService.sol +443 -0
  261. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  262. package/contracts/instance/service/DistributionService.sol +432 -0
  263. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  264. package/contracts/instance/service/IApplicationService.sol +79 -0
  265. package/contracts/instance/service/IBundleService.sol +118 -0
  266. package/contracts/instance/service/IClaimService.sol +90 -0
  267. package/contracts/instance/service/IDistributionService.sol +101 -0
  268. package/contracts/instance/service/IPolicyService.sol +80 -0
  269. package/contracts/instance/service/IPoolService.sol +114 -0
  270. package/contracts/instance/service/IProductService.sol +40 -0
  271. package/contracts/instance/service/PolicyService.sol +372 -0
  272. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  273. package/contracts/instance/service/PoolService.sol +403 -0
  274. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  275. package/contracts/instance/service/ProductService.sol +210 -0
  276. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  277. package/contracts/registry/ChainNft.sol +210 -0
  278. package/contracts/registry/IRegistry.sol +87 -52
  279. package/contracts/registry/IRegistryService.sol +66 -0
  280. package/contracts/registry/ITransferInterceptor.sol +7 -0
  281. package/contracts/registry/Registry.sol +399 -129
  282. package/contracts/registry/RegistryAccessManager.sol +216 -0
  283. package/contracts/registry/RegistryService.sol +282 -0
  284. package/contracts/registry/RegistryServiceManager.sol +62 -0
  285. package/contracts/registry/ReleaseManager.sol +324 -0
  286. package/contracts/registry/TokenRegistry.sol +116 -0
  287. package/contracts/shared/ContractDeployerLib.sol +72 -0
  288. package/contracts/shared/ERC165.sol +27 -0
  289. package/contracts/shared/INftOwnable.sol +23 -0
  290. package/contracts/shared/IPolicyHolder.sol +40 -0
  291. package/contracts/shared/IRegisterable.sol +15 -0
  292. package/contracts/shared/IRegistryLinked.sol +11 -0
  293. package/contracts/shared/IService.sol +18 -0
  294. package/contracts/shared/IVersionable.sol +53 -0
  295. package/contracts/shared/NftOwnable.sol +118 -0
  296. package/contracts/shared/PolicyHolder.sol +94 -0
  297. package/contracts/shared/ProxyManager.sol +169 -0
  298. package/contracts/shared/Registerable.sol +75 -0
  299. package/contracts/shared/RegistryLinked.sol +43 -0
  300. package/contracts/shared/Service.sol +72 -0
  301. package/contracts/shared/TokenHandler.sol +35 -0
  302. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  303. package/contracts/shared/Versionable.sol +59 -0
  304. package/contracts/test/TestFee.sol +25 -0
  305. package/contracts/test/TestRegisterable.sol +18 -0
  306. package/contracts/test/TestRoleId.sol +14 -0
  307. package/contracts/test/TestService.sol +25 -0
  308. package/contracts/test/TestToken.sol +26 -0
  309. package/contracts/test/TestVersion.sol +44 -0
  310. package/contracts/test/TestVersionable.sol +17 -0
  311. package/contracts/test/Usdc.sol +26 -0
  312. package/contracts/types/AddressSet.sol +58 -0
  313. package/contracts/types/Amount.sol +109 -0
  314. package/contracts/types/Blocknumber.sol +119 -0
  315. package/contracts/types/ChainId.sol +38 -0
  316. package/contracts/types/ClaimId.sol +75 -0
  317. package/contracts/types/DistributorType.sol +55 -0
  318. package/contracts/types/Fee.sol +65 -0
  319. package/contracts/types/Key32.sol +50 -0
  320. package/contracts/types/NftId.sol +80 -0
  321. package/contracts/types/NftIdSet.sol +62 -0
  322. package/contracts/types/NumberId.sol +52 -0
  323. package/contracts/types/ObjectType.sol +157 -0
  324. package/contracts/types/PayoutId.sol +82 -0
  325. package/contracts/types/Referral.sol +89 -0
  326. package/contracts/types/RiskId.sol +43 -0
  327. package/contracts/types/RoleId.sol +97 -0
  328. package/contracts/types/Seconds.sol +54 -0
  329. package/contracts/types/StateId.sol +110 -0
  330. package/contracts/types/Timestamp.sol +132 -0
  331. package/contracts/types/UFixed.sol +326 -0
  332. package/contracts/types/Version.sol +108 -0
  333. package/package.json +21 -6
  334. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  335. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  336. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  337. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  338. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  339. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  340. package/artifacts/contracts/experiment/A.sol/A.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/A.sol/A.json +0 -128
  342. package/artifacts/contracts/experiment/A.sol/AShared.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/A.sol/AShared.json +0 -42
  344. package/artifacts/contracts/experiment/B.sol/B.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/B.sol/B.json +0 -76
  346. package/artifacts/contracts/experiment/C.sol/C.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/C.sol/C.json +0 -89
  348. package/artifacts/contracts/experiment/IA.sol/IA.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/IA.sol/IA.json +0 -128
  350. package/artifacts/contracts/experiment/IA.sol/ISharedA.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/IA.sol/ISharedA.json +0 -37
  352. package/artifacts/contracts/experiment/IB.sol/IB.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/IB.sol/IB.json +0 -50
  354. package/artifacts/contracts/experiment/IC.sol/IC.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/IC.sol/IC.json +0 -63
  356. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  358. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  359. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  360. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  361. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  362. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  363. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  364. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  366. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  367. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  368. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  369. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  370. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  371. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  373. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  375. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  377. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  378. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  380. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  382. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  383. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  385. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  386. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  387. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  388. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  389. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  390. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  391. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  393. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  394. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  395. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  396. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  397. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  398. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  399. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  400. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  401. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  402. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  403. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  404. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  405. package/contracts/components/IPool.sol +0 -9
  406. package/contracts/components/IProduct.sol +0 -11
  407. package/contracts/experiment/A.sol +0 -56
  408. package/contracts/experiment/B.sol +0 -23
  409. package/contracts/experiment/C.sol +0 -28
  410. package/contracts/experiment/IA.sol +0 -18
  411. package/contracts/experiment/IB.sol +0 -9
  412. package/contracts/experiment/IC.sol +0 -11
  413. package/contracts/instance/access/Access.sol +0 -218
  414. package/contracts/instance/access/IAccess.sol +0 -83
  415. package/contracts/instance/component/ComponentModule.sol +0 -259
  416. package/contracts/instance/component/IComponent.sol +0 -94
  417. package/contracts/instance/policy/IPolicy.sol +0 -66
  418. package/contracts/instance/policy/PolicyModule.sol +0 -106
  419. package/contracts/instance/pool/IPoolModule.sol +0 -40
  420. package/contracts/instance/pool/PoolModule.sol +0 -83
  421. package/contracts/instance/product/IProductService.sol +0 -45
  422. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,49 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "VersionPartLib",
4
+ "sourceName": "contracts/types/Version.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "VersionPart",
10
+ "name": "a",
11
+ "type": "uint8"
12
+ }
13
+ ],
14
+ "name": "toInt",
15
+ "outputs": [
16
+ {
17
+ "internalType": "uint256",
18
+ "name": "",
19
+ "type": "uint256"
20
+ }
21
+ ],
22
+ "stateMutability": "pure",
23
+ "type": "function"
24
+ },
25
+ {
26
+ "inputs": [
27
+ {
28
+ "internalType": "uint256",
29
+ "name": "a",
30
+ "type": "uint256"
31
+ }
32
+ ],
33
+ "name": "toVersionPart",
34
+ "outputs": [
35
+ {
36
+ "internalType": "VersionPart",
37
+ "name": "",
38
+ "type": "uint8"
39
+ }
40
+ ],
41
+ "stateMutability": "pure",
42
+ "type": "function"
43
+ }
44
+ ],
45
+ "bytecode": "0x60fb610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220cdee50fe6c9714f8463d3a3d707ceac1b02f5c17b070c998ecfbac805f95cace64736f6c63430008140033",
46
+ "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220cdee50fe6c9714f8463d3a3d707ceac1b02f5c17b070c998ecfbac805f95cace64736f6c63430008140033",
47
+ "linkReferences": {},
48
+ "deployedLinkReferences": {}
49
+ }
@@ -1,62 +1,272 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IRegistry, IRegisterable, IRegistryLinked} from "../registry/IRegistry.sol";
5
- import {Registerable} from "../registry/Registry.sol";
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
+
9
+ import {IComponent} from "./IComponent.sol";
10
+ import {IComponents} from "../instance/module/IComponents.sol";
11
+ import {IProductService} from "../instance/service/IProductService.sol";
12
+ import {IInstanceService} from "../instance/IInstanceService.sol";
6
13
  import {IInstance} from "../instance/IInstance.sol";
14
+ import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
15
+ import {InstanceReader} from "../instance/InstanceReader.sol";
16
+ import {IRegistry} from "../registry/IRegistry.sol";
17
+ import {NftId} from "../types/NftId.sol";
18
+ import {ObjectType, INSTANCE, PRODUCT} from "../types/ObjectType.sol";
19
+ import {VersionPart} from "../types/Version.sol";
20
+ import {Registerable} from "../shared/Registerable.sol";
21
+ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
22
+ import {IAccess} from "../instance/module/IAccess.sol";
23
+ import {TokenHandler} from "../shared/TokenHandler.sol";
24
+ import {VersionPart} from "../types/Version.sol";
7
25
 
8
- import {IInstanceLinked, IComponent, IComponentContract, IComponentModule, IComponentOwnerService} from "../instance/component/IComponent.sol";
26
+ // TODO discuss to inherit from oz accessmanaged
27
+ // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
28
+ // same pattern as for Service which is also upgradeable
29
+ abstract contract Component is
30
+ Registerable,
31
+ IComponent,
32
+ AccessManagedUpgradeable
33
+ {
34
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
35
+ bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
9
36
 
37
+ struct ComponentStorage {
38
+ string _name; // unique (per instance) component name
39
+ IERC20Metadata _token; // token for this component
40
+ IInstance _instance; // instance for this component
41
+ address _wallet; // wallet for this component (default = component contract itself)
42
+ InstanceReader _instanceReader; // instance reader for this component
43
+ bool _isNftInterceptor; // declares if component is involved in nft transfers
44
+ NftId _productNftId; // only relevant for components that are linked to a aproduct
45
+ }
10
46
 
11
- contract InstanceLinked is
12
- IInstanceLinked
13
- {
14
- IInstance internal _instance;
47
+ function _getComponentStorage() private pure returns (ComponentStorage storage $) {
48
+ assembly {
49
+ $.slot := COMPONENT_LOCATION_V1
50
+ }
51
+ }
15
52
 
16
- constructor(address instance) {
17
- _instance = IInstance(instance);
53
+ modifier onlyChainNft() {
54
+ if(msg.sender != getRegistry().getChainNftAddress()) {
55
+ revert ErrorComponentNotChainNft(msg.sender);
56
+ }
57
+ _;
18
58
  }
19
59
 
20
- // function setInstance(address instance) public override {
21
- // require(address(_instance) == address(0), "ERROR:RGL-001:INSTANCE_ALREADY_SET");
22
- // _instance = IInstance(instance);
23
- // }
60
+ function initializeComponent(
61
+ address registry,
62
+ NftId instanceNftId,
63
+ string memory name,
64
+ address token,
65
+ ObjectType componentType,
66
+ bool isInterceptor,
67
+ address initialOwner,
68
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
69
+ )
70
+ public
71
+ virtual
72
+ onlyInitializing()
73
+ {
74
+ initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, registryData);
75
+
76
+ // set and check linked instance
77
+ ComponentStorage storage $ = _getComponentStorage();
78
+ $._instance = IInstance(
79
+ getRegistry().getObjectInfo(instanceNftId).objectAddress);
80
+
81
+ if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
82
+ revert ErrorComponentNotInstance(instanceNftId);
83
+ }
84
+
85
+ // initialize AccessManagedUpgradeable
86
+ __AccessManaged_init($._instance.authority());
24
87
 
25
- function getInstance() public view override returns(IInstance instance) {
26
- return _instance;
88
+ // set component state
89
+ $._name = name;
90
+ $._isNftInterceptor = isInterceptor;
91
+ $._instanceReader = $._instance.getInstanceReader();
92
+ $._wallet = address(this);
93
+ $._token = IERC20Metadata(token);
94
+
95
+ registerInterface(type(IAccessManaged).interfaceId);
96
+ registerInterface(type(IComponent).interfaceId);
27
97
  }
28
- }
29
98
 
99
+ function lock() external onlyOwner {
100
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
101
+ }
102
+
103
+ function unlock() external onlyOwner {
104
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
105
+ }
30
106
 
31
- abstract contract Component is
32
- Registerable,
33
- InstanceLinked,
34
- IComponentContract
35
- {
107
+ function approveTokenHandler(uint256 spendingLimitAmount) external onlyOwner {
108
+ IComponents.ComponentInfo memory info = getComponentInfo();
36
109
 
37
- address private _deployer;
110
+ if(info.wallet != address(this)) {
111
+ revert ErrorComponentWalletNotComponent();
112
+ }
38
113
 
39
- constructor(address registry, address instance)
40
- Registerable(registry)
41
- InstanceLinked(instance)
42
- { }
114
+ info.token.approve(
115
+ address(info.tokenHandler),
116
+ spendingLimitAmount);
43
117
 
44
- // from registerable
45
- function register()
46
- public
118
+ emit LogComponentTokenHandlerApproved(spendingLimitAmount);
119
+ }
120
+
121
+ function setWallet(address newWallet)
122
+ external
123
+ override
124
+ onlyOwner
125
+ {
126
+ ComponentStorage storage $ = _getComponentStorage();
127
+
128
+ address currentWallet = $._wallet;
129
+ uint256 currentBalance = $._token.balanceOf(currentWallet);
130
+
131
+ // checks
132
+ if (newWallet == address(0)) {
133
+ revert ErrorComponentWalletAddressZero();
134
+ }
135
+
136
+ if (newWallet == currentWallet) {
137
+ revert ErrorComponentWalletAddressIsSameAsCurrent();
138
+ }
139
+
140
+ if (currentBalance > 0) {
141
+ if (currentWallet == address(this)) {
142
+ // move tokens from component smart contract to external wallet
143
+ } else {
144
+ // move tokens from external wallet to component smart contract or another external wallet
145
+ uint256 allowance = $._token.allowance(currentWallet, address(this));
146
+ if (allowance < currentBalance) {
147
+ revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
148
+ }
149
+ }
150
+ }
151
+
152
+ // effects
153
+ $._wallet = newWallet;
154
+ emit LogComponentWalletAddressChanged(currentWallet, newWallet);
155
+
156
+ // interactions
157
+ if (currentBalance > 0) {
158
+ // transfer tokens from current wallet to new wallet
159
+ if (currentWallet == address(this)) {
160
+ // transferFrom requires self allowance too
161
+ $._token.approve(address(this), currentBalance);
162
+ }
163
+
164
+ SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
165
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
166
+ }
167
+ }
168
+
169
+ function setProductNftId(NftId productNftId)
170
+ external
47
171
  override
48
- returns(uint256 componentId)
49
172
  {
50
- require(msg.sender == getInitialOwner(), "");
51
- require(address(_registry) != address(0), "ERROR:PRD-001:REGISTRY_ZERO");
52
- require(_registry.isRegistered(address(_instance)), "ERROR:PRD-002:INSTANCE_NOT_REGISTERED");
173
+ ComponentStorage storage $ = _getComponentStorage();
174
+
175
+ // verify caller is product service
176
+ if(msg.sender != _getServiceAddress(PRODUCT())) {
177
+ revert ErrorComponentNotProductService(msg.sender);
178
+ }
179
+
180
+ // verify component is not yet linked to a product
181
+ if($._productNftId.gtz()) {
182
+ revert ErrorComponentProductNftAlreadySet();
183
+ }
184
+
185
+ $._productNftId = productNftId;
186
+ }
187
+
188
+ function nftMint(address to, uint256 tokenId)
189
+ external
190
+ virtual
191
+ onlyChainNft
192
+ {}
193
+
194
+ /// @dev callback function for nft transfers
195
+ /// may only be called by chain nft contract.
196
+ /// do not override this function to implement business logic for handling transfers
197
+ /// override internal function _nftTransferFrom instead
198
+ function nftTransferFrom(address from, address to, uint256 tokenId)
199
+ external
200
+ virtual
201
+ onlyChainNft
202
+ {
203
+ _nftTransferFrom(from, to, tokenId);
204
+ }
205
+
206
+ function getWallet() public view override returns (address walletAddress)
207
+ {
208
+ return _getComponentStorage()._wallet;
209
+ }
210
+
211
+ function getToken() public view override returns (IERC20Metadata token) {
212
+ return _getComponentStorage()._token;
213
+ }
214
+
215
+ function getTokenHandler() public view returns (TokenHandler tokenHandler) {
216
+ return getComponentInfo().tokenHandler;
217
+ }
218
+
219
+ function isNftInterceptor() public view override returns(bool isInterceptor) {
220
+ return _getComponentStorage()._isNftInterceptor;
221
+ }
222
+
223
+ function getInstance() public view override returns (IInstance instance) {
224
+ return _getComponentStorage()._instance;
225
+ }
226
+
227
+ function getName() public view override returns(string memory name) {
228
+ return _getComponentStorage()._name;
229
+ }
230
+
231
+ function getProductNftId() public view override returns (NftId productNftId) {
232
+ return _getComponentStorage()._productNftId;
233
+ }
234
+
235
+ function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
236
+ info = _getInstanceReader().getComponentInfo(getNftId());
237
+
238
+ // fallback to initial info (wallet is always != address(0))
239
+ if(info.wallet == address(0)) {
240
+ info = _getInitialInfo();
241
+ }
242
+ }
243
+
244
+ /// @dev defines initial component specification
245
+ /// overwrite this function according to your use case
246
+ function _getInitialInfo()
247
+ internal
248
+ view
249
+ virtual
250
+ returns (IComponents.ComponentInfo memory info)
251
+ { }
252
+
253
+
254
+ /// @dev internal function for nft transfers.
255
+ /// handling logic that deals with nft transfers need to overwrite this function
256
+ function _nftTransferFrom(address from, address to, uint256 tokenId)
257
+ internal
258
+ virtual
259
+ { }
53
260
 
54
- IComponentOwnerService cos = _instance.getComponentOwnerService();
55
- componentId = cos.register(this);
261
+ /// @dev returns reader for linked instance
262
+ function _getInstanceReader() internal view returns (InstanceReader reader) {
263
+ return _getComponentStorage()._instanceReader;
56
264
  }
57
265
 
58
- // from registerable
59
- function getParentNftId() public view override returns(uint256) {
60
- return getInstance().getNftId();
266
+ /// @dev returns the service address for the specified domain
267
+ /// gets address via lookup from registry using the major version form the linked instance
268
+ function _getServiceAddress(ObjectType domain) internal view returns (address service) {
269
+ VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
270
+ return getRegistry().getServiceAddress(domain, majorVersion);
61
271
  }
62
- }
272
+ }
@@ -0,0 +1,285 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {DISTRIBUTION} from "../types/ObjectType.sol";
5
+ import {IDistributionService} from "../instance/service/IDistributionService.sol";
6
+ import {IProductService} from "../instance/service/IProductService.sol";
7
+ import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
8
+ import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
+ import {Fee, FeeLib} from "../types/Fee.sol";
10
+ import {Component} from "./Component.sol";
11
+ import {IDistribution} from "../instance/module/IDistribution.sol";
12
+ import {IDistributionComponent} from "./IDistributionComponent.sol";
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+ import {IRegisterable} from "../shared/IRegisterable.sol";
15
+ import {ISetup} from "../instance/module/ISetup.sol";
16
+ import {Registerable} from "../shared/Registerable.sol";
17
+ import {TokenHandler} from "../shared/TokenHandler.sol";
18
+ import {InstanceReader} from "../instance/InstanceReader.sol";
19
+ import {UFixed} from "../types/UFixed.sol";
20
+ import {DistributorType} from "../types/DistributorType.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
22
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
23
+
24
+
25
+ abstract contract Distribution is
26
+ Component,
27
+ IDistributionComponent
28
+ {
29
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
30
+ bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
31
+
32
+ struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
34
+ Fee _distributionFee;
35
+ TokenHandler _tokenHandler;
36
+ IDistributionService _distributionService;
37
+ mapping(address distributor => NftId distributorNftId) _distributorNftId;
38
+ }
39
+
40
+ error ErrorDistributionAlreadyDistributor(address distributor, NftId distributorNftId);
41
+
42
+ function initializeDistribution(
43
+ address registry,
44
+ NftId instanceNftId,
45
+ string memory name,
46
+ address token,
47
+ Fee memory minDistributionOwnerFee,
48
+ Fee memory distributionFee,
49
+ address initialOwner,
50
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
51
+ )
52
+ public
53
+ virtual
54
+ onlyInitializing()
55
+ {
56
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
57
+
58
+ DistributionStorage storage $ = _getDistributionStorage();
59
+ // TODO add validation
60
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
61
+ $._distributionFee = distributionFee;
62
+ $._tokenHandler = new TokenHandler(token);
63
+ $._distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
64
+
65
+ registerInterface(type(IDistributionComponent).interfaceId);
66
+ }
67
+
68
+ function setFees(
69
+ Fee memory minDistributionOwnerFee,
70
+ Fee memory distributionFee
71
+ )
72
+ external
73
+ override
74
+ onlyOwner
75
+ restricted()
76
+ {
77
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
78
+ }
79
+
80
+ function getDistributionFee() external view returns (Fee memory distributionFee) {
81
+ DistributionStorage storage $ = _getDistributionStorage();
82
+ return $._distributionFee;
83
+ }
84
+
85
+ function createDistributorType(
86
+ string memory name,
87
+ UFixed minDiscountPercentage,
88
+ UFixed maxDiscountPercentage,
89
+ UFixed commissionPercentage,
90
+ uint32 maxReferralCount,
91
+ uint32 maxReferralLifetime,
92
+ bool allowSelfReferrals,
93
+ bool allowRenewals,
94
+ bytes memory data
95
+ )
96
+ public
97
+ returns (DistributorType distributorType)
98
+ {
99
+ DistributionStorage storage $ = _getDistributionStorage();
100
+ distributorType = $._distributionService.createDistributorType(
101
+ name,
102
+ minDiscountPercentage,
103
+ maxDiscountPercentage,
104
+ commissionPercentage,
105
+ maxReferralCount,
106
+ maxReferralLifetime,
107
+ allowSelfReferrals,
108
+ allowRenewals,
109
+ data);
110
+ }
111
+
112
+ function createDistributor(
113
+ address distributor,
114
+ DistributorType distributorType,
115
+ bytes memory data
116
+ )
117
+ public
118
+ returns(NftId distributorNftId)
119
+ {
120
+ DistributionStorage storage $ = _getDistributionStorage();
121
+ if($._distributorNftId[distributor].gtz()) {
122
+ revert ErrorDistributionAlreadyDistributor(distributor, $._distributorNftId[distributor]);
123
+ }
124
+
125
+ distributorNftId = $._distributionService.createDistributor(
126
+ distributor,
127
+ distributorType,
128
+ data);
129
+
130
+ $._distributorNftId[distributor] = distributorNftId;
131
+ }
132
+
133
+ function updateDistributorType(
134
+ NftId distributorNftId,
135
+ DistributorType distributorType,
136
+ bytes memory data
137
+ )
138
+ public
139
+ // TODO figure out what we need for authz
140
+ // and add it
141
+ {
142
+ DistributionStorage storage $ = _getDistributionStorage();
143
+ // TODO re-enable once implemented
144
+ // $._distributionService.updateDistributorType(
145
+ // distributorNftId,
146
+ // distributorType,
147
+ // data);
148
+ }
149
+
150
+ /**
151
+ * @dev lets distributors create referral codes.
152
+ * referral codes need to be unique
153
+ */
154
+ function _createReferral(
155
+ NftId distributorNftId,
156
+ string memory code,
157
+ UFixed discountPercentage,
158
+ uint32 maxReferrals,
159
+ Timestamp expiryAt,
160
+ bytes memory data
161
+ )
162
+ internal
163
+ returns (ReferralId referralId)
164
+ {
165
+ DistributionStorage storage $ = _getDistributionStorage();
166
+ referralId = $._distributionService.createReferral(
167
+ distributorNftId,
168
+ code,
169
+ discountPercentage,
170
+ maxReferrals,
171
+ expiryAt,
172
+ data);
173
+ }
174
+
175
+ function isDistributor(address candidate)
176
+ public
177
+ view
178
+ returns (bool)
179
+ {
180
+ DistributionStorage storage $ = _getDistributionStorage();
181
+ return $._distributorNftId[candidate].gtz();
182
+ }
183
+
184
+ function getDistributorNftId(address distributor)
185
+ public
186
+ view
187
+ returns (NftId distributorNftId)
188
+ {
189
+ DistributionStorage storage $ = _getDistributionStorage();
190
+ return $._distributorNftId[distributor];
191
+ }
192
+
193
+ function getDiscountPercentage(string memory referralCode)
194
+ external
195
+ view
196
+ returns (
197
+ UFixed discountPercentage,
198
+ ReferralStatus status
199
+ )
200
+ {
201
+ ReferralId referralId = getReferralId(referralCode);
202
+ return _getInstanceReader().getDiscountPercentage(referralId);
203
+ }
204
+
205
+
206
+ function getReferralId(
207
+ string memory referralCode
208
+ )
209
+ public
210
+ view
211
+ returns (ReferralId referralId)
212
+ {
213
+ return ReferralLib.toReferralId(
214
+ getNftId(),
215
+ referralCode);
216
+ }
217
+
218
+ function calculateRenewalFeeAmount(
219
+ ReferralId referralId,
220
+ uint256 netPremiumAmount
221
+ )
222
+ external
223
+ view
224
+ virtual override
225
+ returns (uint256 feeAmount)
226
+ {
227
+ // default is no fees
228
+ return 0 * netPremiumAmount;
229
+ }
230
+
231
+ function processRenewal(
232
+ ReferralId referralId,
233
+ uint256 feeAmount
234
+ )
235
+ external
236
+ onlyOwner
237
+ restricted()
238
+ virtual override
239
+ {
240
+ // default is no action
241
+ }
242
+
243
+ function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
244
+ InstanceReader reader = getInstance().getInstanceReader();
245
+ setupInfo = reader.getDistributionSetupInfo(getNftId());
246
+
247
+ // fallback to initial setup info (wallet is always != address(0))
248
+ if(setupInfo.wallet == address(0)) {
249
+ setupInfo = _getInitialSetupInfo();
250
+ }
251
+ }
252
+
253
+ function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
254
+ DistributionStorage storage $ = _getDistributionStorage();
255
+ return ISetup.DistributionSetupInfo(
256
+ zeroNftId(),
257
+ $._tokenHandler,
258
+ $._minDistributionOwnerFee,
259
+ $._distributionFee,
260
+ address(this),
261
+ 0
262
+ );
263
+ }
264
+
265
+
266
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
267
+ // keep track of distributor nft owner
268
+ emit LogDistributorUpdated(to, msg.sender);
269
+ DistributionStorage storage $ = _getDistributionStorage();
270
+ $._distributorNftId[from] = zeroNftId();
271
+ $._distributorNftId[to] = toNftId(tokenId);
272
+ }
273
+
274
+
275
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
276
+ function isVerifying() external view returns (bool verifying) {
277
+ return true;
278
+ }
279
+
280
+ function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
281
+ assembly {
282
+ $.slot := DISTRIBUTION_STORAGE_LOCATION_V1
283
+ }
284
+ }
285
+ }