@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e964d24-516
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.
- package/README.md +6 -83
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
 - package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +129 -14
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +203 -14
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +110 -283
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +68 -54
 - package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
 - package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.json +309 -2078
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -76
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +434 -2823
 - package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +493 -129
 - package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
 - package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +406 -192
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +224 -291
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +45 -82
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
 - package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
 - package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
 - package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
 - package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
 - package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
 - package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
 - package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +291 -189
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +231 -165
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
 - package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +160 -204
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +184 -100
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +211 -100
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +120 -166
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +210 -21
 - package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +86 -28
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
 - package/artifacts/contracts/{components → product}/Product.sol/Product.json +121 -22
 - package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
 - package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
 - package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
 - package/artifacts/contracts/registry/Registry.sol/Registry.json +35 -16
 - package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +26 -53
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +30 -18
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
 - package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
 - package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
 - package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
 - package/artifacts/contracts/{components → shared}/Component.sol/Component.json +106 -7
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
 - package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +114 -35
 - package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
 - package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +196 -7
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
 - package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
 - package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
 - package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
 - package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
 - package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
 - package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
 - package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
 - package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
 - package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
 - package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
 - package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
 - package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
 - package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
 - package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
 - package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
 - package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
 - package/contracts/{components → distribution}/Distribution.sol +21 -16
 - package/contracts/distribution/DistributionService.sol +348 -0
 - package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
 - package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
 - package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
 - package/contracts/instance/BundleManager.sol +13 -12
 - package/contracts/instance/Cloneable.sol +7 -2
 - package/contracts/instance/IInstance.sol +48 -63
 - package/contracts/instance/IInstanceService.sol +31 -17
 - package/contracts/instance/Instance.sol +131 -193
 - package/contracts/instance/InstanceAccessManager.sol +405 -161
 - package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
 - package/contracts/instance/InstanceReader.sol +101 -26
 - package/contracts/instance/InstanceService.sol +173 -354
 - package/contracts/instance/InstanceServiceManager.sol +1 -1
 - package/contracts/instance/InstanceStore.sol +211 -0
 - package/contracts/instance/ObjectManager.sol +9 -11
 - package/contracts/instance/base/IKeyValueStore.sol +5 -5
 - package/contracts/instance/base/ILifecycle.sol +3 -3
 - package/contracts/instance/base/KeyValueStore.sol +18 -41
 - package/contracts/instance/base/Lifecycle.sol +27 -7
 - package/contracts/instance/module/IAccess.sol +23 -16
 - package/contracts/instance/module/IBundle.sol +10 -8
 - package/contracts/instance/module/IComponents.sol +41 -0
 - package/contracts/instance/module/IDistribution.sol +7 -6
 - package/contracts/instance/module/IPolicy.sol +19 -14
 - package/contracts/instance/module/IRisk.sol +1 -1
 - package/contracts/instance/module/ISetup.sol +5 -18
 - package/contracts/instance/module/ITreasury.sol +2 -2
 - package/contracts/pool/BundleService.sol +382 -0
 - package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
 - package/contracts/pool/IBundleService.sol +118 -0
 - package/contracts/{components → pool}/IPoolComponent.sol +19 -56
 - package/contracts/pool/IPoolService.sol +114 -0
 - package/contracts/{components → pool}/Pool.sol +62 -138
 - package/contracts/pool/PoolService.sol +403 -0
 - package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
 - package/contracts/product/ApplicationService.sol +186 -0
 - package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
 - package/contracts/product/ClaimService.sol +437 -0
 - package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
 - package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
 - package/contracts/product/IClaimService.sol +90 -0
 - package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
 - package/contracts/product/IPricingService.sol +37 -0
 - package/contracts/{components → product}/IProductComponent.sol +11 -10
 - package/contracts/{instance/service → product}/IProductService.sol +10 -10
 - package/contracts/product/PolicyService.sol +376 -0
 - package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
 - package/contracts/product/PricingService.sol +275 -0
 - package/contracts/product/PricingServiceManager.sol +51 -0
 - package/contracts/{components → product}/Product.sol +160 -74
 - package/contracts/product/ProductService.sol +210 -0
 - package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
 - package/contracts/registry/ChainNft.sol +8 -0
 - package/contracts/registry/IRegistry.sol +6 -4
 - package/contracts/registry/IRegistryService.sol +6 -7
 - package/contracts/registry/ITransferInterceptor.sol +1 -0
 - package/contracts/registry/Registry.sol +26 -23
 - package/contracts/registry/RegistryAccessManager.sol +1 -1
 - package/contracts/registry/RegistryService.sol +33 -31
 - package/contracts/registry/RegistryServiceManager.sol +0 -2
 - package/contracts/registry/ReleaseManager.sol +24 -22
 - package/contracts/registry/TokenRegistry.sol +2 -2
 - package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
 - package/contracts/{components → shared}/Component.sol +68 -18
 - package/contracts/shared/ComponentService.sol +150 -0
 - package/contracts/{components → shared}/IComponent.sol +28 -6
 - package/contracts/shared/INftOwnable.sol +1 -1
 - package/contracts/shared/IPolicyHolder.sol +24 -10
 - package/contracts/shared/IRegistryLinked.sol +0 -1
 - package/contracts/shared/IService.sol +6 -6
 - package/contracts/shared/IVersionable.sol +1 -1
 - package/contracts/shared/NftOwnable.sol +1 -3
 - package/contracts/shared/PolicyHolder.sol +31 -18
 - package/contracts/shared/ProxyManager.sol +3 -3
 - package/contracts/shared/Registerable.sol +12 -11
 - package/contracts/shared/RegistryLinked.sol +0 -5
 - package/contracts/shared/Service.sol +23 -9
 - package/contracts/shared/TokenHandler.sol +14 -6
 - package/contracts/shared/Versionable.sol +1 -1
 - package/contracts/staking/IStakingService.sol +102 -0
 - package/contracts/staking/StakeingServiceManager.sol +37 -0
 - package/contracts/staking/StakingService.sol +166 -0
 - package/contracts/type/Amount.sol +109 -0
 - package/contracts/{types → type}/Blocknumber.sol +1 -0
 - package/contracts/{types → type}/ClaimId.sol +25 -2
 - package/contracts/{types → type}/Fee.sol +17 -8
 - package/contracts/{types → type}/NftId.sol +8 -0
 - package/contracts/{types → type}/NftIdSet.sol +1 -1
 - package/contracts/{types → type}/ObjectType.sol +10 -5
 - package/contracts/{types → type}/PayoutId.sol +33 -5
 - package/contracts/{types → type}/RoleId.sol +6 -4
 - package/contracts/{types → type}/StateId.sol +7 -2
 - package/contracts/{types → type}/Timestamp.sol +6 -0
 - package/contracts/{types → type}/UFixed.sol +1 -0
 - package/contracts/{types → type}/Version.sol +1 -0
 - package/package.json +1 -1
 - package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
 - package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
 - package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
 - package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
 - package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
 - package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
 - package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
 - package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1096
 - package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
 - package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
 - package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
 - package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1724
 - package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -801
 - package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -347
 - package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
 - package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
 - package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -727
 - package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -649
 - package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
 - package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
 - package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
 - package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
 - package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
 - package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
 - package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
 - package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
 - package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
 - package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
 - package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
 - package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
 - package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
 - package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
 - package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
 - package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
 - package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
 - package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
 - package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
 - package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
 - package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
 - package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
 - package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
 - package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
 - package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
 - package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
 - package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
 - package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
 - package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
 - package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
 - package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
 - package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
 - package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
 - package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
 - package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
 - package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
 - package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
 - package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
 - package/contracts/instance/base/ComponentService.sol +0 -134
 - package/contracts/instance/service/ApplicationService.sol +0 -349
 - package/contracts/instance/service/BundleService.sol +0 -299
 - package/contracts/instance/service/ClaimService.sol +0 -151
 - package/contracts/instance/service/DistributionService.sol +0 -450
 - package/contracts/instance/service/IBundleService.sol +0 -55
 - package/contracts/instance/service/IClaimService.sol +0 -61
 - package/contracts/instance/service/IPoolService.sol +0 -20
 - package/contracts/instance/service/PolicyService.sol +0 -394
 - package/contracts/instance/service/PoolService.sol +0 -109
 - package/contracts/instance/service/ProductService.sol +0 -233
 - package/contracts/shared/ContractDeployerLib.sol +0 -72
 - package/contracts/test/TestFee.sol +0 -25
 - package/contracts/test/TestRegisterable.sol +0 -18
 - package/contracts/test/TestRoleId.sol +0 -14
 - package/contracts/test/TestService.sol +0 -25
 - package/contracts/test/TestToken.sol +0 -26
 - package/contracts/test/TestVersion.sol +0 -44
 - package/contracts/test/TestVersionable.sol +0 -17
 - package/contracts/test/Usdc.sol +0 -26
 - package/contracts/types/ChainId.sol +0 -38
 - package/contracts/types/NumberId.sol +0 -52
 - /package/contracts/{types → type}/AddressSet.sol +0 -0
 - /package/contracts/{types → type}/DistributorType.sol +0 -0
 - /package/contracts/{types → type}/Key32.sol +0 -0
 - /package/contracts/{types → type}/Referral.sol +0 -0
 - /package/contracts/{types → type}/RiskId.sol +0 -0
 - /package/contracts/{types → type}/Seconds.sol +0 -0
 
