@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2aa1035-611

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 (363) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +90 -145
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +145 -233
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -73
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -150
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +350 -180
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -145
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +298 -288
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +95 -218
  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 +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +274 -2000
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -203
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +398 -2776
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
  32. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  34. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
  36. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +216 -451
  38. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +184 -121
  40. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2663 -0
  42. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  43. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  44. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +100 -215
  46. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  52. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  54. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +164 -379
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +649 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +433 -425
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +244 -105
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1072 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +657 -318
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +270 -115
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +99 -236
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +235 -319
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +373 -158
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +417 -232
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +568 -120
  90. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +518 -0
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +64 -163
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +563 -366
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +220 -121
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +771 -247
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +237 -102
  102. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
  104. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +136 -271
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +186 -107
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +4 -193
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +28 -277
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IService.sol/IService.json +64 -163
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
  154. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  155. package/artifacts/contracts/shared/Service.sol/Service.json +72 -203
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +90 -253
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +6 -188
  175. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  176. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  177. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  205. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  211. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  213. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  215. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  219. package/contracts/components/Component.sol +100 -83
  220. package/contracts/components/Distribution.sol +22 -46
  221. package/contracts/components/IComponent.sol +43 -17
  222. package/contracts/components/IDistributionComponent.sol +1 -30
  223. package/contracts/components/IPoolComponent.sol +73 -47
  224. package/contracts/components/IProductComponent.sol +3 -2
  225. package/contracts/components/Pool.sol +178 -130
  226. package/contracts/components/Product.sol +172 -76
  227. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  228. package/contracts/instance/BundleManager.sol +10 -9
  229. package/contracts/instance/Cloneable.sol +7 -2
  230. package/contracts/instance/IInstance.sol +43 -49
  231. package/contracts/instance/IInstanceService.sol +32 -12
  232. package/contracts/instance/Instance.sol +129 -173
  233. package/contracts/instance/InstanceAccessManager.sol +404 -160
  234. package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
  235. package/contracts/instance/InstanceReader.sol +43 -16
  236. package/contracts/instance/InstanceService.sol +160 -293
  237. package/contracts/instance/InstanceServiceManager.sol +1 -1
  238. package/contracts/instance/InstanceStore.sol +208 -0
  239. package/contracts/instance/ObjectManager.sol +6 -8
  240. package/contracts/instance/base/ComponentService.sol +53 -39
  241. package/contracts/instance/base/KeyValueStore.sol +13 -5
  242. package/contracts/instance/base/Lifecycle.sol +23 -6
  243. package/contracts/instance/module/IAccess.sol +21 -14
  244. package/contracts/instance/module/IBundle.sol +8 -5
  245. package/contracts/instance/module/IComponents.sol +41 -0
  246. package/contracts/instance/module/IDistribution.sol +2 -0
  247. package/contracts/instance/module/IPolicy.sol +41 -9
  248. package/contracts/instance/module/ISetup.sol +7 -21
  249. package/contracts/instance/service/ApplicationService.sol +75 -158
  250. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  251. package/contracts/instance/service/BundleService.sol +230 -88
  252. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  253. package/contracts/instance/service/ClaimService.sol +239 -0
  254. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  255. package/contracts/instance/service/DistributionService.sol +156 -96
  256. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  257. package/contracts/instance/service/IApplicationService.sol +9 -30
  258. package/contracts/instance/service/IBundleService.sol +74 -26
  259. package/contracts/instance/service/IClaimService.sol +92 -0
  260. package/contracts/instance/service/IDistributionService.sol +26 -6
  261. package/contracts/instance/service/IPolicyService.sol +89 -38
  262. package/contracts/instance/service/IPoolService.sol +85 -3
  263. package/contracts/instance/service/IPricingService.sol +36 -0
  264. package/contracts/instance/service/PolicyService.sol +358 -305
  265. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  266. package/contracts/instance/service/PoolService.sol +246 -19
  267. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  268. package/contracts/instance/service/PricingService.sol +275 -0
  269. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  270. package/contracts/instance/service/ProductService.sol +37 -60
  271. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  272. package/contracts/registry/ChainNft.sol +8 -0
  273. package/contracts/registry/IRegistry.sol +2 -0
  274. package/contracts/registry/IRegistryService.sol +11 -10
  275. package/contracts/registry/ITransferInterceptor.sol +1 -0
  276. package/contracts/registry/Registry.sol +23 -20
  277. package/contracts/registry/RegistryService.sol +56 -47
  278. package/contracts/registry/RegistryServiceManager.sol +13 -13
  279. package/contracts/registry/ReleaseManager.sol +26 -33
  280. package/contracts/registry/TokenRegistry.sol +13 -10
  281. package/contracts/shared/ERC165.sol +2 -1
  282. package/contracts/shared/INftOwnable.sol +4 -9
  283. package/contracts/shared/IRegistryLinked.sol +0 -3
  284. package/contracts/shared/IService.sol +4 -4
  285. package/contracts/shared/IVersionable.sol +4 -47
  286. package/contracts/shared/NftOwnable.sol +10 -80
  287. package/contracts/shared/ProxyManager.sol +98 -24
  288. package/contracts/shared/Registerable.sol +3 -10
  289. package/contracts/shared/RegistryLinked.sol +10 -26
  290. package/contracts/shared/Service.sol +29 -17
  291. package/contracts/shared/TokenHandler.sol +11 -5
  292. package/contracts/shared/Versionable.sol +1 -90
  293. package/contracts/test/TestService.sol +1 -1
  294. package/contracts/types/Amount.sol +70 -0
  295. package/contracts/types/Blocknumber.sol +1 -0
  296. package/contracts/types/ClaimId.sol +75 -0
  297. package/contracts/types/Fee.sol +13 -5
  298. package/contracts/types/NftId.sol +8 -0
  299. package/contracts/types/ObjectType.sol +12 -7
  300. package/contracts/types/PayoutId.sol +82 -0
  301. package/contracts/types/Referral.sol +4 -0
  302. package/contracts/types/RoleId.sol +16 -9
  303. package/contracts/types/Seconds.sol +54 -0
  304. package/contracts/types/StateId.sol +7 -2
  305. package/contracts/types/Timestamp.sol +18 -13
  306. package/contracts/types/UFixed.sol +1 -0
  307. package/contracts/types/Version.sol +1 -0
  308. package/package.json +1 -1
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  311. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  313. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  315. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  317. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  319. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  321. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  323. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  325. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  327. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  329. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  331. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  333. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  335. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  337. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  339. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  341. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  343. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  345. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  347. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  349. package/contracts/experiment/cloning/Cloner.sol +0 -47
  350. package/contracts/experiment/errors/Require.sol +0 -38
  351. package/contracts/experiment/errors/Revert.sol +0 -44
  352. package/contracts/experiment/inheritance/A.sol +0 -53
  353. package/contracts/experiment/inheritance/B.sol +0 -28
  354. package/contracts/experiment/inheritance/C.sol +0 -34
  355. package/contracts/experiment/inheritance/IA.sol +0 -13
  356. package/contracts/experiment/inheritance/IB.sol +0 -10
  357. package/contracts/experiment/inheritance/IC.sol +0 -12
  358. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  359. package/contracts/experiment/statemachine/ISM.sol +0 -25
  360. package/contracts/experiment/statemachine/SM.sol +0 -57
  361. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  362. package/contracts/experiment/types/TypeA.sol +0 -47
  363. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -472,8 +472,8 @@
