@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
|