| 
         @@ -3,11 +3,11 @@ pragma solidity ^0.8.20; 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            import {NftId} from "../ 
     | 
| 
       7 
     | 
    
         
            -
            import {RoleId} from "../ 
     | 
| 
       8 
     | 
    
         
            -
            import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../ 
     | 
| 
       9 
     | 
    
         
            -
            import {VersionPart, VersionPartLib} from "../ 
     | 
| 
       10 
     | 
    
         
            -
            import {Timestamp, TimestampLib} from "../ 
     | 
| 
      
 6 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {RoleId} from "../type/RoleId.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            import {IService} from "../shared/IService.sol";
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
         @@ -55,19 +55,19 @@ contract ReleaseManager is AccessManaged 
     | 
|
| 
       55 
55 
     | 
    
         
             
                RegistryAccessManager private immutable _accessManager;
         
     | 
| 
       56 
56 
     | 
    
         
             
                IRegistry private immutable _registry;
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                VersionPart immutable _initial;// first active version    
         
     | 
| 
       59 
     | 
    
         
            -
                VersionPart _latest;// latest active version
         
     | 
| 
       60 
     | 
    
         
            -
                VersionPart _next;// version to create and activate 
         
     | 
| 
      
 58 
     | 
    
         
            +
                VersionPart immutable _initial;// first active major version    
         
     | 
| 
      
 59 
     | 
    
         
            +
                VersionPart _latest;// latest active major version
         
     | 