472
472
  "type": "function"
473
473
  }
474
474
  ],
475
- "bytecode": "0x610a2a61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c80637a858b97116100cd578063bc1b392d11610086578063bc1b392d146102c7578063bdbb4630146102ce578063c8a4ac9c146102d5578063cc8b7b73146102e8578063ea6515c4146102fb578063eb646d711461030e57600080fd5b80637a858b971461025f57806389fa8ed71461027257806393aa872514610287578063a391c15b1461028e578063b4773329146102a1578063b67d77c5146102b457600080fd5b8063313ce5671161011f578063313ce567146101f957806332148d731461020057806344aa68361461021357806345ebb61e14610226578063753b14a514610239578063771602f71461024c57600080fd5b8063059f8b161461016757806308c76ec414610182578063118fc88c146101955780631488c845146101b85780631a12cd47146101cb57806321e5749b146101e6575b600080fd5b61016f610316565b6040519081526020015b60405180910390f35b61016f610190366004610797565b610325565b6101a86101a33660046107cd565b6103ad565b6040519015158152602001610179565b61016f6101c63660046107ef565b6103ba565b6101d3601281565b60405160009190910b8152602001610179565b6101a86101f43660046107cd565b61049c565b601261016f565b6101a861020e3660046107cd565b6104a6565b61016f61022136600461081a565b6104b0565b61016f61023436600461081a565b6104bd565b6101a861024736600461081a565b6104d5565b61016f61025a3660046107cd565b6104de565b6101a861026d36600461081a565b6104ea565b60025b60405160ff9091168152602001610179565b6000610275565b61016f61029c3660046107cd565b6104f4565b6101a86102af3660046107cd565b610500565b61016f6102c23660046107cd565b61050b565b600061016f565b6001610275565b61016f6102e33660046107cd565b610517565b61016f6102f63660046107cd565b610523565b6101a86103093660046107cd565b61052f565b61016f61053a565b6103226012600a61092d565b81565b600060011960ff8316016103745761036d60026103446012600a61092d565b61034e919061094f565b6103589085610971565b60016103666012600a61092d565b6000610552565b90506103a7565b60ff821661038e5761036d8360016103666012600a61092d565b61036d8360016103a06012600a61092d565b6001610552565b92915050565b60008282115b9392505050565b6000806103c8836012610984565b60000b121561041e5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c0060448201526064015b60405180910390fd5b604061042b836012610984565b60000b131561047c5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c41524745006044820152606401610415565b610487826012610984565b61049290600a6109a5565b6103b390846109b4565b60008282106103b3565b60008183146103b3565b60006103a7826002610325565b60006104cb6012600a61092d565b6103a790836109b4565b600081156103a7565b60006103b383836105af565b60008115156103a7565b60006103b383836105bb565b6000828211156103b3565b60006103b3838361061f565b60006103b3838361067b565b60006103b38383610690565b6000828210156103b3565b60026105486012600a61092d565b610322919061094f565b6000806105608686866106ae565b90506001836002811115610576576105766109cb565b14801561059357506000848061058e5761058e610939565b868809115b156105a6576105a3600182610971565b90505b95945050505050565b60006103b38284610971565b600080821161060c5760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a55464d2d3032303a44495649534f525f5a45524f0000000000006044820152606401610415565b6103b383670de0b6b3a7640000846106ae565b6000828211156106715760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a55464d2d3031303a4e454741544956455f524553554c540000006044820152606401610415565b6103b382846109e1565b60006103b38383670de0b6b3a76400006106ae565b6000828210156106a45761036d838361061f565b6103b3828461061f565b60008080600019858709858702925082811083820303915050806000036106e8578382816106de576106de610939565b04925050506103b3565b80841161072f5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610415565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080604083850312156107aa57600080fd5b82359150602083013560ff811681146107c257600080fd5b809150509250929050565b600080604083850312156107e057600080fd5b50508035926020909101359150565b6000806040838503121561080257600080fd5b8235915060208301358060000b81146107c257600080fd5b60006020828403121561082c57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561088457816000190482111561086a5761086a610833565b8085161561087757918102915b93841c939080029061084e565b509250929050565b60008261089b575060016103a7565b816108a8575060006103a7565b81600181146108be57600281146108c8576108e4565b60019150506103a7565b60ff8411156108d9576108d9610833565b50506001821b6103a7565b5060208310610133831016604e8410600b8410161715610907575081810a6103a7565b6109118383610849565b806000190482111561092557610925610833565b029392505050565b60006103b3838361088c565b634e487b7160e01b600052601260045260246000fd5b60008261096c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103a7576103a7610833565b600081810b9083900b01607f8113607f19821217156103a7576103a7610833565b60006103b360ff84168361088c565b80820281158282048414176103a7576103a7610833565b634e487b7160e01b600052602160045260246000fd5b818103818111156103a7576103a761083356fea2646970667358221220f659b86edd0962c8a443cf254dd05085c2f84aebd873f9d04820daa9354e580d64736f6c63430008140033",
476
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c80637a858b97116100cd578063bc1b392d11610086578063bc1b392d146102c7578063bdbb4630146102ce578063c8a4ac9c146102d5578063cc8b7b73146102e8578063ea6515c4146102fb578063eb646d711461030e57600080fd5b80637a858b971461025f57806389fa8ed71461027257806393aa872514610287578063a391c15b1461028e578063b4773329146102a1578063b67d77c5146102b457600080fd5b8063313ce5671161011f578063313ce567146101f957806332148d731461020057806344aa68361461021357806345ebb61e14610226578063753b14a514610239578063771602f71461024c57600080fd5b8063059f8b161461016757806308c76ec414610182578063118fc88c146101955780631488c845146101b85780631a12cd47146101cb57806321e5749b146101e6575b600080fd5b61016f610316565b6040519081526020015b60405180910390f35b61016f610190366004610797565b610325565b6101a86101a33660046107cd565b6103ad565b6040519015158152602001610179565b61016f6101c63660046107ef565b6103ba565b6101d3601281565b60405160009190910b8152602001610179565b6101a86101f43660046107cd565b61049c565b601261016f565b6101a861020e3660046107cd565b6104a6565b61016f61022136600461081a565b6104b0565b61016f61023436600461081a565b6104bd565b6101a861024736600461081a565b6104d5565b61016f61025a3660046107cd565b6104de565b6101a861026d36600461081a565b6104ea565b60025b60405160ff9091168152602001610179565b6000610275565b61016f61029c3660046107cd565b6104f4565b6101a86102af3660046107cd565b610500565b61016f6102c23660046107cd565b61050b565b600061016f565b6001610275565b61016f6102e33660046107cd565b610517565b61016f6102f63660046107cd565b610523565b6101a86103093660046107cd565b61052f565b61016f61053a565b6103226012600a61092d565b81565b600060011960ff8316016103745761036d60026103446012600a61092d565b61034e919061094f565b6103589085610971565b60016103666012600a61092d565b6000610552565b90506103a7565b60ff821661038e5761036d8360016103666012600a61092d565b61036d8360016103a06012600a61092d565b6001610552565b92915050565b60008282115b9392505050565b6000806103c8836012610984565b60000b121561041e5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c0060448201526064015b60405180910390fd5b604061042b836012610984565b60000b131561047c5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c41524745006044820152606401610415565b610487826012610984565b61049290600a6109a5565b6103b390846109b4565b60008282106103b3565b60008183146103b3565b60006103a7826002610325565b60006104cb6012600a61092d565b6103a790836109b4565b600081156103a7565b60006103b383836105af565b60008115156103a7565b60006103b383836105bb565b6000828211156103b3565b60006103b3838361061f565b60006103b3838361067b565b60006103b38383610690565b6000828210156103b3565b60026105486012600a61092d565b610322919061094f565b6000806105608686866106ae565b90506001836002811115610576576105766109cb565b14801561059357506000848061058e5761058e610939565b868809115b156105a6576105a3600182610971565b90505b95945050505050565b60006103b38284610971565b600080821161060c5760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a55464d2d3032303a44495649534f525f5a45524f0000000000006044820152606401610415565b6103b383670de0b6b3a7640000846106ae565b6000828211156106715760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a55464d2d3031303a4e454741544956455f524553554c540000006044820152606401610415565b6103b382846109e1565b60006103b38383670de0b6b3a76400006106ae565b6000828210156106a45761036d838361061f565b6103b3828461061f565b60008080600019858709858702925082811083820303915050806000036106e8578382816106de576106de610939565b04925050506103b3565b80841161072f5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610415565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080604083850312156107aa57600080fd5b82359150602083013560ff811681146107c257600080fd5b809150509250929050565b600080604083850312156107e057600080fd5b50508035926020909101359150565b6000806040838503121561080257600080fd5b8235915060208301358060000b81146107c257600080fd5b60006020828403121561082c57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561088457816000190482111561086a5761086a610833565b8085161561087757918102915b93841c939080029061084e565b509250929050565b60008261089b575060016103a7565b816108a8575060006103a7565b81600181146108be57600281146108c8576108e4565b60019150506103a7565b60ff8411156108d9576108d9610833565b50506001821b6103a7565b5060208310610133831016604e8410600b8410161715610907575081810a6103a7565b6109118383610849565b806000190482111561092557610925610833565b029392505050565b60006103b3838361088c565b634e487b7160e01b600052601260045260246000fd5b60008261096c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103a7576103a7610833565b600081810b9083900b01607f8113607f19821217156103a7576103a7610833565b60006103b360ff84168361088c565b80820281158282048414176103a7576103a7610833565b634e487b7160e01b600052602160045260246000fd5b818103818111156103a7576103a761083356fea2646970667358221220f659b86edd0962c8a443cf254dd05085c2f84aebd873f9d04820daa9354e580d64736f6c63430008140033",
475
+ "bytecode": "0x610a2a61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c80637a858b97116100cd578063bc1b392d11610086578063bc1b392d146102c7578063bdbb4630146102ce578063c8a4ac9c146102d5578063cc8b7b73146102e8578063ea6515c4146102fb578063eb646d711461030e57600080fd5b80637a858b971461025f57806389fa8ed71461027257806393aa872514610287578063a391c15b1461028e578063b4773329146102a1578063b67d77c5146102b457600080fd5b8063313ce5671161011f578063313ce567146101f957806332148d731461020057806344aa68361461021357806345ebb61e14610226578063753b14a514610239578063771602f71461024c57600080fd5b8063059f8b161461016757806308c76ec414610182578063118fc88c146101955780631488c845146101b85780631a12cd47146101cb57806321e5749b146101e6575b600080fd5b61016f610316565b6040519081526020015b60405180910390f35b61016f610190366004610797565b610325565b6101a86101a33660046107cd565b6103ad565b6040519015158152602001610179565b61016f6101c63660046107ef565b6103ba565b6101d3601281565b60405160009190910b8152602001610179565b6101a86101f43660046107cd565b61049c565b601261016f565b6101a861020e3660046107cd565b6104a6565b61016f61022136600461081a565b6104b0565b61016f61023436600461081a565b6104bd565b6101a861024736600461081a565b6104d5565b61016f61025a3660046107cd565b6104de565b6101a861026d36600461081a565b6104ea565b60025b60405160ff9091168152602001610179565b6000610275565b61016f61029c3660046107cd565b6104f4565b6101a86102af3660046107cd565b610500565b61016f6102c23660046107cd565b61050b565b600061016f565b6001610275565b61016f6102e33660046107cd565b610517565b61016f6102f63660046107cd565b610523565b6101a86103093660046107cd565b61052f565b61016f61053a565b6103226012600a61092d565b81565b600060011960ff8316016103745761036d60026103446012600a61092d565b61034e919061094f565b6103589085610971565b60016103666012600a61092d565b6000610552565b90506103a7565b60ff821661038e5761036d8360016103666012600a61092d565b61036d8360016103a06012600a61092d565b6001610552565b92915050565b60008282115b9392505050565b6000806103c8836012610984565b60000b121561041e5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c0060448201526064015b60405180910390fd5b604061042b836012610984565b60000b131561047c5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c41524745006044820152606401610415565b610487826012610984565b61049290600a6109a5565b6103b390846109b4565b60008282106103b3565b60008183146103b3565b60006103a7826002610325565b60006104cb6012600a61092d565b6103a790836109b4565b600081156103a7565b60006103b383836105af565b60008115156103a7565b60006103b383836105bb565b6000828211156103b3565b60006103b3838361061f565b60006103b3838361067b565b60006103b38383610690565b6000828210156103b3565b60026105486012600a61092d565b610322919061094f565b6000806105608686866106ae565b90506001836002811115610576576105766109cb565b14801561059357506000848061058e5761058e610939565b868809115b156105a6576105a3600182610971565b90505b95945050505050565b60006103b38284610971565b600080821161060c5760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a55464d2d3032303a44495649534f525f5a45524f0000000000006044820152606401610415565b6103b383670de0b6b3a7640000846106ae565b6000828211156106715760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a55464d2d3031303a4e454741544956455f524553554c540000006044820152606401610415565b6103b382846109e1565b60006103b38383670de0b6b3a76400006106ae565b6000828210156106a45761036d838361061f565b6103b3828461061f565b60008080600019858709858702925082811083820303915050806000036106e8578382816106de576106de610939565b04925050506103b3565b80841161072f5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610415565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080604083850312156107aa57600080fd5b82359150602083013560ff811681146107c257600080fd5b809150509250929050565b600080604083850312156107e057600080fd5b50508035926020909101359150565b6000806040838503121561080257600080fd5b8235915060208301358060000b81146107c257600080fd5b60006020828403121561082c57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561088457816000190482111561086a5761086a610833565b8085161561087757918102915b93841c939080029061084e565b509250929050565b60008261089b575060016103a7565b816108a8575060006103a7565b81600181146108be57600281146108c8576108e4565b60019150506103a7565b60ff8411156108d9576108d9610833565b50506001821b6103a7565b5060208310610133831016604e8410600b8410161715610907575081810a6103a7565b6109118383610849565b806000190482111561092557610925610833565b029392505050565b60006103b3838361088c565b634e487b7160e01b600052601260045260246000fd5b60008261096c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103a7576103a7610833565b600081810b9083900b01607f8113607f19821217156103a7576103a7610833565b60006103b360ff84168361088c565b80820281158282048414176103a7576103a7610833565b634e487b7160e01b600052602160045260246000fd5b818103818111156103a7576103a761083356fea2646970667358221220bf133d0c138c18bc61ded1b407424a979556fd8b0354b7c8f51b313c2d08fa2264736f6c63430008140033",
476
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c80637a858b97116100cd578063bc1b392d11610086578063bc1b392d146102c7578063bdbb4630146102ce578063c8a4ac9c146102d5578063cc8b7b73146102e8578063ea6515c4146102fb578063eb646d711461030e57600080fd5b80637a858b971461025f57806389fa8ed71461027257806393aa872514610287578063a391c15b1461028e578063b4773329146102a1578063b67d77c5146102b457600080fd5b8063313ce5671161011f578063313ce567146101f957806332148d731461020057806344aa68361461021357806345ebb61e14610226578063753b14a514610239578063771602f71461024c57600080fd5b8063059f8b161461016757806308c76ec414610182578063118fc88c146101955780631488c845146101b85780631a12cd47146101cb57806321e5749b146101e6575b600080fd5b61016f610316565b6040519081526020015b60405180910390f35b61016f610190366004610797565b610325565b6101a86101a33660046107cd565b6103ad565b6040519015158152602001610179565b61016f6101c63660046107ef565b6103ba565b6101d3601281565b60405160009190910b8152602001610179565b6101a86101f43660046107cd565b61049c565b601261016f565b6101a861020e3660046107cd565b6104a6565b61016f61022136600461081a565b6104b0565b61016f61023436600461081a565b6104bd565b6101a861024736600461081a565b6104d5565b61016f61025a3660046107cd565b6104de565b6101a861026d36600461081a565b6104ea565b60025b60405160ff9091168152602001610179565b6000610275565b61016f61029c3660046107cd565b6104f4565b6101a86102af3660046107cd565b610500565b61016f6102c23660046107cd565b61050b565b600061016f565b6001610275565b61016f6102e33660046107cd565b610517565b61016f6102f63660046107cd565b610523565b6101a86103093660046107cd565b61052f565b61016f61053a565b6103226012600a61092d565b81565b600060011960ff8316016103745761036d60026103446012600a61092d565b61034e919061094f565b6103589085610971565b60016103666012600a61092d565b6000610552565b90506103a7565b60ff821661038e5761036d8360016103666012600a61092d565b61036d8360016103a06012600a61092d565b6001610552565b92915050565b60008282115b9392505050565b6000806103c8836012610984565b60000b121561041e5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c0060448201526064015b60405180910390fd5b604061042b836012610984565b60000b131561047c5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c41524745006044820152606401610415565b610487826012610984565b61049290600a6109a5565b6103b390846109b4565b60008282106103b3565b60008183146103b3565b60006103a7826002610325565b60006104cb6012600a61092d565b6103a790836109b4565b600081156103a7565b60006103b383836105af565b60008115156103a7565b60006103b383836105bb565b6000828211156103b3565b60006103b3838361061f565b60006103b3838361067b565b60006103b38383610690565b6000828210156103b3565b60026105486012600a61092d565b610322919061094f565b6000806105608686866106ae565b90506001836002811115610576576105766109cb565b14801561059357506000848061058e5761058e610939565b868809115b156105a6576105a3600182610971565b90505b95945050505050565b60006103b38284610971565b600080821161060c5760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a55464d2d3032303a44495649534f525f5a45524f0000000000006044820152606401610415565b6103b383670de0b6b3a7640000846106ae565b6000828211156106715760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a55464d2d3031303a4e454741544956455f524553554c540000006044820152606401610415565b6103b382846109e1565b60006103b38383670de0b6b3a76400006106ae565b6000828210156106a45761036d838361061f565b6103b3828461061f565b60008080600019858709858702925082811083820303915050806000036106e8578382816106de576106de610939565b04925050506103b3565b80841161072f5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610415565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080604083850312156107aa57600080fd5b82359150602083013560ff811681146107c257600080fd5b809150509250929050565b600080604083850312156107e057600080fd5b50508035926020909101359150565b6000806040838503121561080257600080fd5b8235915060208301358060000b81146107c257600080fd5b60006020828403121561082c57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561088457816000190482111561086a5761086a610833565b8085161561087757918102915b93841c939080029061084e565b509250929050565b60008261089b575060016103a7565b816108a8575060006103a7565b81600181146108be57600281146108c8576108e4565b60019150506103a7565b60ff8411156108d9576108d9610833565b50506001821b6103a7565b5060208310610133831016604e8410600b8410161715610907575081810a6103a7565b6109118383610849565b806000190482111561092557610925610833565b029392505050565b60006103b3838361088c565b634e487b7160e01b600052601260045260246000fd5b60008261096c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103a7576103a7610833565b600081810b9083900b01607f8113607f19821217156103a7576103a7610833565b60006103b360ff84168361088c565b80820281158282048414176103a7576103a7610833565b634e487b7160e01b600052602160045260246000fd5b818103818111156103a7576103a761083356fea2646970667358221220bf133d0c138c18bc61ded1b407424a979556fd8b0354b7c8f51b313c2d08fa2264736f6c63430008140033",
477
477
  "linkReferences": {},
