@etherisc/gif-next 0.0.2-78e428e-483 → 0.0.2-79292f9-089
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 +4 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +21 -21
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +10 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +38 -97
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -75
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +76 -131
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +64 -76
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +0 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +0 -31
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +71 -71
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +7 -7
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +24 -24
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +40 -40
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +24 -24
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- 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/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +26 -85
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -37
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -75
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +26 -26
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +39 -39
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +7 -82
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +54 -109
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +60 -72
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +0 -31
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +5 -42
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +43 -38
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +5 -80
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +87 -162
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +45 -85
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +27 -38
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +37 -45
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -75
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +74 -58
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +59 -59
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +124 -129
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +190 -227
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +55 -55
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +52 -52
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +52 -52
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +0 -75
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +695 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +702 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +220 -20
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +418 -81
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +229 -114
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +12 -12
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +32 -32
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +4 -4
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +29 -55
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +8 -8
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +72 -88
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +65 -73
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -37
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -75
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +30 -113
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -108
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +51 -51
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +36 -36
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +15 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +19 -19
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +0 -1
- package/contracts/authorization/Authorization.sol +6 -4
- package/contracts/authorization/IAccessAdmin.sol +0 -1
- package/contracts/authorization/ServiceAuthorization.sol +4 -3
- package/contracts/distribution/DistributionService.sol +4 -19
- package/contracts/distribution/IDistributionService.sol +1 -3
- package/contracts/instance/IInstance.sol +7 -30
- package/contracts/instance/Instance.sol +8 -33
- package/contracts/instance/InstanceAdmin.sol +23 -4
- package/contracts/instance/InstanceReader.sol +2 -7
- package/contracts/instance/InstanceService.sol +54 -31
- package/contracts/instance/base/ObjectLifecycle.sol +2 -3
- package/contracts/instance/module/IComponents.sol +1 -2
- package/contracts/instance/module/IPolicy.sol +1 -1
- package/contracts/oracle/Oracle.sol +1 -0
- package/contracts/oracle/OracleService.sol +2 -1
- package/contracts/pool/BasicPool.sol +2 -2
- package/contracts/pool/BasicPoolAuthorization.sol +1 -1
- package/contracts/pool/BundleService.sol +8 -23
- package/contracts/pool/IBundleService.sol +2 -3
- package/contracts/pool/IPoolService.sol +31 -17
- package/contracts/pool/Pool.sol +12 -12
- package/contracts/pool/PoolService.sol +62 -75
- package/contracts/product/ApplicationService.sol +38 -18
- package/contracts/product/BasicProduct.sol +1 -0
- package/contracts/product/ClaimService.sol +9 -10
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +1 -0
- package/contracts/product/IPolicyService.sol +17 -17
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +193 -138
- package/contracts/product/PricingService.sol +6 -2
- package/contracts/product/Product.sol +22 -22
- package/contracts/product/{ProductService.sol → RiskService.sol} +5 -7
- package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +48 -14
- package/contracts/registry/Registry.sol +324 -195
- package/contracts/registry/RegistryAdmin.sol +150 -51
- package/contracts/registry/RegistryService.sol +1 -2
- package/contracts/registry/ReleaseLifecycle.sol +3 -1
- package/contracts/registry/ReleaseRegistry.sol +125 -72
- package/contracts/registry/ServiceAuthorizationV3.sol +1 -1
- package/contracts/shared/Component.sol +11 -23
- package/contracts/shared/ComponentService.sol +14 -24
- package/contracts/shared/IComponent.sol +4 -4
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/StakeManagerLib.sol +0 -25
- package/contracts/staking/Staking.sol +6 -25
- package/contracts/staking/StakingService.sol +9 -13
- package/contracts/type/StateId.sol +4 -0
- package/contracts/type/Version.sol +5 -2
- package/contracts/upgradeability/ProxyManager.sol +14 -14
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +1 -1
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
@@ -9,12 +9,12 @@ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManage
|
|
9
9
|
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
|
10
10
|
|
11
11
|
import {NftId} from "../type/NftId.sol";
|
12
|
-
import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
|
12
|
+
import {RoleId, RoleIdLib, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
|
13
13
|
import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
|
14
14
|
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
15
15
|
import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
|
16
16
|
import {Seconds, SecondsLib} from "../type/Seconds.sol";
|
17
|
-
import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
|
17
|
+
import {StateId, INITIAL, SCHEDULED, DEPLOYING, SKIPPED, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
|
18
18
|
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
19
19
|
|
20
20
|
import {IService} from "../shared/IService.sol";
|
@@ -39,7 +39,7 @@ contract ReleaseRegistry is
|
|
39
39
|
{
|
40
40
|
using ObjectTypeLib for ObjectType;
|
41
41
|
|
42
|
-
uint256 public constant INITIAL_GIF_VERSION = 3
|
42
|
+
uint256 public constant INITIAL_GIF_VERSION = 3;// first active version
|
43
43
|
|
44
44
|
event LogReleaseCreation(VersionPart version, bytes32 salt);
|
45
45
|
event LogReleaseActivation(VersionPart version);
|
@@ -95,15 +95,9 @@ contract ReleaseRegistry is
|
|
95
95
|
address private _stakingOwner;
|
96
96
|
|
97
97
|
mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
|
98
|
-
mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
|
99
98
|
|
100
|
-
// TODO check where/why this is used
|
101
|
-
mapping(address registryService => VersionPart version) _releaseVersionByAddress;
|
102
|
-
|
103
|
-
VersionPart private _initial;// first active version
|
104
99
|
VersionPart internal _latest; // latest active version
|
105
100
|
VersionPart internal _next; // version to create and activate
|
106
|
-
mapping(VersionPart verson => StateId releaseState) private _state;
|
107
101
|
|
108
102
|
uint256 internal _registeredServices;
|
109
103
|
uint256 internal _servicesToRegister;
|
@@ -121,7 +115,6 @@ contract ReleaseRegistry is
|
|
121
115
|
_registry = registry;
|
122
116
|
_admin = RegistryAdmin(_registry.getRegistryAdminAddress());
|
123
117
|
|
124
|
-
_initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
|
125
118
|
_next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
|
126
119
|
}
|
127
120
|
|
@@ -132,10 +125,19 @@ contract ReleaseRegistry is
|
|
132
125
|
restricted() // GIF_ADMIN_ROLE
|
133
126
|
returns(VersionPart)
|
134
127
|
{
|
135
|
-
|
128
|
+
VersionPart version = _next;
|
129
|
+
|
130
|
+
if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
|
131
|
+
// set previous release into SKIPPED state if was created but not activated
|
132
|
+
_releaseInfo[version].state == SKIPPED();
|
133
|
+
}
|
134
|
+
|
135
|
+
version = VersionPartLib.toVersionPart(version.toInt() + 1);
|
136
|
+
|
137
|
+
_next = version;
|
138
|
+
_releaseInfo[version].state = getInitialState(RELEASE());
|
136
139
|
_servicesToRegister = 0;
|
137
140
|
_registeredServices = 0;
|
138
|
-
_state[_next] = getInitialState(RELEASE());
|
139
141
|
|
140
142
|
return _next;
|
141
143
|
}
|
@@ -148,75 +150,75 @@ contract ReleaseRegistry is
|
|
148
150
|
restricted() // GIF_MANAGER_ROLE
|
149
151
|
returns(
|
150
152
|
address authority,
|
151
|
-
VersionPart
|
153
|
+
VersionPart releaseVersion,
|
152
154
|
bytes32 releaseSalt
|
153
155
|
)
|
154
156
|
{
|
155
157
|
authority = _admin.authority();
|
156
|
-
|
158
|
+
releaseVersion = _next;
|
159
|
+
StateId state = _releaseInfo[releaseVersion].state;
|
160
|
+
StateId newState = DEPLOYING();
|
157
161
|
|
158
162
|
// ensures unique salt
|
159
163
|
// TODO CreateX have clones capability also
|
160
164
|
// what would releaseSalt look like if used with CreateX in pemissioned mode?
|
161
165
|
releaseSalt = keccak256(
|
162
166
|
bytes.concat(
|
163
|
-
bytes32(
|
167
|
+
bytes32(releaseVersion.toInt()),
|
164
168
|
salt));
|
165
169
|
|
166
|
-
// verify release in state SCHEDULED
|
167
|
-
if (!isValidTransition(RELEASE(),
|
168
|
-
revert ErrorReleaseRegistryReleasePreparationDisallowed(
|
170
|
+
// verify release in state SCHEDULED or DEPLOYING
|
171
|
+
if (!isValidTransition(RELEASE(), state, newState)) {
|
172
|
+
revert ErrorReleaseRegistryReleasePreparationDisallowed(releaseVersion, state);
|
169
173
|
}
|
170
174
|
|
171
|
-
_state[version] = DEPLOYING();
|
172
|
-
|
173
175
|
// verify authorizaion contract release matches with expected version
|
174
|
-
VersionPart
|
175
|
-
if (releaseVersion !=
|
176
|
-
revert ErrorReleaseRegistryVersionMismatch(
|
176
|
+
VersionPart authVersion = serviceAuthorization.getRelease();
|
177
|
+
if (releaseVersion != authVersion) {
|
178
|
+
revert ErrorReleaseRegistryVersionMismatch(releaseVersion, authVersion);
|
177
179
|
}
|
178
180
|
|
179
|
-
|
180
181
|
// sanity check to ensure service domain list is not empty
|
181
182
|
uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
|
182
183
|
if (serviceDomainsCount == 0) {
|
183
|
-
revert ErrorReleaseRegistryNoDomains(
|
184
|
+
revert ErrorReleaseRegistryNoDomains(releaseVersion);
|
184
185
|
}
|
185
186
|
|
186
|
-
// verify prepareNextRelease is only called once per release
|
187
|
+
// verify prepareNextRelease is only called once per release, in state SCHEDULED
|
187
188
|
if(_servicesToRegister > 0) {
|
188
|
-
revert ErrorReleaseRegistryReleaseAlreadyPrepared(
|
189
|
+
revert ErrorReleaseRegistryReleaseAlreadyPrepared(releaseVersion, state);
|
189
190
|
}
|
190
191
|
|
191
192
|
_servicesToRegister = serviceDomainsCount;
|
192
|
-
|
193
|
+
// TODO allow for the same serviceAuthorization address to be used for multiple releases????
|
194
|
+
_releaseInfo[releaseVersion].auth = serviceAuthorization;
|
195
|
+
_releaseInfo[releaseVersion].state = newState;
|
193
196
|
|
194
|
-
emit LogReleaseCreation(
|
197
|
+
emit LogReleaseCreation(releaseVersion, releaseSalt);
|
195
198
|
}
|
196
199
|
|
197
|
-
// TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
|
198
200
|
function registerService(IService service)
|
199
201
|
external
|
200
202
|
restricted // GIF_MANAGER_ROLE
|
201
203
|
returns(NftId nftId)
|
202
204
|
{
|
203
205
|
VersionPart releaseVersion = _next;
|
204
|
-
StateId state =
|
206
|
+
StateId state = _releaseInfo[releaseVersion].state;
|
207
|
+
StateId newState = DEPLOYING();
|
208
|
+
IServiceAuthorization auth = _releaseInfo[releaseVersion].auth;
|
205
209
|
|
206
210
|
// verify release in state DEPLOYING
|
207
|
-
if (!isValidTransition(RELEASE(), state,
|
211
|
+
if (!isValidTransition(RELEASE(), state, newState)) {
|
208
212
|
// TOOD name must represent failed state transition
|
209
213
|
revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
|
210
214
|
}
|
211
215
|
|
212
|
-
_state[releaseVersion] = DEPLOYING();
|
213
|
-
|
214
216
|
// not all services are registered
|
215
217
|
if (_servicesToRegister == _registeredServices) {
|
216
218
|
revert ErrorReleaseRegistryNoServiceRegistrationExpected();
|
217
219
|
}
|
218
220
|
|
219
|
-
// service can work with release
|
221
|
+
// service can work with release registry and release version
|
220
222
|
(
|
221
223
|
IRegistry.ObjectInfo memory info,
|
222
224
|
ObjectType serviceDomain,
|
@@ -224,27 +226,39 @@ contract ReleaseRegistry is
|
|
224
226
|
) = _verifyService(service);
|
225
227
|
|
226
228
|
// service domain matches defined in release config
|
227
|
-
ObjectType expectedDomain =
|
229
|
+
ObjectType expectedDomain = auth.getServiceDomain(_registeredServices);
|
228
230
|
if (serviceDomain != expectedDomain) {
|
229
231
|
revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
|
230
232
|
}
|
231
233
|
|
232
|
-
//
|
233
|
-
nftId = _registry.registerService(info, serviceVersion, serviceDomain);
|
234
|
-
service.linkToRegisteredNftId();
|
235
|
-
_registeredServices++;
|
234
|
+
// TODO: service address matches defined in release auth
|
236
235
|
|
237
236
|
// setup service authorization
|
238
237
|
_admin.authorizeService(
|
239
|
-
|
240
|
-
service
|
238
|
+
auth,
|
239
|
+
service,
|
240
|
+
serviceDomain,
|
241
|
+
releaseVersion);
|
241
242
|
|
242
|
-
// TODO consider to extend this to REGISTRY
|
243
243
|
// special roles for registry/staking/pool service
|
244
|
-
if (
|
245
|
-
|
244
|
+
if (
|
245
|
+
serviceDomain == REGISTRY() ||
|
246
|
+
serviceDomain == STAKING() ||
|
247
|
+
serviceDomain == POOL())
|
248
|
+
{
|
246
249
|
_admin.grantServiceRoleForAllVersions(service, serviceDomain);
|
247
250
|
}
|
251
|
+
|
252
|
+
_releaseInfo[releaseVersion].state = newState;
|
253
|
+
//_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
|
254
|
+
//_releaseInfo[releaseVersion].domains.push(serviceDomain);
|
255
|
+
//_releaseInfo[releaseVersion].names.push(service.getName()); // TODO if needed read name in _verifyService()?
|
256
|
+
|
257
|
+
_registeredServices++;
|
258
|
+
|
259
|
+
// register service with registry
|
260
|
+
nftId = _registry.registerService(info, serviceVersion, serviceDomain);
|
261
|
+
service.linkToRegisteredNftId();
|
248
262
|
}
|
249
263
|
|
250
264
|
|
@@ -253,7 +267,7 @@ contract ReleaseRegistry is
|
|
253
267
|
restricted // GIF_ADMIN_ROLE
|
254
268
|
{
|
255
269
|
VersionPart version = _next;
|
256
|
-
StateId state =
|
270
|
+
StateId state = _releaseInfo[version].state;
|
257
271
|
StateId newState = ACTIVE();
|
258
272
|
|
259
273
|
// verify release in state DEPLOYING
|
@@ -273,9 +287,7 @@ contract ReleaseRegistry is
|
|
273
287
|
}
|
274
288
|
|
275
289
|
_latest = version;
|
276
|
-
|
277
|
-
|
278
|
-
_releaseVersionByAddress[service] = version;
|
290
|
+
_releaseInfo[version].state = newState;
|
279
291
|
_releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
|
280
292
|
|
281
293
|
emit LogReleaseActivation(version);
|
@@ -286,7 +298,7 @@ contract ReleaseRegistry is
|
|
286
298
|
external
|
287
299
|
restricted // GIF_ADMIN_ROLE
|
288
300
|
{
|
289
|
-
StateId state =
|
301
|
+
StateId state = _releaseInfo[version].state;
|
290
302
|
StateId newState = PAUSED();
|
291
303
|
|
292
304
|
// verify release in state ACTIVE
|
@@ -294,22 +306,22 @@ contract ReleaseRegistry is
|
|
294
306
|
revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
|
295
307
|
}
|
296
308
|
|
297
|
-
// TODO
|
298
|
-
//
|
309
|
+
// TODO may run out of gas
|
310
|
+
// TODO test how many service roles can be revoked in one transaction -> add to docs + each release must test for this -> add to release registry tests, call in test with some gas limit?
|
311
|
+
_revokeReleaseRoles(version);
|
299
312
|
|
300
|
-
|
313
|
+
_releaseInfo[version].state = newState;
|
301
314
|
_releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
|
302
315
|
|
303
316
|
emit LogReleaseDisabled(version);
|
304
317
|
}
|
305
318
|
|
306
|
-
// TODO consider revert if some delay is expired -> becomes disabled automatically
|
307
319
|
/// @dev resume operations with release services
|
308
320
|
function unpauseRelease(VersionPart version)
|
309
321
|
external
|
310
322
|
restricted // GIF_ADMIN_ROLE
|
311
323
|
{
|
312
|
-
StateId state =
|
324
|
+
StateId state = _releaseInfo[version].state;
|
313
325
|
StateId newState = ACTIVE();
|
314
326
|
|
315
327
|
// verify release in state PAUSED
|
@@ -317,10 +329,9 @@ contract ReleaseRegistry is
|
|
317
329
|
revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
|
318
330
|
}
|
319
331
|
|
320
|
-
|
321
|
-
// _releaseAccessManager[version].enable();
|
332
|
+
_grantReleaseRoles(version);
|
322
333
|
|
323
|
-
|
334
|
+
_releaseInfo[version].state = newState;
|
324
335
|
_releaseInfo[version].disabledAt = zeroTimestamp();
|
325
336
|
|
326
337
|
emit LogReleaseEnabled(version);
|
@@ -336,13 +347,8 @@ contract ReleaseRegistry is
|
|
336
347
|
return Clones.predictDeterministicAddress(implementation, salt, deployer);
|
337
348
|
}
|
338
349
|
|
339
|
-
function isActiveRegistryService(address service) external view returns(bool) {
|
340
|
-
VersionPart version = _releaseVersionByAddress[service];
|
341
|
-
return isActiveRelease(version);
|
342
|
-
}
|
343
|
-
|
344
350
|
function isActiveRelease(VersionPart version) public view returns(bool) {
|
345
|
-
return
|
351
|
+
return _releaseInfo[version].state == ACTIVE();
|
346
352
|
}
|
347
353
|
|
348
354
|
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
|
@@ -357,12 +363,8 @@ contract ReleaseRegistry is
|
|
357
363
|
return _latest;
|
358
364
|
}
|
359
365
|
|
360
|
-
function getInitialVersion() external view returns(VersionPart) {
|
361
|
-
return _initial;
|
362
|
-
}
|
363
|
-
|
364
366
|
function getState(VersionPart version) external view returns (StateId stateId) {
|
365
|
-
return
|
367
|
+
return _releaseInfo[version].state;
|
366
368
|
}
|
367
369
|
|
368
370
|
function getRemainingServicesToRegister() external view returns (uint256 services) {
|
@@ -374,7 +376,7 @@ contract ReleaseRegistry is
|
|
374
376
|
view
|
375
377
|
returns (IServiceAuthorization serviceAuthorization)
|
376
378
|
{
|
377
|
-
return
|
379
|
+
return _releaseInfo[version].auth;
|
378
380
|
}
|
379
381
|
|
380
382
|
function getRegistryAdmin() external view returns (address) {
|
@@ -389,6 +391,58 @@ contract ReleaseRegistry is
|
|
389
391
|
|
390
392
|
//--- private functions ----------------------------------------------------//
|
391
393
|
|
394
|
+
function _revokeReleaseRoles(VersionPart version)
|
395
|
+
private
|
396
|
+
{
|
397
|
+
address service;
|
398
|
+
ObjectType domain;
|
399
|
+
IServiceAuthorization auth = _releaseInfo[version].auth;
|
400
|
+
|
401
|
+
ObjectType[] memory domains = auth.getServiceDomains();
|
402
|
+
for(uint idx = 0; idx < domains.length; idx++)
|
403
|
+
{
|
404
|
+
domain = domains[idx];
|
405
|
+
service = _registry.getServiceAddress(domain, version);
|
406
|
+
_admin.revokeServiceRole(IService(service), domain, version);
|
407
|
+
|
408
|
+
// special roles for registry/staking/pool service
|
409
|
+
if(
|
410
|
+
domain == REGISTRY() ||
|
411
|
+
domain == STAKING() ||
|
412
|
+
domain == POOL()
|
413
|
+
)
|
414
|
+
{
|
415
|
+
_admin.revokeServiceRoleForAllVersions(IService(service), domain);
|
416
|
+
}
|
417
|
+
}
|
418
|
+
}
|
419
|
+
|
420
|
+
function _grantReleaseRoles(VersionPart version)
|
421
|
+
private
|
422
|
+
{
|
423
|
+
address service;
|
424
|
+
ObjectType domain;
|
425
|
+
IServiceAuthorization auth = _releaseInfo[version].auth;
|
426
|
+
|
427
|
+
ObjectType[] memory domains = auth.getServiceDomains();
|
428
|
+
for(uint idx = 0; idx < domains.length; idx++)
|
429
|
+
{
|
430
|
+
domain = domains[idx];
|
431
|
+
service = _registry.getServiceAddress(domain, version);
|
432
|
+
_admin.grantServiceRole(IService(service), domain, version);
|
433
|
+
|
434
|
+
// special roles for registry/staking/pool service
|
435
|
+
if(
|
436
|
+
domain == REGISTRY() ||
|
437
|
+
domain == STAKING() ||
|
438
|
+
domain == POOL()
|
439
|
+
)
|
440
|
+
{
|
441
|
+
_admin.grantServiceRoleForAllVersions(IService(service), domain);
|
442
|
+
}
|
443
|
+
}
|
444
|
+
}
|
445
|
+
|
392
446
|
function _verifyService(IService service)
|
393
447
|
internal
|
394
448
|
view
|
@@ -472,8 +526,7 @@ contract ReleaseRegistry is
|
|
472
526
|
if (registryAddress == address(0)) {
|
473
527
|
return false;
|
474
528
|
}
|
475
|
-
// TODO try catch and return false in case of revert
|
476
|
-
// or just panic
|
529
|
+
// TODO try catch and return false in case of revert or just panic
|
477
530
|
// check if contract returns a zero nft id for its own address
|
478
531
|
if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
|
479
532
|
return false;
|
@@ -6,7 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
|
|
6
6
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
7
7
|
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
8
8
|
|
9
|
-
import {Amount} from "../type/Amount.sol";
|
9
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
10
10
|
import {IComponent} from "./IComponent.sol";
|
11
11
|
import {IComponents} from "../instance/module/IComponents.sol";
|
12
12
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
@@ -109,11 +109,11 @@ abstract contract Component is
|
|
109
109
|
revert ErrorComponentWalletNotComponent();
|
110
110
|
}
|
111
111
|
|
112
|
+
emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
|
113
|
+
|
112
114
|
IERC20Metadata(token).approve(
|
113
115
|
address(getTokenHandler()),
|
114
116
|
spendingLimitAmount.toInt());
|
115
|
-
|
116
|
-
emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
|
117
117
|
}
|
118
118
|
|
119
119
|
function setWallet(address newWallet)
|
@@ -124,34 +124,22 @@ abstract contract Component is
|
|
124
124
|
{
|
125
125
|
// checks
|
126
126
|
address currentWallet = getWallet();
|
127
|
-
|
128
|
-
uint256 currentBalance = token.balanceOf(currentWallet);
|
129
|
-
|
130
|
-
if (currentBalance > 0) {
|
131
|
-
if (currentWallet == address(this)) {
|
132
|
-
// move tokens from component smart contract to external wallet
|
133
|
-
} else {
|
134
|
-
// move tokens from external wallet to component smart contract or another external wallet
|
135
|
-
uint256 allowance = token.allowance(currentWallet, address(this));
|
136
|
-
if (allowance < currentBalance) {
|
137
|
-
revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
|
138
|
-
}
|
139
|
-
}
|
140
|
-
}
|
127
|
+
uint256 currentBalance = getToken().balanceOf(currentWallet);
|
141
128
|
|
142
129
|
// effects
|
143
130
|
_setWallet(newWallet);
|
144
131
|
|
145
132
|
// interactions
|
146
133
|
if (currentBalance > 0) {
|
147
|
-
//
|
134
|
+
// move tokens from old to new wallet
|
135
|
+
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
136
|
+
|
148
137
|
if (currentWallet == address(this)) {
|
149
|
-
//
|
150
|
-
|
138
|
+
// transfer from the component requires an allowance
|
139
|
+
getTokenHandler().distributeTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
|
140
|
+
} else {
|
141
|
+
getTokenHandler().collectTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
|
151
142
|
}
|
152
|
-
|
153
|
-
SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
|
154
|
-
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
155
143
|
}
|
156
144
|
}
|
157
145
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
-
|
6
4
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
7
5
|
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
8
6
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
@@ -21,7 +19,7 @@ import {KEEP_STATE} from "../type/StateId.sol";
|
|
21
19
|
import {NftId} from "../type/NftId.sol";
|
22
20
|
import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
|
23
21
|
import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
|
24
|
-
import {
|
22
|
+
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
25
23
|
|
26
24
|
contract ComponentService is
|
27
25
|
ComponentVerifyingService,
|
@@ -48,7 +46,7 @@ contract ComponentService is
|
|
48
46
|
)
|
49
47
|
internal
|
50
48
|
virtual override
|
51
|
-
|
49
|
+
onlyInitializing()
|
52
50
|
{
|
53
51
|
// TODO check this, might no longer be the way, refactor if necessary
|
54
52
|
address registryAddress;
|
@@ -115,23 +113,13 @@ contract ComponentService is
|
|
115
113
|
}
|
116
114
|
}
|
117
115
|
|
118
|
-
// check allowance
|
119
|
-
TokenHandler tokenHandler = info.tokenHandler;
|
120
|
-
IERC20Metadata token = IERC20Metadata(info.token);
|
121
|
-
uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
|
122
|
-
if (tokenAllowance < withdrawnAmount.toInt()) {
|
123
|
-
revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
|
124
|
-
}
|
125
|
-
|
126
116
|
// decrease fee counters by withdrawnAmount
|
127
117
|
_changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
|
128
118
|
|
129
119
|
// transfer amount to component owner
|
130
120
|
address componentOwner = getRegistry().ownerOf(componentNftId);
|
131
|
-
|
132
|
-
tokenHandler.
|
133
|
-
|
134
|
-
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
|
121
|
+
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
|
122
|
+
info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
|
135
123
|
}
|
136
124
|
|
137
125
|
|
@@ -152,7 +140,7 @@ contract ComponentService is
|
|
152
140
|
contractAddress,
|
153
141
|
PRODUCT(),
|
154
142
|
PRODUCT_OWNER_ROLE());
|
155
|
-
|
143
|
+
|
156
144
|
// create product info
|
157
145
|
IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
|
158
146
|
instanceStore.createProduct(productNftId, productInfo);
|
@@ -523,22 +511,24 @@ contract ComponentService is
|
|
523
511
|
|
524
512
|
component.linkToRegisteredNftId();
|
525
513
|
|
526
|
-
// setup initial component authorization
|
527
|
-
_instanceService.initializeAuthorization(
|
528
|
-
instance.getNftId(),
|
529
|
-
component);
|
530
|
-
|
531
514
|
// save amended component info with instance
|
532
515
|
instanceReader = instance.getInstanceReader();
|
533
516
|
instanceStore = instance.getInstanceStore();
|
534
517
|
|
535
|
-
IComponents.ComponentInfo memory componentInfo = component.
|
536
|
-
componentInfo.tokenHandler =
|
518
|
+
IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
|
519
|
+
componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
520
|
+
address(componentInfo.token),
|
521
|
+
address(instance.getInstanceAdmin().authority()));
|
537
522
|
|
538
523
|
instanceStore.createComponent(
|
539
524
|
component.getNftId(),
|
540
525
|
componentInfo);
|
541
526
|
|
527
|
+
// setup initial component authorization
|
528
|
+
_instanceService.initializeAuthorization(
|
529
|
+
instance.getNftId(),
|
530
|
+
component);
|
531
|
+
|
542
532
|
// TODO add logging
|
543
533
|
}
|
544
534
|
|
@@ -23,7 +23,6 @@ interface IComponent is
|
|
23
23
|
error ErrorComponentNameLengthZero();
|
24
24
|
error ErrorComponentWalletAddressZero();
|
25
25
|
error ErrorComponentWalletAddressIsSameAsCurrent();
|
26
|
-
error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
|
27
26
|
error ErrorComponentWalletNotComponent();
|
28
27
|
|
29
28
|
event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
|
@@ -35,10 +34,11 @@ interface IComponent is
|
|
35
34
|
/// only component owner (nft holder) is authorizes to call this function
|
36
35
|
function approveTokenHandler(Amount spendingLimitAmount) external;
|
37
36
|
|
38
|
-
/// @dev sets the wallet address for the component
|
39
|
-
/// if the current wallet has tokens, these will be transferred
|
37
|
+
/// @dev sets the wallet address for the component.
|
38
|
+
/// if the current wallet has tokens, these will be transferred.
|
40
39
|
/// if the new wallet address is externally owned, an approval from the
|
41
|
-
/// owner of the external wallet
|
40
|
+
/// owner of the external wallet to the tokenhandler of the component that
|
41
|
+
/// covers the current component balance must exist
|
42
42
|
function setWallet(address walletAddress) external;
|
43
43
|
|
44
44
|
/// @dev returns the name of this component
|
@@ -7,21 +7,14 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
|
|
7
7
|
import {Amount} from "../type/Amount.sol";
|
8
8
|
import {IComponent} from "../shared/IComponent.sol";
|
9
9
|
import {IAuthorization} from "../authorization/IAuthorization.sol";
|
10
|
-
import {IComponents} from "../instance/module/IComponents.sol";
|
11
10
|
import {IInstance} from "../instance/IInstance.sol";
|
12
|
-
import {IInstanceService} from "../instance/IInstanceService.sol";
|
13
|
-
import {IProductService} from "../product/IProductService.sol";
|
14
|
-
import {IRegisterable} from "../shared/IRegisterable.sol";
|
15
11
|
import {NftId} from "../type/NftId.sol";
|
16
|
-
import {ObjectType} from "../type/ObjectType.sol";
|
17
|
-
import {TokenHandler} from "../shared/TokenHandler.sol";
|
18
12
|
|
19
13
|
/// @dev component base class
|
20
14
|
/// component examples are product, distribution, pool and oracle
|
21
15
|
interface IInstanceLinkedComponent is
|
22
16
|
IComponent
|
23
17
|
{
|
24
|
-
error ErrorComponentNotProductService(address caller);
|
25
18
|
error ErrorComponentNotInstance(NftId instanceNftId);
|
26
19
|
error ErrorComponentProductNftAlreadySet();
|
27
20
|
|
@@ -38,19 +31,19 @@ interface IInstanceLinkedComponent is
|
|
38
31
|
/// only component owner (nft holder) is authorizes to call this function
|
39
32
|
function unlock() external;
|
40
33
|
|
34
|
+
/// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
|
35
|
+
/// @param amount the amount to withdraw
|
36
|
+
/// @return withdrawnAmount the amount that was actually withdrawn
|
37
|
+
function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
|
38
|
+
|
41
39
|
/// @dev defines the instance to which this component is linked to
|
42
40
|
function getInstance() external view returns (IInstance instance);
|
43
41
|
|
44
|
-
/// @dev defines the product to which this component is linked to
|
45
|
-
/// this is only relevant for pool and distribution components
|
46
|
-
function getProductNftId() external view returns (NftId productNftId);
|
47
|
-
|
48
42
|
/// @dev returns the initial component authorization specification.
|
49
43
|
function getAuthorization() external view returns (IAuthorization authorization);
|
50
44
|
|
51
|
-
/// @dev
|
52
|
-
///
|
53
|
-
|
54
|
-
function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
|
45
|
+
/// @dev defines the product to which this component is linked to
|
46
|
+
/// this is only relevant for pool and distribution components
|
47
|
+
function getProductNftId() external view returns (NftId productNftId);
|
55
48
|
|
56
49
|
}
|