| 
      
 60 
     | 
    
         
            +
                VersionPart _next;// major version to create and activate 
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
                mapping(VersionPart  
     | 
| 
      
 62 
     | 
    
         
            +
                mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                mapping(VersionPart  
     | 
| 
      
 64 
     | 
    
         
            +
                mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain 
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
                uint _awaitingRegistration; // "services left to register" counter
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
68 
     | 
    
         
             
                mapping(address registryService => bool isActive) _active;
         
     | 
| 
       69 
69 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                mapping(VersionPart  
     | 
| 
      
 70 
     | 
    
         
            +
                mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
                constructor(
         
     | 
| 
       73 
73 
     | 
    
         
             
                    RegistryAccessManager accessManager, 
         
     | 
| 
         @@ -146,12 +146,12 @@ contract ReleaseManager is AccessManaged 
     | 
|
| 
       146 
146 
     | 
    
         | 
| 
       147 
147 
     | 
    
         
             
                    IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
         
     | 
| 
       148 
148 
     | 
    
         | 
| 
       149 
     | 
    
         
            -
                    VersionPart  
     | 
| 
      
 149 
     | 
    
         
            +
                    VersionPart majorVersion = _next;
         
     | 
| 
       150 
150 
     | 
    
         
             
                    ObjectType domain = REGISTRY();
         
     | 
| 
       151 
     | 
    
         
            -
                    _verifyService(service,  
     | 
| 
      
 151 
     | 
    
         
            +
                    _verifyService(service, majorVersion, domain);
         
     | 
| 
       152 
152 
     | 
    
         
             
                    _createRelease(service.getFunctionConfigs());
         
     | 
| 
       153 
153 
     | 
    
         | 
| 
       154 
     | 
    
         
            -
                    nftId = _registry.registerService(info,  
     | 
| 
      
 154 
     | 
    
         
            +
                    nftId = _registry.registerService(info, majorVersion, domain);
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
       156 
156 
     | 
    
         
             
                    // external call
         
     | 
| 
       157 
157 
     | 
    
         
             
                    service.linkToRegisteredNftId();
         
     | 
| 
         @@ -169,13 +169,13 @@ contract ReleaseManager is AccessManaged 
     | 
|
| 
       169 
169 
     | 
    
         
             
                    }
         
     | 
| 
       170 
170 
     | 
    
         | 
| 
       171 
171 
     | 
    
         
             
                    IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
         
     | 
| 
       172 
     | 
    
         
            -
                    VersionPart  
     | 
| 
       173 
     | 
    
         
            -
                    ObjectType domain = _release[ 
     | 
| 
       174 
     | 
    
         
            -
                    _verifyService(service,  
     | 
| 
      
 172 
     | 
    
         
            +
                    VersionPart majorVersion = getNextVersion();
         
     | 
| 
      
 173 
     | 
    
         
            +
                    ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
         
     | 
| 
      
 174 
     | 
    
         
            +
                    _verifyService(service, majorVersion, domain);
         
     | 
| 
       175 
175 
     | 
    
         | 
| 
       176 
176 
     | 
    
         
             
                    // setup and grant unique role if service does registrations
         
     | 
| 
       177 
     | 
    
         
            -
                    bytes4[] memory selectors = _selectors[ 
     | 
| 
       178 
     | 
    
         
            -
                    address registryService = _registry.getServiceAddress(REGISTRY(),  
     | 
| 
      
 177 
     | 
    
         
            +
                    bytes4[] memory selectors = _selectors[majorVersion][domain];
         
     | 
| 
      
 178 
     | 
    
         
            +
                    address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
         
     | 
| 
       179 
179 
     | 
    
         
             
                    if(selectors.length > 0) {
         
     | 
| 
       180 
180 
     | 
    
         
             
                        _accessManager.setAndGrantUniqueRole(
         
     | 
| 
       181 
181 
     | 
    
         
             
                            address(service), 
         
     | 
| 
         @@ -185,7 +185,7 @@ contract ReleaseManager is AccessManaged 
     | 
|
| 
       185 
185 
     | 
    
         | 
| 
       186 
186 
     | 
    
         
             
                    _awaitingRegistration--;
         
     | 
| 
       187 
187 
     | 
    
         | 
| 
       188 
     | 
    
         
            -
                    nftId = _registry.registerService(info,  
     | 
| 
      
 188 
     | 
    
         
            +
                    nftId = _registry.registerService(info, majorVersion, domain);
         
     | 
| 
       189 
189 
     | 
    
         | 
| 
       190 
190 
     | 
    
         
             
                    // external call
         
     | 
| 
       191 
191 
     | 
    
         
             
                    service.linkToRegisteredNftId(); 
         
     | 
| 
         @@ -271,8 +271,10 @@ contract ReleaseManager is AccessManaged 
     | 
|
| 
       271 
271 
     | 
    
         
             
                    view
         
     | 
| 
       272 
272 
     | 
    
         
             
                    returns(ObjectType)
         
     | 
| 
       273 
273 
     | 
    
         
             
                {
         
     | 
| 
       274 
     | 
    
         
            -
                     
     | 
| 
       275 
     | 
    
         
            -
             
     | 
| 
      
 274 
     | 
    
         
            +
                    Version version = service.getVersion();
         
     | 
| 
      
 275 
     | 
    
         
            +
                    VersionPart majorVersion = version.toMajorPart();
         
     | 
| 
      
 276 
     | 
    
         
            +
                    if(majorVersion != expectedVersion) {
         
     | 
| 
      
 277 
     | 
    
         
            +
                        revert UnexpectedServiceVersion(expectedVersion, majorVersion);
         
     | 
| 
       276 
278 
     | 
    
         
             
                    }
         
     | 
| 
       277 
279 
     | 
    
         | 
| 
       278 
280 
     | 
    
         
             
                    if(service.getDomain() != expectedDomain) {
         
     | 
| 
         @@ -6,8 +6,8 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         
     | 
| 
       8 
8 
     | 
    
         
             
            import {IRegistry} from "./IRegistry.sol";
         
     | 
| 
       9 
     | 
    
         
            -
            import {VersionPart} from "../ 
     | 
| 
       10 
     | 
    
         
            -
            import {REGISTRY} from "../ 
     | 
| 
      
 9 
     | 
    
         
            +
            import {VersionPart} from "../type/Version.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {REGISTRY} from "../type/ObjectType.sol";
         
     | 
| 
       11 
11 
     | 
    
         
             
            import {NftOwnable} from "../shared/NftOwnable.sol";
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            /// @title contract to register token per GIF major release.
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
      
 2 
     | 
    
         
            +
            pragma solidity ^0.8.20;
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            contract AccessManagerUpgradeableInitializeable is AccessManagerUpgradeable {
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                function initialize(address initialAdmin) initializer public {
         
     | 
| 
      
 10 
     | 
    
         
            +
                    __AccessManager_init(initialAdmin);        
         
     | 
| 
      
 11 
     | 
    
         
            +
                }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -1,24 +1,26 @@ 
     | 
|
| 
       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";
         
     | 
| 
       9 
     | 
    
         
            -
            import { 
     | 
| 
      
 10 
     | 
    
         
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
       10 
11 
     | 
    
         
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         
     | 
| 
       11 
12 
     | 
    
         
             
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
       12 
13 
     | 
    
         
             
            import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
         
     | 
| 
       13 
14 
     | 
    
         
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         
     | 
| 
       14 
15 
     | 
    
         
             
            import {IRegistry} from "../registry/IRegistry.sol";
         
     | 
| 
       15 
     | 
    
         
            -
            import {NftId} from "../ 
     | 
| 
       16 
     | 
    
         
            -
            import {ObjectType, INSTANCE, PRODUCT} from "../ 
     | 
| 
       17 
     | 
    
         
            -
            import {VersionPart} from "../ 
     | 
| 
      
 16 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 17 
     | 
    
         
            +
            import {ObjectType, INSTANCE, PRODUCT} from "../type/ObjectType.sol";
         
     | 
| 
      
 18 
     | 
    
         
            +
            import {VersionPart} from "../type/Version.sol";
         
     | 
| 
       18 
19 
     | 
    
         
             
            import {Registerable} from "../shared/Registerable.sol";
         
     | 
| 
       19 
     | 
    
         
            -
            import {RoleId, RoleIdLib} from "../ 
     | 
| 
      
 20 
     | 
    
         
            +
            import {RoleId, RoleIdLib} from "../type/RoleId.sol";
         
     | 
| 
       20 
21 
     | 
    
         
             
            import {IAccess} from "../instance/module/IAccess.sol";
         
     | 
| 
       21 
     | 
    
         
            -
            import { 
     | 
| 
      
 22 
     | 
    
         
            +
            import {TokenHandler} from "../shared/TokenHandler.sol";
         
     | 
| 
      
 23 
     | 
    
         
            +
            import {VersionPart} from "../type/Version.sol";
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
       23 
25 
     | 
    
         
             
            // TODO discuss to inherit from oz accessmanaged
         
     | 
| 
       24 
26 
     | 
    
         
             
            // then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
         
     | 
| 
         @@ -47,6 +49,13 @@ abstract contract Component is 
     | 
|
| 
       47 
49 
     | 
    
         
             
                    }
         
     | 
| 
       48 
50 
     | 
    
         
             
                }
         
     | 
| 
       49 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
                modifier onlyChainNft() {
         
     | 
| 
      
 53 
     | 
    
         
            +
                    if(msg.sender != getRegistry().getChainNftAddress()) {
         
     | 
| 
      
 54 
     | 
    
         
            +
                        revert ErrorComponentNotChainNft(msg.sender);
         
     | 
| 
      
 55 
     | 
    
         
            +
                    }
         
     | 
| 
      
 56 
     | 
    
         
            +
                    _;
         
     | 
| 
      
 57 
     | 
    
         
            +
                }
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
       50 
59 
     | 
    
         
             
                function initializeComponent(
         
     | 
| 
       51 
60 
     | 
    
         
             
                    address registry,
         
     | 
| 
       52 
61 
     | 
    
         
             
                    NftId instanceNftId,
         
     | 
| 
         @@ -82,15 +91,30 @@ abstract contract Component is 
     | 
|
| 
       82 
91 
     | 
    
         
             
                    $._wallet = address(this);
         
     | 
| 
       83 
92 
     | 
    
         
             
                    $._token = IERC20Metadata(token);
         
     | 
| 
       84 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                    registerInterface(type(IAccessManaged).interfaceId);
         
     | 
| 
       85 
95 
     | 
    
         
             
                    registerInterface(type(IComponent).interfaceId);
         
     | 
| 
       86 
96 
     | 
    
         
             
                }
         
     | 
| 
       87 
97 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                function lock() external onlyOwner  
     | 
| 
       89 
     | 
    
         
            -
                    IInstanceService(_getServiceAddress(INSTANCE())). 
     | 
| 
      
 98 
     | 
    
         
            +
                function lock() external onlyOwner {
         
     | 
| 
      
 99 
     | 
    
         
            +
                    IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
         
     | 
| 
       90 
100 
     | 
    
         
             
                }
         
     | 
| 
       91 
101 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                function unlock() external onlyOwner  
     | 
| 
       93 
     | 
    
         
            -
                    IInstanceService(_getServiceAddress(INSTANCE())). 
     | 
| 
      
 102 
     | 
    
         
            +
                function unlock() external onlyOwner {
         
     | 
| 
      
 103 
     | 
    
         
            +
                    IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
         
     | 
| 
      
 104 
     | 
    
         
            +
                }
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                function approveTokenHandler(uint256 spendingLimitAmount) external onlyOwner {
         
     | 
| 
      
 107 
     | 
    
         
            +
                    IComponents.ComponentInfo memory info = getComponentInfo();
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                    if(info.wallet != address(this)) {
         
     | 
| 
      
 110 
     | 
    
         
            +
                        revert ErrorComponentWalletNotComponent();
         
     | 
| 
      
 111 
     | 
    
         
            +
                    }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                    info.token.approve(
         
     | 
| 
      
 114 
     | 
    
         
            +
                        address(info.tokenHandler),
         
     | 
| 
      
 115 
     | 
    
         
            +
                        spendingLimitAmount);
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                    emit LogComponentTokenHandlerApproved(spendingLimitAmount);
         
     | 
| 
       94 
118 
     | 
    
         
             
                }
         
     | 
| 
       95 
119 
     | 
    
         | 
| 
       96 
120 
     | 
    
         
             
                function setWallet(address newWallet)
         
     | 
| 
         @@ -160,18 +184,21 @@ abstract contract Component is 
     | 
|
| 
       160 
184 
     | 
    
         
             
                    $._productNftId = productNftId;
         
     | 
| 
       161 
185 
     | 
    
         
             
                }
         
     | 
| 
       162 
186 
     | 
    
         | 
| 
      
 187 
     | 
    
         
            +
                function nftMint(address to, uint256 tokenId) 
         
     | 
| 
      
 188 
     | 
    
         
            +
                    external 
         
     | 
| 
      
 189 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 190 
     | 
    
         
            +
                    onlyChainNft
         
     | 
| 
      
 191 
     | 
    
         
            +
                {}
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
       163 
193 
     | 
    
         
             
                /// @dev callback function for nft transfers
         
     | 
| 
       164 
194 
     | 
    
         
             
                /// may only be called by chain nft contract.
         
     | 
| 
       165 
195 
     | 
    
         
             
                /// do not override this function to implement business logic for handling transfers
         
     | 
| 
       166 
196 
     | 
    
         
             
                /// override internal function _nftTransferFrom instead
         
     | 
| 
       167 
197 
     | 
    
         
             
                function nftTransferFrom(address from, address to, uint256 tokenId)
         
     | 
| 
       168 
198 
     | 
    
         
             
                    external
         
     | 
| 
       169 
     | 
    
         
            -
                    virtual 
     | 
| 
      
 199 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 200 
     | 
    
         
            +
                    onlyChainNft
         
     | 
| 
       170 
201 
     | 
    
         
             
                {
         
     | 
| 
       171 
     | 
    
         
            -
                    if(msg.sender != getRegistry().getChainNftAddress()) {
         
     | 
| 
       172 
     | 
    
         
            -
                        revert ErrorComponentNotChainNft(msg.sender);
         
     | 
| 
       173 
     | 
    
         
            -
                    }
         
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
202 
     | 
    
         
             
                    _nftTransferFrom(from, to, tokenId);
         
     | 
| 
       176 
203 
     | 
    
         
             
                }
         
     | 
| 
       177 
204 
     | 
    
         | 
| 
         @@ -184,6 +211,10 @@ abstract contract Component is 
     | 
|
| 
       184 
211 
     | 
    
         
             
                    return _getComponentStorage()._token;
         
     | 
| 
       185 
212 
     | 
    
         
             
                }
         
     | 
| 
       186 
213 
     | 
    
         | 
| 
      
 214 
     | 
    
         
            +
                function getTokenHandler() public view returns (TokenHandler tokenHandler) {
         
     | 
| 
      
 215 
     | 
    
         
            +
                    return getComponentInfo().tokenHandler;
         
     | 
| 
      
 216 
     | 
    
         
            +
                }
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
       187 
218 
     | 
    
         
             
                function isNftInterceptor() public view override returns(bool isInterceptor) {
         
     | 
| 
       188 
219 
     | 
    
         
             
                    return _getComponentStorage()._isNftInterceptor;
         
     | 
| 
       189 
220 
     | 
    
         
             
                }
         
     | 
| 
         @@ -200,6 +231,25 @@ abstract contract Component is 
     | 
|
| 
       200 
231 
     | 
    
         
             
                    return _getComponentStorage()._productNftId;
         
     | 
| 
       201 
232 
     | 
    
         
             
                }
         
     | 
| 
       202 
233 
     | 
    
         | 
| 
      
 234 
     | 
    
         
            +
                function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
         
     | 
| 
      
 235 
     | 
    
         
            +
                    info = _getInstanceReader().getComponentInfo(getNftId());
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
                    // fallback to initial info (wallet is always != address(0))
         
     | 
| 
      
 238 
     | 
    
         
            +
                    if(info.wallet == address(0)) {
         
     | 
| 
      
 239 
     | 
    
         
            +
                        info = _getInitialInfo();
         
     | 
| 
      
 240 
     | 
    
         
            +
                    }
         
     | 
| 
      
 241 
     | 
    
         
            +
                }
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
                /// @dev defines initial component specification
         
     | 
| 
      
 244 
     | 
    
         
            +
                /// overwrite this function according to your use case
         
     | 
| 
      
 245 
     | 
    
         
            +
                function _getInitialInfo()
         
     | 
| 
      
 246 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 247 
     | 
    
         
            +
                    view 
         
     | 
| 
      
 248 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 249 
     | 
    
         
            +
                    returns (IComponents.ComponentInfo memory info)
         
     | 
| 
      
 250 
     | 
    
         
            +
                { }
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
             
     | 
| 
       203 
253 
     | 
    
         
             
                /// @dev internal function for nft transfers.
         
     | 
| 
       204 
254 
     | 
    
         
             
                /// handling logic that deals with nft transfers need to overwrite this function
         
     | 
| 
       205 
255 
     | 
    
         
             
                function _nftTransferFrom(address from, address to, uint256 tokenId)
         
     | 
| 
         @@ -218,4 +268,4 @@ abstract contract Component is 
     | 
|
| 
       218 
268 
     | 
    
         
             
                    VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
         
     | 
| 
       219 
269 
     | 
    
         
             
                    return getRegistry().getServiceAddress(domain, majorVersion);
         
     | 
| 
       220 
270 
     | 
    
         
             
                }
         
     | 
| 
       221 
     | 
    
         
            -
            }
         
     | 
| 
      
 271 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,150 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
      
 2 
     | 
    
         
            +
            pragma solidity ^0.8.19;
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            import {IComponent} from "./IComponent.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {IRegistry} from "../registry/IRegistry.sol";
         
     | 
| 
      
 6 
     | 
    
         
            +
            import {IRegistryService} from "../registry/IRegistryService.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {IAccess} from "../instance/module/IAccess.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {ObjectType, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {RoleId} from "../type/RoleId.sol";
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            import {Service} from "../shared/Service.sol";
         
     | 
| 
      
 14 
     | 
    
         
            +
            import {InstanceService} from "../instance/InstanceService.sol";
         
     | 
| 
      
 15 
     | 
    
         
            +
            import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            abstract contract ComponentService is
         
     | 
| 
      
 18 
     | 
    
         
            +
                Service
         
     | 
| 
      
 19 
     | 
    
         
            +
            {
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                error ErrorComponentServiceNotComponent(address component);
         
     | 
| 
      
 22 
     | 
    
         
            +
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         
     | 
| 
      
 23 
     | 
    
         
            +
                error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
         
     | 
| 
      
 24 
     | 
    
         
            +
                error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
         
     | 
| 
      
 25 
     | 
    
         
            +
                error ErrorComponentServiceComponentLocked(address component);
         
     | 
| 
      
 26 
     | 
    
         
            +
                error ErrorComponentServiceSenderNotService(address sender);
         
     | 
| 
      
 27 
     | 
    
         
            +
                error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                /// @dev modifier to check if caller is a registered service
         
     | 
| 
      
 30 
     | 
    
         
            +
                modifier onlyService() {
         
     | 
| 
      
 31 
     | 
    
         
            +
                    address caller = msg.sender;
         
     | 
| 
      
 32 
     | 
    
         
            +
                    if(!getRegistry().isRegisteredService(caller)) {
         
     | 
| 
      
 33 
     | 
    
         
            +
                        revert ErrorComponentServiceSenderNotService(caller);
         
     | 
| 
      
 34 
     | 
    
         
            +
                    }
         
     | 
| 
      
 35 
     | 
    
         
            +
                    _;
         
     | 
| 
      
 36 
     | 
    
         
            +
                }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                // view functions
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                function getRegistryService() public view virtual returns (IRegistryService) {
         
     | 
| 
      
 41 
     | 
    
         
            +
                    return IRegistryService(_getServiceAddress(REGISTRY()));
         
     | 
| 
      
 42 
     | 
    
         
            +
                }
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                function getInstanceService() public view returns (InstanceService) {
         
     | 
| 
      
 45 
     | 
    
         
            +
                    return InstanceService(_getServiceAddress(INSTANCE()));
         
     | 
| 
      
 46 
     | 
    
         
            +
                }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                // internal functions
         
     | 
| 
      
 49 
     | 
    
         
            +
                function _checkComponentForRegistration(
         
     | 
| 
      
 50 
     | 
    
         
            +
                    address componentAddress,
         
     | 
| 
      
 51 
     | 
    
         
            +
                    ObjectType requiredType,
         
     | 
| 
      
 52 
     | 
    
         
            +
                    RoleId requiredRole
         
     | 
| 
      
 53 
     | 
    
         
            +
                )
         
     | 
| 
      
 54 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 55 
     | 
    
         
            +
                    view
         
     | 
| 
      
 56 
     | 
    
         
            +
                    returns (
         
     | 
| 
      
 57 
     | 
    
         
            +
                        IComponent component,
         
     | 
| 
      
 58 
     | 
    
         
            +
                        address owner,
         
     | 
| 
      
 59 
     | 
    
         
            +
                        IInstance instance,
         
     | 
| 
      
 60 
     | 
    
         
            +
                        NftId instanceNftId
         
     | 
| 
      
 61 
     | 
    
         
            +
                    )
         
     | 
| 
      
 62 
     | 
    
         
            +
                {
         
     | 
| 
      
 63 
     | 
    
         
            +
                    // component may only be registerd by initial owner of component
         
     | 
| 
      
 64 
     | 
    
         
            +
                    owner = msg.sender;
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    // check this is a component
         
     | 
| 
      
 67 
     | 
    
         
            +
                    component = IComponent(componentAddress);
         
     | 
| 
      
 68 
     | 
    
         
            +
                    if(!component.supportsInterface(type(IComponent).interfaceId)) {
         
     | 
| 
      
 69 
     | 
    
         
            +
                        revert ErrorComponentServiceNotComponent(componentAddress);
         
     | 
| 
      
 70 
     | 
    
         
            +
                    }
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                    // check component is of required type
         
     | 
| 
      
 73 
     | 
    
         
            +
                    IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
         
     | 
| 
      
 74 
     | 
    
         
            +
                    if(componentInfo.objectType != requiredType) {
         
     | 
| 
      
 75 
     | 
    
         
            +
                        revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
         
     | 
| 
      
 76 
     | 
    
         
            +
                    }
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    // check msg.sender is component owner
         
     | 
| 
      
 79 
     | 
    
         
            +
                    address initialOwner = componentInfo.initialOwner;
         
     | 
| 
      
 80 
     | 
    
         
            +
                    if(owner != initialOwner) {
         
     | 
| 
      
 81 
     | 
    
         
            +
                        revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
         
     | 
| 
      
 82 
     | 
    
         
            +
                    }
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                    // check instance has assigned required role to owner
         
     | 
| 
      
 85 
     | 
    
         
            +
                    instanceNftId = componentInfo.parentNftId;
         
     | 
| 
      
 86 
     | 
    
         
            +
                    instance = _getInstance(instanceNftId);
         
     | 
| 
      
 87 
     | 
    
         
            +
                    if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
         
     | 
| 
      
 88 
     | 
    
         
            +
                        revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
         
     | 
| 
      
 89 
     | 
    
         
            +
                    }
         
     | 
| 
      
 90 
     | 
    
         
            +
                }
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                // internal view functions
         
     | 
| 
      
 93 
     | 
    
         
            +
                function _getAndVerifyCallingComponentAndInstance(
         
     | 
| 
      
 94 
     | 
    
         
            +
                    ObjectType expectedType // assume always of `component` type
         
     | 
| 
      
 95 
     | 
    
         
            +
                )
         
     | 
| 
      
 96 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 97 
     | 
    
         
            +
                    view
         
     | 
| 
      
 98 
     | 
    
         
            +
                    returns(
         
     | 
| 
      
 99 
     | 
    
         
            +
                        NftId componentNftId,
         
     | 
| 
      
 100 
     | 
    
         
            +
                        IRegistry.ObjectInfo memory componentInfo, 
         
     | 
| 
      
 101 
     | 
    
         
            +
                        IInstance instance
         
     | 
| 
      
 102 
     | 
    
         
            +
                    )
         
     | 
| 
      
 103 
     | 
    
         
            +
                {
         
     | 
| 
      
 104 
     | 
    
         
            +
                    componentNftId = getRegistry().getNftId(msg.sender);
         
     | 
| 
      
 105 
     | 
    
         
            +
                    (componentInfo, instance) = _getAndVerifyComponentInfoAndInstance(componentNftId, expectedType);
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                    // locked component can not call services
         
     | 
| 
      
 108 
     | 
    
         
            +
                    if (instance.getInstanceAccessManager().isTargetLocked(componentInfo.objectAddress)) {
         
     | 
| 
      
 109 
     | 
    
         
            +
                        revert IAccess.ErrorIAccessTargetLocked(componentInfo.objectAddress);
         
     | 
| 
      
 110 
     | 
    
         
            +
                    }
         
     | 
| 
      
 111 
     | 
    
         
            +
                }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                function _getAndVerifyComponentInfoAndInstance(
         
     | 
| 
      
 114 
     | 
    
         
            +
                    NftId componentNftId,
         
     | 
| 
      
 115 
     | 
    
         
            +
                    ObjectType expectedType // assume always of `component` type
         
     | 
| 
      
 116 
     | 
    
         
            +
                )
         
     | 
| 
      
 117 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 118 
     | 
    
         
            +
                    view
         
     | 
| 
      
 119 
     | 
    
         
            +
                    returns(
         
     | 
| 
      
 120 
     | 
    
         
            +
                        IRegistry.ObjectInfo memory componentInfo, 
         
     | 
| 
      
 121 
     | 
    
         
            +
                        IInstance instance
         
     | 
| 
      
 122 
     | 
    
         
            +
                    )
         
     | 
| 
      
 123 
     | 
    
         
            +
                {
         
     | 
| 
      
 124 
     | 
    
         
            +
                    componentInfo = getRegistry().getObjectInfo(componentNftId);
         
     | 
| 
      
 125 
     | 
    
         
            +
                    if(componentInfo.objectType != expectedType) {
         
     | 
| 
      
 126 
     | 
    
         
            +
                        revert ErrorComponentServiceComponentTypeInvalid(
         
     | 
| 
      
 127 
     | 
    
         
            +
                            componentInfo.objectAddress, 
         
     | 
| 
      
 128 
     | 
    
         
            +
                            expectedType, 
         
     | 
| 
      
 129 
     | 
    
         
            +
                            componentInfo.objectType);
         
     | 
| 
      
 130 
     | 
    
         
            +
                    }
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                    instance = _getInstance(componentInfo.parentNftId);
         
     | 
| 
      
 133 
     | 
    
         
            +
                }
         
     | 
| 
      
 134 
     | 
    
         
            +
                // assume componentNftId is always of `instance` type
         
     | 
| 
      
 135 
     | 
    
         
            +
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         
     | 
| 
      
 136 
     | 
    
         
            +
                    return IInstance(
         
     | 
| 
      
 137 
     | 
    
         
            +
                        getRegistry().getObjectInfo(
         
     | 
| 
      
 138 
     | 
    
         
            +
                            instanceNftId).objectAddress);
         
     | 
| 
      
 139 
     | 
    
         
            +
                }
         
     | 
| 
      
 140 
     | 
    
         
            +
                // assume componentNftId is always of `component` type
         
     | 
| 
      
 141 
     | 
    
         
            +
                /*function _getInstanceForComponent(NftId componentNftId) internal view returns (IInstance) {
         
     | 
| 
      
 142 
     | 
    
         
            +
                    NftId instanceNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
         
     | 
| 
      
 143 
     | 
    
         
            +
                    address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
         
     | 
| 
      
 144 
     | 
    
         
            +
                    return IInstance(instanceAddress);
         
     | 
| 
      
 145 
     | 
    
         
            +
                }*/
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                function _getServiceAddress(ObjectType domain) internal view returns (address) {
         
     | 
| 
      
 148 
     | 
    
         
            +
                    return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
         
     | 
| 
      
 149 
     | 
    
         
            +
                }
         
     | 
| 
      
 150 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -1,21 +1,25 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         
     | 
| 
       4 
5 
     | 
    
         
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
       6 
8 
     | 
    
         
             
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
       7 
9 
     | 
    
         
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         
     | 
| 
       8 
     | 
    
         
            -
            import {IProductService} from "../ 
     | 
| 
      
 10 
     | 
    
         
            +
            import {IProductService} from "../product/IProductService.sol";
         
     | 
| 
       9 
11 
     | 
    
         
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         
     | 
| 
       10 
12 
     | 
    
         
             
            import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
         
     | 
| 
       11 
     | 
    
         
            -
            import {NftId} from "../ 
     | 
| 
       12 
     | 
    
         
            -
            import {ObjectType} from "../ 
     | 
| 
      
 13 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 14 
     | 
    
         
            +
            import {ObjectType} from "../type/ObjectType.sol";
         
     | 
| 
      
 15 
     | 
    
         
            +
            import {TokenHandler} from "../shared/TokenHandler.sol";
         
     | 
| 
       13 
16 
     | 
    
         | 
| 
       14 
17 
     | 
    
         
             
            /// @dev component base class
         
     | 
| 
       15 
18 
     | 
    
         
             
            /// component examples are product, distribution, pool and oracle
         
     | 
| 
       16 
19 
     | 
    
         
             
            interface IComponent is 
         
     | 
| 
       17 
20 
     | 
    
         
             
                IRegisterable,
         
     | 
| 
       18 
     | 
    
         
            -
                ITransferInterceptor
         
     | 
| 
      
 21 
     | 
    
         
            +
                ITransferInterceptor,
         
     | 
| 
      
 22 
     | 
    
         
            +
                IAccessManaged
         
     | 
| 
       19 
23 
     | 
    
         
             
            {
         
     | 
| 
       20 
24 
     | 
    
         
             
                error ErrorComponentNotChainNft(address caller);
         
     | 
| 
       21 
25 
     | 
    
         
             
                error ErrorComponentNotProductService(address caller);
         
     | 
| 
         @@ -26,9 +30,13 @@ interface IComponent is 
     | 
|
| 
       26 
30 
     | 
    
         
             
                error ErrorComponentWalletAddressIsSameAsCurrent();
         
     | 
| 
       27 
31 
     | 
    
         
             
                error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
         
     | 
| 
       28 
32 
     | 
    
         | 
| 
      
 33 
     | 
    
         
            +
                error ErrorComponentWalletNotComponent();
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       29 
35 
     | 
    
         
             
                event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
         
     | 
| 
       30 
36 
     | 
    
         
             
                event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
         
     | 
| 
       31 
37 
     | 
    
         | 
| 
      
 38 
     | 
    
         
            +
                event LogComponentTokenHandlerApproved(uint256 limit);
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
       32 
40 
     | 
    
         
             
                /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
         
     | 
| 
       33 
41 
     | 
    
         
             
                /// only component owner (nft holder) is authorizes to call this function
         
     | 
| 
       34 
42 
     | 
    
         
             
                function lock() external;
         
     | 
| 
         @@ -37,6 +45,11 @@ interface IComponent is 
     | 
|
| 
       37 
45 
     | 
    
         
             
                /// only component owner (nft holder) is authorizes to call this function
         
     | 
| 
       38 
46 
     | 
    
         
             
                function unlock() external;
         
     | 
| 
       39 
47 
     | 
    
         | 
| 
      
 48 
     | 
    
         
            +
                /// @dev approves token hanlder to spend up to the specified amount of tokens
         
     | 
| 
      
 49 
     | 
    
         
            +
                /// reverts if component wallet is not component itself
         
     | 
| 
      
 50 
     | 
    
         
            +
                /// only component owner (nft holder) is authorizes to call this function
         
     | 
| 
      
 51 
     | 
    
         
            +
                function approveTokenHandler(uint256 spendingLimitAmount) external;
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
       40 
53 
     | 
    
         
             
                /// @dev sets the wallet address for the component
         
     | 
| 
       41 
54 
     | 
    
         
             
                /// if the current wallet has tokens, these will be transferred
         
     | 
| 
       42 
55 
     | 
    
         
             
                /// if the new wallet address is externally owned, an approval from the 
         
     | 
| 
         @@ -46,6 +59,9 @@ interface IComponent is 
     | 
|
| 
       46 
59 
     | 
    
         
             
                /// @dev only product service may set product nft id during registration of product setup
         
     | 
| 
       47 
60 
     | 
    
         
             
                function setProductNftId(NftId productNftId) external;
         
     | 
| 
       48 
61 
     | 
    
         | 
| 
      
 62 
     | 
    
         
            +
                /// @dev defines the instance to which this component is linked to
         
     | 
| 
      
 63 
     | 
    
         
            +
                function getInstance() external view returns (IInstance instance);
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
       49 
65 
     | 
    
         
             
                /// @dev returns the name of this component
         
     | 
| 
       50 
66 
     | 
    
         
             
                /// to successfully register the component with an instance the name MUST be unique in the linked instance
         
     | 
| 
       51 
67 
     | 
    
         
             
                function getName() external view returns (string memory name);
         
     | 
| 
         @@ -53,8 +69,9 @@ interface IComponent is 
     | 
|
| 
       53 
69 
     | 
    
         
             
                /// @dev defines which ERC20 token is used by this component
         
     | 
| 
       54 
70 
     | 
    
         
             
                function getToken() external view returns (IERC20Metadata token);
         
     | 
| 
       55 
71 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                /// @dev  
     | 
| 
       57 
     | 
    
         
            -
                 
     | 
| 
      
 72 
     | 
    
         
            +
                /// @dev returns token handler for this component
         
     | 
| 
      
 73 
     | 
    
         
            +
                /// only registered components return a non zero token handler
         
     | 
| 
      
 74 
     | 
    
         
            +
                function getTokenHandler() external view returns (TokenHandler tokenHandler);
         
     | 
| 
       58 
75 
     | 
    
         | 
| 
       59 
76 
     | 
    
         
             
                /// @dev defines the wallet address used to hold the ERC20 tokens related to this component
         
     | 
| 
       60 
77 
     | 
    
         
             
                /// the default address is the component token address
         
     | 
| 
         @@ -65,4 +82,9 @@ interface IComponent is 
     | 
|
| 
       65 
82 
     | 
    
         
             
                function getProductNftId() external view returns (NftId productNftId);
         
     | 
| 
       66 
83 
     | 
    
         | 
| 
       67 
84 
     | 
    
         
             
                function isNftInterceptor() external view returns(bool isInterceptor);
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                /// @dev returns component infos for this pool
         
     | 
| 
      
 87 
     | 
    
         
            +
                /// when registered with an instance the info is obtained from the data stored in the instance
         
     | 
| 
      
 88 
     | 
    
         
            +
                /// when not registered the function returns the info from the component contract
         
     | 
| 
      
 89 
     | 
    
         
            +
                function getComponentInfo() external view returns (IComponents.ComponentInfo memory info);
         
     | 
| 
       68 
90 
     | 
    
         
             
            }
         
     | 
| 
         @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; 
     | 
|
| 
       4 
4 
     | 
    
         
             
            import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            import {IRegistryLinked} from "./IRegistryLinked.sol";
         
     | 
| 
       7 
     | 
    
         
            -
            import {NftId} from "../ 
     | 
| 
      
 7 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            interface INftOwnable is
         
     | 
| 
       10 
10 
     | 
    
         
             
                IERC165,
         
     | 
| 
         @@ -4,23 +4,37 @@ pragma solidity ^0.8.20; 
     | 
|
| 
       4 
4 
     | 
    
         
             
            import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
         
     | 
| 
       5 
5 
     | 
    
         
             
            import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            import { 
     | 
| 
       8 
     | 
    
         
            -
            import { 
     | 
| 
       9 
     | 
    
         
            -
            import { 
     | 
| 
      
 7 
     | 
    
         
            +
            import {Amount} from "../type/Amount.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {ClaimId} from "../type/ClaimId.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {PayoutId} from "../type/PayoutId.sol";
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
       11 
13 
     | 
    
         
             
            /// @dev generic interface for contracts that need to hold policies and receive payouts
         
     | 
| 
       12 
14 
     | 
    
         
             
            /// GIF will notify policy holder contracts for policy creation and payout execution
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
            interface IPolicyHolder is
         
     | 
| 
      
 16 
     | 
    
         
            +
                IERC165,
         
     | 
| 
      
 17 
     | 
    
         
            +
                IERC721Receiver,
         
     | 
| 
      
 18 
     | 
    
         
            +
                IRegistryLinked
         
     | 
| 
      
 19 
     | 
    
         
            +
            {
         
     | 
| 
       14 
20 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                /// @dev callback function that will be called after successful policy activation
         
     | 
| 
      
 22 
     | 
    
         
            +
                /// active policies may open claims under the activated policy
         
     | 
| 
      
 23 
     | 
    
         
            +
                function policyActivated(NftId policyNftId) external;
         
     | 
| 
       16 
24 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                /// @dev callback function  
     | 
| 
       18 
     | 
    
         
            -
                 
     | 
| 
      
 25 
     | 
    
         
            +
                /// @dev callback function to indicate the specified policy has expired
         
     | 
| 
      
 26 
     | 
    
         
            +
                /// expired policies may no longer open claims
         
     | 
| 
      
 27 
     | 
    
         
            +
                /// it is optional for products to notifiy policy holder of expired claims
         
     | 
| 
      
 28 
     | 
    
         
            +
                function policyExpired(NftId policyNftId) external;
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                /// @dev callback function to notify the confirmation of the specified claim
         
     | 
| 
      
 31 
     | 
    
         
            +
                /// active policies may open claims under the activated policy
         
     | 
| 
      
 32 
     | 
    
         
            +
                function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
         
     | 
| 
       19 
33 
     | 
    
         | 
| 
       20 
34 
     | 
    
         
             
                /// @dev callback function that will be called after a successful payout
         
     | 
| 
       21 
     | 
    
         
            -
                function  
     | 
| 
      
 35 
     | 
    
         
            +
                function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external;
         
     | 
| 
       22 
36 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                /// @dev determines  
     | 
| 
      
 37 
     | 
    
         
            +
                /// @dev determines policy and claim specific beneficiary address
         
     | 
| 
       24 
38 
     | 
    
         
             
                /// returned address will override GIF default where the policy nft holder is treated as beneficiary
         
     | 
| 
       25 
     | 
    
         
            -
                function getBeneficiary(NftId  
     | 
| 
      
 39 
     | 
    
         
            +
                function getBeneficiary(NftId policyNftId, ClaimId claimId) external view returns (address beneficiary);
         
     | 
| 
       26 
40 
     | 
    
         
             
            }
         
     | 
| 
         @@ -1,18 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.19;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            import { 
     | 
| 
       5 
     | 
    
         
            -
            import {ObjectType} from "../types/ObjectType.sol";
         
     | 
| 
      
 4 
     | 
    
         
            +
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
            import {IRegisterable} from "./IRegisterable.sol";
         
     | 
| 
       8 
7 
     | 
    
         
             
            import {IVersionable} from "./IVersionable.sol";
         
     | 
| 
      
 8 
     | 
    
         
            +
            import {ObjectType} from "../type/ObjectType.sol";
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            interface IService is 
         
     | 
| 
       11 
11 
     | 
    
         
             
                IRegisterable,
         
     | 
| 
       12 
     | 
    
         
            -
                IVersionable
         
     | 
| 
      
 12 
     | 
    
         
            +
                IVersionable,
         
     | 
| 
      
 13 
     | 
    
         
            +
                IAccessManaged
         
     | 
| 
       13 
14 
     | 
    
         
             
            {
         
     | 
| 
       14 
     | 
    
         
            -
                error  
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
                error ErrorServiceNotImplemented();
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       16 
17 
     | 
    
         
             
                function getDomain() external pure returns(ObjectType serviceDomain);
         
     | 
| 
       17 
     | 
    
         
            -
                function getMajorVersion() external view returns(VersionPart majorVersion);
         
     | 
| 
       18 
18 
     | 
    
         
             
            }
         
     | 
| 
         @@ -1,11 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            // import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; 
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
4 
     | 
    
         
             
            import {ERC165} from "./ERC165.sol";
         
     | 
| 
       7 
5 
     | 
    
         
             
            import {INftOwnable} from "./INftOwnable.sol";
         
     | 
| 
       8 
     | 
    
         
            -
            import {NftId} from "../ 
     | 
| 
      
 6 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       9 
7 
     | 
    
         
             
            import {RegistryLinked} from "./RegistryLinked.sol";
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
       11 
9 
     | 
    
         
             
            contract NftOwnable is
         
     |