478
478
  "deployedLinkReferences": {}
479
479
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/50adf9af448e35bdd3c5c59402cffb9f.json"
3
+ "buildInfo": "../../../build-info/3988da3521a0d3ba87aa570adab83c14.json"
4
4
  }
@@ -170,8 +170,8 @@
170
170
  "type": "function"
171
171
  }
172
172
  ],
173
- "bytecode": "0x61039161003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c80638e4ad86c116100655780638e4ad86c1461012157806394aa449c14610144578063a123b37c14610152578063c9e66e291461017957600080fd5b806304b8f6c5146100975780632efe0113146100b357806349a7111a146100c657806355601007146100fd575b600080fd5b60005b60405162ffffff90911681526020015b60405180910390f35b61009a6100c136600461026e565b610190565b6100d96100d436600461029a565b610231565b6040805160ff948516815292841660208401529216918101919091526060016100aa565b61011361010b36600461029a565b62ffffff1690565b6040519081526020016100aa565b61013261012f3660046102c6565b90565b60405160ff90911681526020016100aa565b61009a61012f3660046102df565b61016061010b36600461029a565b60405167ffffffffffffffff90911681526020016100aa565b61013261018736600461029a565b60101c60ff1690565b6000610100841080156101a4575061010083105b80156101b1575061010082105b61020c5760405162461bcd60e51b815260206004820152602260248201527f4552524f523a5652532d3031303a56455253494f4e5f504152545f544f4f5f42604482015261494760f01b606482015260840160405180910390fd5b8161021f600885901b601087901b61031f565b610229919061031f565b949350505050565b600080808360ff601082901c166102488383610338565b915061ffff600883901c16600061025f8185610338565b92989197509195509350505050565b60008060006060848603121561028357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156102ac57600080fd5b813562ffffff811681146102bf57600080fd5b9392505050565b6000602082840312156102d857600080fd5b5035919050565b6000602082840312156102f157600080fd5b813567ffffffffffffffff811681146102bf57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561033257610332610309565b92915050565b62ffffff82811682821603908082111561035457610354610309565b509291505056fea264697066735822122096e4b37266f82e0aaf6f30afa90c545c35f82576ca3b67d630233921e58f525b64736f6c63430008140033",
174
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c80638e4ad86c116100655780638e4ad86c1461012157806394aa449c14610144578063a123b37c14610152578063c9e66e291461017957600080fd5b806304b8f6c5146100975780632efe0113146100b357806349a7111a146100c657806355601007146100fd575b600080fd5b60005b60405162ffffff90911681526020015b60405180910390f35b61009a6100c136600461026e565b610190565b6100d96100d436600461029a565b610231565b6040805160ff948516815292841660208401529216918101919091526060016100aa565b61011361010b36600461029a565b62ffffff1690565b6040519081526020016100aa565b61013261012f3660046102c6565b90565b60405160ff90911681526020016100aa565b61009a61012f3660046102df565b61016061010b36600461029a565b60405167ffffffffffffffff90911681526020016100aa565b61013261018736600461029a565b60101c60ff1690565b6000610100841080156101a4575061010083105b80156101b1575061010082105b61020c5760405162461bcd60e51b815260206004820152602260248201527f4552524f523a5652532d3031303a56455253494f4e5f504152545f544f4f5f42604482015261494760f01b606482015260840160405180910390fd5b8161021f600885901b601087901b61031f565b610229919061031f565b949350505050565b600080808360ff601082901c166102488383610338565b915061ffff600883901c16600061025f8185610338565b92989197509195509350505050565b60008060006060848603121561028357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156102ac57600080fd5b813562ffffff811681146102bf57600080fd5b9392505050565b6000602082840312156102d857600080fd5b5035919050565b6000602082840312156102f157600080fd5b813567ffffffffffffffff811681146102bf57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561033257610332610309565b92915050565b62ffffff82811682821603908082111561035457610354610309565b509291505056fea264697066735822122096e4b37266f82e0aaf6f30afa90c545c35f82576ca3b67d630233921e58f525b64736f6c63430008140033",
173
+ "bytecode": "0x61039161003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c80638e4ad86c116100655780638e4ad86c1461012157806394aa449c14610144578063a123b37c14610152578063c9e66e291461017957600080fd5b806304b8f6c5146100975780632efe0113146100b357806349a7111a146100c657806355601007146100fd575b600080fd5b60005b60405162ffffff90911681526020015b60405180910390f35b61009a6100c136600461026e565b610190565b6100d96100d436600461029a565b610231565b6040805160ff948516815292841660208401529216918101919091526060016100aa565b61011361010b36600461029a565b62ffffff1690565b6040519081526020016100aa565b61013261012f3660046102c6565b90565b60405160ff90911681526020016100aa565b61009a61012f3660046102df565b61016061010b36600461029a565b60405167ffffffffffffffff90911681526020016100aa565b61013261018736600461029a565b60101c60ff1690565b6000610100841080156101a4575061010083105b80156101b1575061010082105b61020c5760405162461bcd60e51b815260206004820152602260248201527f4552524f523a5652532d3031303a56455253494f4e5f504152545f544f4f5f42604482015261494760f01b606482015260840160405180910390fd5b8161021f600885901b601087901b61031f565b610229919061031f565b949350505050565b600080808360ff601082901c166102488383610338565b915061ffff600883901c16600061025f8185610338565b92989197509195509350505050565b60008060006060848603121561028357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156102ac57600080fd5b813562ffffff811681146102bf57600080fd5b9392505050565b6000602082840312156102d857600080fd5b5035919050565b6000602082840312156102f157600080fd5b813567ffffffffffffffff811681146102bf57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561033257610332610309565b92915050565b62ffffff82811682821603908082111561035457610354610309565b509291505056fea2646970667358221220801f2c14b03a7330f0c0f9dce2a4a4bea8603a2ffbea5bb26b7564e07c0d257564736f6c63430008140033",
174
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c80638e4ad86c116100655780638e4ad86c1461012157806394aa449c14610144578063a123b37c14610152578063c9e66e291461017957600080fd5b806304b8f6c5146100975780632efe0113146100b357806349a7111a146100c657806355601007146100fd575b600080fd5b60005b60405162ffffff90911681526020015b60405180910390f35b61009a6100c136600461026e565b610190565b6100d96100d436600461029a565b610231565b6040805160ff948516815292841660208401529216918101919091526060016100aa565b61011361010b36600461029a565b62ffffff1690565b6040519081526020016100aa565b61013261012f3660046102c6565b90565b60405160ff90911681526020016100aa565b61009a61012f3660046102df565b61016061010b36600461029a565b60405167ffffffffffffffff90911681526020016100aa565b61013261018736600461029a565b60101c60ff1690565b6000610100841080156101a4575061010083105b80156101b1575061010082105b61020c5760405162461bcd60e51b815260206004820152602260248201527f4552524f523a5652532d3031303a56455253494f4e5f504152545f544f4f5f42604482015261494760f01b606482015260840160405180910390fd5b8161021f600885901b601087901b61031f565b610229919061031f565b949350505050565b600080808360ff601082901c166102488383610338565b915061ffff600883901c16600061025f8185610338565b92989197509195509350505050565b60008060006060848603121561028357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156102ac57600080fd5b813562ffffff811681146102bf57600080fd5b9392505050565b6000602082840312156102d857600080fd5b5035919050565b6000602082840312156102f157600080fd5b813567ffffffffffffffff811681146102bf57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561033257610332610309565b92915050565b62ffffff82811682821603908082111561035457610354610309565b509291505056fea2646970667358221220801f2c14b03a7330f0c0f9dce2a4a4bea8603a2ffbea5bb26b7564e07c0d257564736f6c63430008140033",
175
175
  "linkReferences": {},
176
176
  "deployedLinkReferences": {}
177
177
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/50adf9af448e35bdd3c5c59402cffb9f.json"
3
+ "buildInfo": "../../../build-info/3988da3521a0d3ba87aa570adab83c14.json"
4
4
  }
@@ -42,8 +42,8 @@
42
42
  "type": "function"
43
43
  }
44
44
  ],
45
- "bytecode": "0x60fb610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea264697066735822122074bb6f75f2cab9692d05e41844bf40283045a9440c662c37a97b2502d38207ed64736f6c63430008140033",
46
- "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea264697066735822122074bb6f75f2cab9692d05e41844bf40283045a9440c662c37a97b2502d38207ed64736f6c63430008140033",
45
+ "bytecode": "0x60fb610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220cdee50fe6c9714f8463d3a3d707ceac1b02f5c17b070c998ecfbac805f95cace64736f6c63430008140033",
46
+ "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c80638e4ad86c146042578063ac43d834146067575b600080fd5b6050604d3660046085565b90565b60405160ff90911681526020015b60405180910390f35b60786072366004609d565b60ff1690565b604051908152602001605e565b600060208284031215609657600080fd5b5035919050565b60006020828403121560ae57600080fd5b813560ff8116811460be57600080fd5b939250505056fea2646970667358221220cdee50fe6c9714f8463d3a3d707ceac1b02f5c17b070c998ecfbac805f95cace64736f6c63430008140033",
47
47
  "linkReferences": {},
48
48
  "deployedLinkReferences": {}
49
49
  }
@@ -1,11 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
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";
7
8
 
8
9
  import {IComponent} from "./IComponent.sol";
10
+ import {IComponents} from "../instance/module/IComponents.sol";
9
11
  import {IProductService} from "../instance/service/IProductService.sol";
10
12
  import {IInstanceService} from "../instance/IInstanceService.sol";
11
13
  import {IInstance} from "../instance/IInstance.sol";
@@ -18,6 +20,7 @@ import {VersionPart} from "../types/Version.sol";
18
20
  import {Registerable} from "../shared/Registerable.sol";
19
21
  import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
22
  import {IAccess} from "../instance/module/IAccess.sol";
23
+ import {VersionPart} from "../types/Version.sol";
21
24
 
22
25
  // TODO discuss to inherit from oz accessmanaged
23
26
  // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
@@ -28,21 +31,23 @@ abstract contract Component is
28
31
  AccessManagedUpgradeable
29
32
  {
30
33
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
31
- bytes32 public constant CONTRACT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
34
+ bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
32
35
 
33
36
  struct ComponentStorage {
34
- IInstance _instance; // instance for this component
35
- InstanceReader _instanceReader; // instance reader for this component
36
37
  string _name; // unique (per instance) component name
37
38
  IERC20Metadata _token; // token for this component
39
+ IInstance _instance; // instance for this component
38
40
  address _wallet; // wallet for this component (default = component contract itself)
41
+ InstanceReader _instanceReader; // instance reader for this component
39
42
  bool _isNftInterceptor; // declares if component is involved in nft transfers
40
- IInstanceService _instanceService; // instance service for this component
41
-
42
43
  NftId _productNftId; // only relevant for components that are linked to a aproduct
43
- IProductService _productService; // product service for component, might not be relevant for some component types (eg oracles)
44
44
  }
45
45
 
46
+ function _getComponentStorage() private pure returns (ComponentStorage storage $) {
47
+ assembly {
48
+ $.slot := COMPONENT_LOCATION_V1
49
+ }
50
+ }
46
51
 
47
52
  modifier onlyChainNft() {
48
53
  if(msg.sender != getRegistry().getChainNftAddress()) {
@@ -51,20 +56,6 @@ abstract contract Component is
51
56
  _;
52
57
  }
53
58
 
54
-
55
- modifier onlyProductService() {
56
- if(msg.sender != address(_getComponentStorage()._productService)) {
57
- revert ErrorComponentNotProductService(msg.sender);
58
- }
59
- _;
60
- }
61
-
62
- function _getComponentStorage() private pure returns (ComponentStorage storage $) {
63
- assembly {
64
- $.slot := CONTRACT_LOCATION_V1
65
- }
66
- }
67
-
68
59
  function initializeComponent(
69
60
  address registry,
70
61
  NftId instanceNftId,
@@ -73,78 +64,45 @@ abstract contract Component is
73
64
  ObjectType componentType,
74
65
  bool isInterceptor,
75
66
  address initialOwner,
76
- bytes memory data
67
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
77
68
  )
78
69
  public
79
70
  virtual
80
71
  onlyInitializing()
81
72
  {
82
- ComponentStorage storage $ = _getComponentStorage();
83
- initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
84
-
85
- // set unique name of component
86
- $._name = name;
87
- $._isNftInterceptor = isInterceptor;
73
+ initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, registryData);
88
74
 
89
75
  // set and check linked instance
90
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
91
- $._instance = IInstance(instanceInfo.objectAddress);
76
+ ComponentStorage storage $ = _getComponentStorage();
77
+ $._instance = IInstance(
78
+ getRegistry().getObjectInfo(instanceNftId).objectAddress);
79
+
92
80
  if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
93
- revert ErrorComponentNotInstance(instanceNftId, instanceInfo.objectAddress);
81
+ revert ErrorComponentNotInstance(instanceNftId);
94
82
  }
95
83
 
96
84
  // initialize AccessManagedUpgradeable
97
85
  __AccessManaged_init($._instance.authority());
98
86
 
99
- // set linked services
100
- VersionPart gifVersion = $._instance.getMajorVersion();
101
- $._instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), gifVersion));
87
+ // set component state
88
+ $._name = name;
89
+ $._isNftInterceptor = isInterceptor;
102
90
  $._instanceReader = $._instance.getInstanceReader();
103
- $._productService = IProductService(getRegistry().getServiceAddress(PRODUCT(), gifVersion));
104
-
105
- // set wallet and token
106
91
  $._wallet = address(this);
107
92
  $._token = IERC20Metadata(token);
108
93
 
94
+ registerInterface(type(IAccessManaged).interfaceId);
109
95
  registerInterface(type(IComponent).interfaceId);
110
96
  }
111
97
 
112
- /// @dev callback function for nft transfers. may only be called by chain nft contract.
113
- /// default implementation is empty. overriding functions MUST add onlyChainNft modifier
114
- function nftTransferFrom(address from, address to, uint256 tokenId)
115
- external
116
- virtual override
117
- onlyChainNft()
118
- { }
119
-
120
- // TODO discuss replacement with modifier restricted from accessmanaged
121
98
  function lock() external onlyOwner override {
122
- _getComponentStorage()._instanceService.setTargetLocked(getName(), true);
99
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
123
100
  }
124
101
 
125
102
  function unlock() external onlyOwner override {
126
- _getComponentStorage()._instanceService.setTargetLocked(getName(), false);
127
- }
128
-
129
- // only product service may set product nft id during registration of product setup
130
- function setProductNftId(NftId productNftId)
131
- external
132
- override
133
- onlyProductService()
134
- {
135
- ComponentStorage storage $ = _getComponentStorage();
136
-
137
- if($._productNftId.gtz()) {
138
- revert ErrorComponentProductNftAlreadySet();
139
- }
140
-
141
- $._productNftId = productNftId;
103
+ IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
142
104
  }
143
105
 
144
- /// @dev Sets the wallet address for the component.
145
- /// if the current wallet has tokens, these will be transferred.
146
- /// if the new wallet address is externally owned, an approval from the
147
- /// owner of the external wallet for the component to move all tokens must exist.
148
106
  function setWallet(address newWallet)
149
107
  external
150
108
  override
@@ -159,8 +117,9 @@ abstract contract Component is
159
117
  if (newWallet == address(0)) {
160
118
  revert ErrorComponentWalletAddressZero();
161
119
  }
120
+
162
121
  if (newWallet == currentWallet) {
163
- revert ErrorComponentWalletAddressIsSameAsCurrent(newWallet);
122
+ revert ErrorComponentWalletAddressIsSameAsCurrent();
164
123
  }
165
124
 
166
125
  if (currentBalance > 0) {
@@ -177,7 +136,7 @@ abstract contract Component is
177
136
 
178
137
  // effects
179
138
  $._wallet = newWallet;
180
- emit LogComponentWalletAddressChanged(newWallet);
139
+ emit LogComponentWalletAddressChanged(currentWallet, newWallet);
181
140
 
182
141
  // interactions
183
142
  if (currentBalance > 0) {
@@ -192,11 +151,44 @@ abstract contract Component is
192
151
  }
193
152
  }
194
153
 
195
- function getWallet()
196
- public
197
- view
154
+ function setProductNftId(NftId productNftId)
155
+ external
198
156
  override
199
- returns (address walletAddress)
157
+ {
158
+ ComponentStorage storage $ = _getComponentStorage();
159
+
160
+ // verify caller is product service
161
+ if(msg.sender != _getServiceAddress(PRODUCT())) {
162
+ revert ErrorComponentNotProductService(msg.sender);
163
+ }
164
+
165
+ // verify component is not yet linked to a product
166
+ if($._productNftId.gtz()) {
167
+ revert ErrorComponentProductNftAlreadySet();
168
+ }
169
+
170
+ $._productNftId = productNftId;
171
+ }
172
+
173
+ function nftMint(address to, uint256 tokenId)
174
+ external
175
+ virtual
176
+ onlyChainNft
177
+ {}
178
+
179
+ /// @dev callback function for nft transfers
180
+ /// may only be called by chain nft contract.
181
+ /// do not override this function to implement business logic for handling transfers
182
+ /// override internal function _nftTransferFrom instead
183
+ function nftTransferFrom(address from, address to, uint256 tokenId)
184
+ external
185
+ virtual
186
+ onlyChainNft
187
+ {
188
+ _nftTransferFrom(from, to, tokenId);
189
+ }
190
+
191
+ function getWallet() public view override returns (address walletAddress)
200
192
  {
201
193
  return _getComponentStorage()._wallet;
202
194
  }
@@ -213,10 +205,6 @@ abstract contract Component is
213
205
  return _getComponentStorage()._instance;
214
206
  }
215
207
 
216
- function getInstanceReader() public view returns (InstanceReader reader) {
217
- return _getComponentStorage()._instanceReader;
218
- }
219
-
220
208
  function getName() public view override returns(string memory name) {
221
209
  return _getComponentStorage()._name;
222
210
  }
@@ -225,12 +213,41 @@ abstract contract Component is
225
213
  return _getComponentStorage()._productNftId;
226
214
  }
227
215
 
228
- function getInstanceService() public view returns (IInstanceService) {
229
- return _getComponentStorage()._instanceService;
216
+ function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
217
+ info = _getInstanceReader().getComponentInfo(getNftId());
218
+
219
+ // fallback to initial info (wallet is always != address(0))
220
+ if(info.wallet == address(0)) {
221
+ info = _getInitialInfo();
222
+ }
230
223
  }
231
224
 
232
- function getProductService() public view returns (IProductService) {
233
- return _getComponentStorage()._productService;
225
+ /// @dev defines initial component specification
226
+ /// overwrite this function according to your use case
227
+ function _getInitialInfo()
228
+ internal
229
+ view
230
+ virtual
231
+ returns (IComponents.ComponentInfo memory info)
232
+ { }
233
+
234
+
235
+ /// @dev internal function for nft transfers.
236
+ /// handling logic that deals with nft transfers need to overwrite this function
237
+ function _nftTransferFrom(address from, address to, uint256 tokenId)
238
+ internal
239
+ virtual
240
+ { }
241
+
242
+ /// @dev returns reader for linked instance
243
+ function _getInstanceReader() internal view returns (InstanceReader reader) {
244
+ return _getComponentStorage()._instanceReader;
234
245
  }
235
246
 
236
- }
247
+ /// @dev returns the service address for the specified domain
248
+ /// gets address via lookup from registry using the major version form the linked instance
249
+ function _getServiceAddress(ObjectType domain) internal view returns (address service) {
250
+ VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
251
+ return getRegistry().getServiceAddress(domain, majorVersion);
252
+ }
253
+ }
@@ -8,6 +8,7 @@ import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
8
8
  import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
10
  import {Component} from "./Component.sol";
11
+ import {IDistribution} from "../instance/module/IDistribution.sol";
11
12
  import {IDistributionComponent} from "./IDistributionComponent.sol";
12
13
  import {IRegistry} from "../registry/IRegistry.sol";
13
14
  import {IRegisterable} from "../shared/IRegisterable.sol";
@@ -17,7 +18,7 @@ import {TokenHandler} from "../shared/TokenHandler.sol";
17
18
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
19
  import {UFixed} from "../types/UFixed.sol";
19
20
  import {DistributorType} from "../types/DistributorType.sol";
20
- import {Timestamp} from "../types/Timestamp.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
21
22
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
22
23
 
23
24
 
@@ -29,37 +30,43 @@ abstract contract Distribution is
29
30
  bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
30
31
 
31
32
  struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
32
34
  Fee _distributionFee;
33
35
  TokenHandler _tokenHandler;
34
36
  IDistributionService _distributionService;
35
37
  mapping(address distributor => NftId distributorNftId) _distributorNftId;
36
38
  }
37
39
 
40
+ error ErrorDistributionAlreadyDistributor(address distributor, NftId distributorNftId);
41
+
38
42
  function initializeDistribution(
39
43
  address registry,
40
44
  NftId instanceNftId,
41
45
  string memory name,
42
46
  address token,
47
+ Fee memory minDistributionOwnerFee,
43
48
  Fee memory distributionFee,
44
49
  address initialOwner,
45
- bytes memory data
50
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
46
51
  )
47
52
  public
48
53
  virtual
49
54
  onlyInitializing()
50
55
  {
51
- initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
56
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
52
57
 
53
58
  DistributionStorage storage $ = _getDistributionStorage();
54
59
  // TODO add validation
60
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
55
61
  $._distributionFee = distributionFee;
56
62
  $._tokenHandler = new TokenHandler(token);
57
- $._distributionService = getInstance().getDistributionService();
63
+ $._distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
58
64
 
59
65
  registerInterface(type(IDistributionComponent).interfaceId);
60
66
  }
61
67
 
62
68
  function setFees(
69
+ Fee memory minDistributionOwnerFee,
63
70
  Fee memory distributionFee
64
71
  )
65
72
  external
@@ -67,7 +74,7 @@ abstract contract Distribution is
67
74
  onlyOwner
68
75
  restricted()
69
76
  {
70
- _getDistributionStorage()._distributionService.setFees(distributionFee);
77
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
71
78
  }
72
79
 
73
80
  function getDistributionFee() external view returns (Fee memory distributionFee) {
@@ -111,7 +118,9 @@ abstract contract Distribution is
111
118
  returns(NftId distributorNftId)
112
119
  {
113
120
  DistributionStorage storage $ = _getDistributionStorage();
114
- require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
121
+ if($._distributorNftId[distributor].gtz()) {
122
+ revert ErrorDistributionAlreadyDistributor(distributor, $._distributorNftId[distributor]);
123
+ }
115
124
 
116
125
  distributorNftId = $._distributionService.createDistributor(
117
126
  distributor,
@@ -141,7 +150,7 @@ abstract contract Distribution is
141
150
  * @dev lets distributors create referral codes.
142
151
  * referral codes need to be unique
143
152
  */
144
- function createReferral(
153
+ function _createReferral(
145
154
  NftId distributorNftId,
146
155
  string memory code,
147
156
  UFixed discountPercentage,
@@ -149,7 +158,7 @@ abstract contract Distribution is
149
158
  Timestamp expiryAt,
150
159
  bytes memory data
151
160
  )
152
- public // TODO: internal
161
+ internal
153
162
  returns (ReferralId referralId)
154
163
  {
155
164
  DistributionStorage storage $ = _getDistributionStorage();
@@ -162,23 +171,6 @@ abstract contract Distribution is
162
171
  data);
163
172
  }
164
173
 
165
- function calculateFeeAmount(
166
- ReferralId referralId,
167
- uint256 netPremiumAmount
168
- )
169
- external
170
- view
171
- virtual override
172
- returns (uint256 feeAmount)
173
- {
174
- // TODO: this is only if referralId is not valid
175
- ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
176
- Fee memory fee = setupInfo.distributionFee;
177
- (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
178
- // TODO: use this?
179
- // return _distributionService.calculateFeeAmount(referralId, premiumAmount);
180
- }
181
-
182
174
  function isDistributor(address candidate)
183
175
  public
184
176
  view
@@ -206,7 +198,7 @@ abstract contract Distribution is
206
198
  )
207
199
  {
208
200
  ReferralId referralId = getReferralId(referralCode);
209
- return getInstanceReader().getDiscountPercentage(referralId);
201
+ return _getInstanceReader().getDiscountPercentage(referralId);
210
202
  }
211
203
 
212
204
 
@@ -235,19 +227,6 @@ abstract contract Distribution is
235
227
  return 0 * netPremiumAmount;
236
228
  }
237
229
 
238
- function processSale(
239
- ReferralId referralId,
240
- uint256 premiumAmount
241
- )
242
- external
243
- onlyOwner
244
- restricted()
245
- virtual override
246
- {
247
- DistributionStorage storage $ = _getDistributionStorage();
248
- $._distributionService.processSale(referralId, premiumAmount);
249
- }
250
-
251
230
  function processRenewal(
252
231
  ReferralId referralId,
253
232
  uint256 feeAmount
@@ -260,11 +239,6 @@ abstract contract Distribution is
260
239
  // default is no action
261
240
  }
262
241
 
263
- function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
264
- // default is invalid
265
- return false;
266
- }
267
-
268
242
  function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
269
243
  InstanceReader reader = getInstance().getInstanceReader();
270
244
  setupInfo = reader.getDistributionSetupInfo(getNftId());
@@ -280,13 +254,15 @@ abstract contract Distribution is
280
254
  return ISetup.DistributionSetupInfo(
281
255
  zeroNftId(),
282
256
  $._tokenHandler,
257
+ $._minDistributionOwnerFee,
283
258
  $._distributionFee,
284
- address(this)
259
+ address(this),
260
+ 0
285
261
  );
286
262
  }
287
263
 
288
264
 
289
- function nftTransferFrom(address from, address to, uint256 tokenId) external virtual override (Component, ITransferInterceptor) {
265
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
290
266
  // keep track of distributor nft owner
291
267
  emit LogDistributorUpdated(to, msg.sender);
292
268
  DistributionStorage storage $ = _getDistributionStorage();