@etherisc/gif-next 0.0.2-9620cae-586 → 0.0.2-9678144-986
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 +16 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +69 -26
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +237 -74
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +66 -38
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +102 -0
- 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 +2 -2
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +79 -121
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +70 -192
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- 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/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +46 -16
- 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 +30 -0
- 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 +30 -0
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +50 -57
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +462 -51
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +106 -26
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +252 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +43 -56
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +188 -53
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +43 -56
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +320 -89
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +67 -19
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +86 -1
- 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 +19 -0
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +169 -52
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +42 -26
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +19 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
- 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/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +271 -62
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +60 -32
- 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/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -0
- 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 +4 -0
- package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -0
- 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 +2 -2
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- 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 +12 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +36 -36
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +19 -19
- 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 +2 -2
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -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/Amount.sol/AmountLib.json +37 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- 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/Fee.sol/FeeLib.json +7 -2
- 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/Referral.sol/ReferralLib.json +2 -2
- 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/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
- 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/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +22 -10
- package/contracts/distribution/DistributionService.sol +61 -26
- package/contracts/distribution/DistributionServiceManager.sol +2 -5
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +12 -0
- package/contracts/instance/InstanceAuthorizationV3.sol +2 -0
- package/contracts/instance/InstanceReader.sol +8 -0
- package/contracts/instance/InstanceServiceManager.sol +2 -6
- package/contracts/instance/InstanceStore.sol +2 -1
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +0 -5
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +15 -6
- package/contracts/oracle/OracleServiceManager.sol +2 -5
- package/contracts/pool/BasicPool.sol +3 -1
- package/contracts/pool/BasicPoolAuthorization.sol +9 -0
- package/contracts/pool/BundleService.sol +186 -32
- package/contracts/pool/BundleServiceManager.sol +2 -5
- package/contracts/pool/IBundleService.sol +33 -5
- package/contracts/pool/IPoolComponent.sol +6 -0
- package/contracts/pool/IPoolService.sol +12 -13
- package/contracts/pool/Pool.sol +28 -11
- package/contracts/pool/PoolService.sol +164 -65
- package/contracts/pool/PoolServiceManager.sol +2 -5
- package/contracts/product/ApplicationService.sol +12 -36
- package/contracts/product/ApplicationServiceManager.sol +2 -2
- package/contracts/product/BasicProduct.sol +3 -33
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +7 -32
- package/contracts/product/ClaimServiceManager.sol +2 -2
- package/contracts/product/IPolicyService.sol +8 -2
- package/contracts/product/IProductComponent.sol +1 -0
- package/contracts/product/PolicyService.sol +72 -18
- package/contracts/product/PolicyServiceManager.sol +2 -5
- package/contracts/product/PricingServiceManager.sol +2 -5
- package/contracts/product/Product.sol +20 -1
- package/contracts/product/ProductService.sol +7 -32
- package/contracts/product/ProductServiceManager.sol +2 -5
- package/contracts/registry/RegistryService.sol +4 -18
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseRegistry.sol +0 -2
- package/contracts/shared/Component.sol +13 -14
- package/contracts/shared/ComponentService.sol +82 -12
- package/contracts/shared/ComponentServiceManager.sol +2 -2
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -0
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
- package/contracts/shared/InstanceLinkedComponent.sol +21 -0
- package/contracts/shared/NftOwnable.sol +2 -2
- package/contracts/shared/PolicyHolder.sol +2 -5
- package/contracts/shared/Service.sol +3 -4
- package/contracts/staking/IStaking.sol +1 -1
- package/contracts/staking/Staking.sol +19 -14
- package/contracts/staking/StakingManager.sol +2 -5
- package/contracts/staking/StakingReader.sol +6 -9
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/StakingStore.sol +5 -15
- package/contracts/type/Amount.sol +12 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/Seconds.sol +13 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +29 -10
- package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/package.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
- /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,13 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {Amount} from "../type/Amount.sol";
|
5
5
|
import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
|
6
|
-
import {ReferralId, ReferralStatus} from "../type/Referral.sol";
|
7
6
|
import {NftId} from "../type/NftId.sol";
|
8
|
-
import {
|
7
|
+
import {ReferralId, ReferralStatus} from "../type/Referral.sol";
|
9
8
|
import {UFixed} from "../type/UFixed.sol";
|
10
|
-
import {Timestamp} from "../type/Timestamp.sol";
|
11
9
|
|
12
10
|
interface IDistributionComponent is IInstanceLinkedComponent {
|
13
11
|
|
@@ -45,4 +43,10 @@ interface IDistributionComponent is IInstanceLinkedComponent {
|
|
45
43
|
|
46
44
|
/// @dev Returns true to ensure component is called when transferring distributor Nft Ids.
|
47
45
|
function isVerifying() external view returns (bool verifying);
|
46
|
+
|
47
|
+
/// @dev Withdraw commission for the distributor
|
48
|
+
/// @param distributorNftId the distributor Nft Id
|
49
|
+
/// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
|
50
|
+
/// @return withdrawnAmount the effective withdrawn amount
|
51
|
+
function withdrawCommission(NftId distributorNftId, Amount amount) external returns (Amount withdrawnAmount);
|
48
52
|
}
|
@@ -27,12 +27,18 @@ interface IDistributionService is IService {
|
|
27
27
|
error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
|
28
28
|
error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
|
29
29
|
|
30
|
+
error ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(Amount amount, Amount limit);
|
31
|
+
error ErrorDistributionServiceCommissionWithdrawAmountIsZero();
|
32
|
+
error ErrorDistributionServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
|
33
|
+
|
30
34
|
error ErrorDistributionServiceVariableFeesTooHight(uint256 maxDiscountPercentage, uint256 limit);
|
31
35
|
error ErrorDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
|
32
36
|
|
33
37
|
error ErrorIDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
|
34
38
|
error ErrorDistributionServiceInvalidFeeTransferred(Amount transferredDistributionFeeAmount, Amount expectedDistributionFeeAmount);
|
35
39
|
|
40
|
+
event LogDistributionServiceCommissionWithdrawn(NftId distributorNftId, address recipient, address tokenAddress, Amount amount);
|
41
|
+
|
36
42
|
function createDistributorType(
|
37
43
|
string memory name,
|
38
44
|
UFixed minDiscountPercentage,
|
@@ -82,4 +88,10 @@ interface IDistributionService is IService {
|
|
82
88
|
NftId distributorNftId,
|
83
89
|
ReferralId referralId
|
84
90
|
) external view returns (bool isValid);
|
91
|
+
|
92
|
+
/// @dev Withdraw commission for the distributor
|
93
|
+
/// @param distributorNftId the distributor Nft Id
|
94
|
+
/// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
|
95
|
+
/// @return withdrawnAmount the effective withdrawn amount
|
96
|
+
function withdrawCommission(NftId distributorNftId, Amount amount) external returns (Amount withdrawnAmount);
|
85
97
|
}
|
@@ -141,7 +141,9 @@ contract InstanceAuthorizationV3
|
|
141
141
|
_authorize(functions, InstanceStore.createProduct.selector, "createProduct");
|
142
142
|
_authorize(functions, InstanceStore.updateProduct.selector, "updateProduct");
|
143
143
|
_authorize(functions, InstanceStore.increaseBalance.selector, "increaseBalance");
|
144
|
+
_authorize(functions, InstanceStore.decreaseBalance.selector, "decreaseBalance");
|
144
145
|
_authorize(functions, InstanceStore.increaseFees.selector, "increaseFees");
|
146
|
+
_authorize(functions, InstanceStore.decreaseFees.selector, "decreaseFees");
|
145
147
|
|
146
148
|
// authorize distribution service role
|
147
149
|
functions = _authorizeForTarget(INSTANCE_STORE_TARGET_NAME, getServiceRole(DISTRIBUTION()));
|
@@ -85,6 +85,14 @@ contract InstanceReader {
|
|
85
85
|
return _store.getState(toPolicyKey(policyNftId));
|
86
86
|
}
|
87
87
|
|
88
|
+
function getBundleState(NftId bundleNftId)
|
89
|
+
public
|
90
|
+
view
|
91
|
+
returns (StateId state)
|
92
|
+
{
|
93
|
+
return _store.getState(toBundleKey(bundleNftId));
|
94
|
+
}
|
95
|
+
|
88
96
|
/// @dev returns true iff policy may be closed
|
89
97
|
/// a policy can be closed all conditions below are met
|
90
98
|
/// - policy exists
|
@@ -1,13 +1,9 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {
|
6
|
-
import {ProxyManager} from "../shared/ProxyManager.sol";
|
4
|
+
import {IVersionable} from "../upgradeability/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../upgradeability/ProxyManager.sol";
|
7
6
|
import {InstanceService} from "./InstanceService.sol";
|
8
|
-
import {Registry} from "../registry/Registry.sol";
|
9
|
-
import {RegistryService} from "../registry/RegistryService.sol";
|
10
|
-
import {REGISTRY} from "../type/ObjectType.sol";
|
11
7
|
|
12
8
|
contract InstanceServiceManager is ProxyManager {
|
13
9
|
|
@@ -7,7 +7,7 @@ import {Amount} from "../type/Amount.sol";
|
|
7
7
|
import {Key32} from "../type/Key32.sol";
|
8
8
|
import {NftId} from "../type/NftId.sol";
|
9
9
|
import {ClaimId} from "../type/ClaimId.sol";
|
10
|
-
import {ObjectType, BUNDLE, POLICY, POOL, PRODUCT, COMPONENT, DISTRIBUTOR
|
10
|
+
import {ObjectType, BUNDLE, POLICY, POOL, PRODUCT, COMPONENT, DISTRIBUTOR} from "../type/ObjectType.sol";
|
11
11
|
import {RequestId} from "../type/RequestId.sol";
|
12
12
|
import {RiskId} from "../type/RiskId.sol";
|
13
13
|
import {StateId} from "../type/StateId.sol";
|
@@ -116,6 +116,7 @@ contract InstanceStore is
|
|
116
116
|
|
117
117
|
//--- Distributor -------------------------------------------------------//
|
118
118
|
function createDistributor(NftId distributorNftId, IDistribution.DistributorInfo memory info) external restricted() {
|
119
|
+
_registerBalanceTarget(distributorNftId);
|
119
120
|
_create(_toNftKey32(distributorNftId, DISTRIBUTOR()), abi.encode(info));
|
120
121
|
}
|
121
122
|
|
@@ -13,7 +13,7 @@ interface IBundle {
|
|
13
13
|
NftId poolNftId;
|
14
14
|
Fee fee; // bundle fee on net premium amounts
|
15
15
|
bytes filter; // required conditions for applications to be considered for collateralization by this bundle
|
16
|
-
|
16
|
+
Timestamp activatedAt;
|
17
17
|
Timestamp expiredAt; // no new policies starting with this timestamp
|
18
18
|
Timestamp closedAt; // no open policies, locked amount = 0
|
19
19
|
}
|
@@ -21,7 +21,6 @@ interface IComponents {
|
|
21
21
|
bytes data; // will hold component type specific additional info (eg encoded pool info)
|
22
22
|
}
|
23
23
|
|
24
|
-
|
25
24
|
struct ProductInfo {
|
26
25
|
NftId distributionNftId;
|
27
26
|
NftId poolNftId;
|
@@ -36,7 +35,6 @@ interface IComponents {
|
|
36
35
|
|
37
36
|
|
38
37
|
struct PoolInfo {
|
39
|
-
NftId productNftId; // the nft of the product this pool is linked to
|
40
38
|
RoleId bundleOwnerRole; // the required role for bundle owners
|
41
39
|
// TODO maxCapitalAmount -> maxBalanceAmount
|
42
40
|
Amount maxCapitalAmount; // max capital amount allowed for pool
|
@@ -45,8 +43,5 @@ interface IComponents {
|
|
45
43
|
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
46
44
|
UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
|
47
45
|
UFixed retentionLevel; // amount of collateral held in pool (default 100%)
|
48
|
-
Fee poolFee; // pool fee on net premium
|
49
|
-
Fee stakingFee; // pool fee on staked capital from investor
|
50
|
-
Fee performanceFee; // pool fee on profits from capital investors
|
51
46
|
}
|
52
47
|
}
|
package/contracts/mock/Dip.sol
CHANGED
@@ -11,7 +11,8 @@ import {UFixed} from "../type/UFixed.sol";
|
|
11
11
|
import {Timestamp} from "../type/Timestamp.sol";
|
12
12
|
|
13
13
|
interface IOracleComponent is IInstanceLinkedComponent {
|
14
|
-
|
14
|
+
error ErrorOracleNotImplemented(string methodName);
|
15
|
+
|
15
16
|
/// @dev callback method for requesting some data from the oracle
|
16
17
|
function request(
|
17
18
|
RequestId requestId,
|
@@ -1,19 +1,17 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Amount} from "../type/Amount.sol";
|
4
5
|
import {COMPONENT, ORACLE} from "../type/ObjectType.sol";
|
5
6
|
import {IAuthorization} from "../authorization/IAuthorization.sol";
|
6
7
|
import {IComponentService} from "../shared/IComponentService.sol";
|
8
|
+
import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
|
7
9
|
import {IOracleComponent} from "./IOracleComponent.sol";
|
8
10
|
import {IOracleService} from "./IOracleService.sol";
|
9
|
-
import {
|
10
|
-
import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
|
11
|
-
import {NftId, NftIdLib} from "../type/NftId.sol";
|
11
|
+
import {NftId} from "../type/NftId.sol";
|
12
12
|
import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
|
13
|
-
import {InstanceReader} from "../instance/InstanceReader.sol";
|
14
13
|
import {RequestId} from "../type/RequestId.sol";
|
15
|
-
import {Timestamp
|
16
|
-
import {UFixed} from "../type/UFixed.sol";
|
14
|
+
import {Timestamp} from "../type/Timestamp.sol";
|
17
15
|
|
18
16
|
|
19
17
|
abstract contract Oracle is
|
@@ -73,6 +71,17 @@ abstract contract Oracle is
|
|
73
71
|
return false;
|
74
72
|
}
|
75
73
|
|
74
|
+
function withdrawFees(Amount amount)
|
75
|
+
external
|
76
|
+
virtual
|
77
|
+
override(IInstanceLinkedComponent, InstanceLinkedComponent)
|
78
|
+
onlyOwner()
|
79
|
+
restricted()
|
80
|
+
returns (Amount withdrawnAmount)
|
81
|
+
{
|
82
|
+
revert ErrorOracleNotImplemented("withdrawFees");
|
83
|
+
}
|
84
|
+
|
76
85
|
|
77
86
|
function _initializeOracle(
|
78
87
|
address registry,
|
@@ -1,12 +1,9 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IVersionable} from "../
|
5
|
-
import {ProxyManager} from "../
|
4
|
+
import {IVersionable} from "../upgradeability/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../upgradeability/ProxyManager.sol";
|
6
6
|
import {OracleService} from "./OracleService.sol";
|
7
|
-
import {Registry} from "../registry/Registry.sol";
|
8
|
-
import {RegistryService} from "../registry/RegistryService.sol";
|
9
|
-
import {REGISTRY} from "../type/ObjectType.sol";
|
10
7
|
|
11
8
|
contract OracleServiceManager is ProxyManager {
|
12
9
|
|
@@ -14,6 +14,7 @@ import {NftId, NftIdLib} from "../type/NftId.sol";
|
|
14
14
|
import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
|
15
15
|
import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
|
16
16
|
import {Seconds} from "../type/Seconds.sol";
|
17
|
+
import {Timestamp} from "../type/Timestamp.sol";
|
17
18
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
18
19
|
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
19
20
|
|
@@ -81,8 +82,9 @@ abstract contract BasicPool is
|
|
81
82
|
virtual
|
82
83
|
restricted()
|
83
84
|
onlyBundleOwner(bundleNftId)
|
85
|
+
returns(Timestamp newExpiredAt)
|
84
86
|
{
|
85
|
-
_extend(bundleNftId, lifetimeExtension);
|
87
|
+
return _extend(bundleNftId, lifetimeExtension);
|
86
88
|
}
|
87
89
|
|
88
90
|
|
@@ -4,6 +4,8 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {Authorization} from "../authorization/Authorization.sol";
|
5
5
|
import {BasicPool} from "./BasicPool.sol";
|
6
6
|
import {IAccess} from "../authorization/IAccess.sol";
|
7
|
+
import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
|
8
|
+
import {IPoolComponent} from "./IPoolComponent.sol";
|
7
9
|
import {POOL} from "../type/ObjectType.sol";
|
8
10
|
import {PUBLIC_ROLE} from "../../contracts/type/RoleId.sol";
|
9
11
|
import {RoleId} from "../type/RoleId.sol";
|
@@ -44,6 +46,13 @@ contract BasicPoolAuthorization
|
|
44
46
|
_authorize(functions, BasicPool.setMaxCapitalAmount.selector, "setMaxCapitalAmount");
|
45
47
|
_authorize(functions, BasicPool.setBundleOwnerRole.selector, "setBundleOwnerRole");
|
46
48
|
_authorize(functions, BasicPool.setFees.selector, "setFees");
|
49
|
+
_authorize(functions, BasicPool.stake.selector, "stake");
|
50
|
+
_authorize(functions, BasicPool.unstake.selector, "unstake");
|
51
|
+
_authorize(functions, BasicPool.extend.selector, "extend");
|
52
|
+
|
53
|
+
_authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
|
54
|
+
|
55
|
+
_authorize(functions, IPoolComponent.withdrawBundleFees.selector, "withdrawBundleFees");
|
47
56
|
}
|
48
57
|
}
|
49
58
|
|
@@ -1,37 +1,28 @@
|
|
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
|
+
|
4
6
|
import {IBundle} from "../instance/module/IBundle.sol";
|
7
|
+
import {IBundleService} from "./IBundleService.sol";
|
5
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
6
9
|
import {IComponentService} from "../shared/IComponentService.sol";
|
7
10
|
import {IRegistry} from "../registry/IRegistry.sol";
|
11
|
+
import {IRegistryService} from "../registry/IRegistryService.sol";
|
8
12
|
import {IInstance} from "../instance/IInstance.sol";
|
9
13
|
import {InstanceStore} from "../instance/InstanceStore.sol";
|
10
14
|
import {IPolicy} from "../instance/module/IPolicy.sol";
|
11
15
|
|
12
|
-
import {IVersionable} from "../shared/IVersionable.sol";
|
13
|
-
import {INftOwnable} from "../shared/INftOwnable.sol";
|
14
|
-
import {NftId, NftIdLib} from "../type/NftId.sol";
|
15
|
-
import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
|
16
|
-
import {POOL_OWNER_ROLE, RoleId} from "../type/RoleId.sol";
|
17
|
-
import {Pool} from "./Pool.sol";
|
18
|
-
|
19
16
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
20
|
-
import {Fee, FeeLib} from "../type/Fee.sol";
|
21
|
-
import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
|
22
|
-
import {Seconds} from "../type/Seconds.sol";
|
23
|
-
import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
24
|
-
import {Version, VersionLib} from "../type/Version.sol";
|
25
|
-
import {Versionable} from "../shared/Versionable.sol";
|
26
|
-
|
27
|
-
import {IService} from "../shared/IService.sol";
|
28
|
-
import {Service} from "../shared/Service.sol";
|
29
17
|
import {BundleSet} from "../instance/BundleSet.sol";
|
30
18
|
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
31
|
-
import {
|
32
|
-
import {IRegistryService} from "../registry/IRegistryService.sol";
|
33
|
-
import {InstanceService} from "../instance/InstanceService.sol";
|
19
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
34
20
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
21
|
+
import {NftId, NftIdLib} from "../type/NftId.sol";
|
22
|
+
import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
|
23
|
+
import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
|
24
|
+
import {Seconds} from "../type/Seconds.sol";
|
25
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
35
26
|
|
36
27
|
string constant BUNDLE_SERVICE_NAME = "BundleService";
|
37
28
|
|
@@ -39,8 +30,7 @@ contract BundleService is
|
|
39
30
|
ComponentVerifyingService,
|
40
31
|
IBundleService
|
41
32
|
{
|
42
|
-
|
43
|
-
|
33
|
+
|
44
34
|
string public constant NAME = "BundleService";
|
45
35
|
|
46
36
|
address private _registryAddress;
|
@@ -123,13 +113,15 @@ contract BundleService is
|
|
123
113
|
InstanceStore instanceStore = instance.getInstanceStore();
|
124
114
|
instanceStore.createBundle(
|
125
115
|
bundleNftId,
|
126
|
-
IBundle.BundleInfo(
|
127
|
-
poolNftId,
|
128
|
-
bundleFee,
|
129
|
-
filter,
|
130
|
-
|
131
|
-
TimestampLib.blockTimestamp().addSeconds(lifetime),
|
132
|
-
zeroTimestamp()
|
116
|
+
IBundle.BundleInfo({
|
117
|
+
poolNftId: poolNftId,
|
118
|
+
fee: bundleFee,
|
119
|
+
filter: filter,
|
120
|
+
activatedAt: TimestampLib.blockTimestamp(),
|
121
|
+
expiredAt: TimestampLib.blockTimestamp().addSeconds(lifetime),
|
122
|
+
closedAt: zeroTimestamp()
|
123
|
+
})
|
124
|
+
);
|
133
125
|
|
134
126
|
// bundle book keeping
|
135
127
|
_componentService.increaseBundleBalance(
|
@@ -141,7 +133,6 @@ contract BundleService is
|
|
141
133
|
// put bundle under bundle managemet
|
142
134
|
BundleSet bundleManager = instance.getBundleSet();
|
143
135
|
bundleManager.add(bundleNftId);
|
144
|
-
|
145
136
|
// TODO add logging
|
146
137
|
}
|
147
138
|
|
@@ -158,7 +149,7 @@ contract BundleService is
|
|
158
149
|
restricted()
|
159
150
|
{
|
160
151
|
InstanceReader instanceReader = instance.getInstanceReader();
|
161
|
-
StateId bundleState =
|
152
|
+
StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
|
162
153
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
163
154
|
|
164
155
|
// ensure bundle is active and not yet expired
|
@@ -228,9 +219,10 @@ contract BundleService is
|
|
228
219
|
external
|
229
220
|
virtual
|
230
221
|
restricted
|
222
|
+
returns (Amount balanceAmount, Amount feeAmount)
|
231
223
|
{
|
232
224
|
// udpate bundle state
|
233
|
-
instance.
|
225
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
234
226
|
|
235
227
|
// ensure no open policies attached to bundle
|
236
228
|
BundleSet bundleManager = instance.getBundleSet();
|
@@ -238,9 +230,116 @@ contract BundleService is
|
|
238
230
|
if(openPolicies > 0) {
|
239
231
|
revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
|
240
232
|
}
|
233
|
+
if(instanceReader.getLockedAmount(bundleNftId) > AmountLib.zero()) {
|
234
|
+
revert ErrorBundleServiceBundleWithLockedCollateral(bundleNftId, instanceReader.getLockedAmount(bundleNftId));
|
235
|
+
}
|
241
236
|
|
242
|
-
|
237
|
+
InstanceStore instanceStore = instance.getInstanceStore();
|
238
|
+
instanceStore.updateBundleState(bundleNftId, CLOSED());
|
243
239
|
bundleManager.lock(bundleNftId);
|
240
|
+
|
241
|
+
Amount balanceAmount = instanceReader.getBalanceAmount(bundleNftId);
|
242
|
+
Amount feeAmount = instanceReader.getFeeAmount(bundleNftId);
|
243
|
+
_componentService.decreaseBundleBalance(instanceStore, bundleNftId, balanceAmount, feeAmount);
|
244
|
+
}
|
245
|
+
|
246
|
+
/// @inheritdoc IBundleService
|
247
|
+
function stake(
|
248
|
+
IInstance instance,
|
249
|
+
NftId bundleNftId,
|
250
|
+
Amount amount
|
251
|
+
)
|
252
|
+
external
|
253
|
+
virtual
|
254
|
+
// TODO: restricted() (once #462 is done)
|
255
|
+
{
|
256
|
+
IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
|
257
|
+
StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
|
258
|
+
|
259
|
+
if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
|
260
|
+
|| bundleInfo.expiredAt < TimestampLib.blockTimestamp()
|
261
|
+
|| bundleInfo.closedAt.gtz()) {
|
262
|
+
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
263
|
+
}
|
264
|
+
|
265
|
+
_componentService.increaseBundleBalance(
|
266
|
+
instance.getInstanceStore(),
|
267
|
+
bundleNftId,
|
268
|
+
amount,
|
269
|
+
AmountLib.zero());
|
270
|
+
}
|
271
|
+
|
272
|
+
/// @inheritdoc IBundleService
|
273
|
+
function unstake(
|
274
|
+
IInstance instance,
|
275
|
+
NftId bundleNftId,
|
276
|
+
Amount amount
|
277
|
+
)
|
278
|
+
external
|
279
|
+
virtual
|
280
|
+
// TODO: restricted() (once #462 is done)
|
281
|
+
returns (Amount unstakedAmount)
|
282
|
+
{
|
283
|
+
InstanceStore instanceStore = instance.getInstanceStore();
|
284
|
+
(
|
285
|
+
Amount balanceAmount,
|
286
|
+
Amount lockedAmount,
|
287
|
+
Amount feeAmount
|
288
|
+
) = instanceStore.getAmounts(bundleNftId);
|
289
|
+
|
290
|
+
Amount unstakedAmount = amount;
|
291
|
+
Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
|
292
|
+
|
293
|
+
// if amount is max, then unstake all available
|
294
|
+
if (amount.gte(AmountLib.max())) {
|
295
|
+
unstakedAmount = availableAmount;
|
296
|
+
}
|
297
|
+
|
298
|
+
// ensure unstaked amount does not exceed available amount
|
299
|
+
if (unstakedAmount > availableAmount) {
|
300
|
+
revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
|
301
|
+
}
|
302
|
+
|
303
|
+
_componentService.decreaseBundleBalance(
|
304
|
+
instanceStore,
|
305
|
+
bundleNftId,
|
306
|
+
unstakedAmount,
|
307
|
+
AmountLib.zero());
|
308
|
+
|
309
|
+
return unstakedAmount;
|
310
|
+
}
|
311
|
+
|
312
|
+
/// @inheritdoc IBundleService
|
313
|
+
function extend(NftId bundleNftId, Seconds lifetimeExtension)
|
314
|
+
external
|
315
|
+
virtual
|
316
|
+
// TODO: restricted() (once #462 is done)
|
317
|
+
returns (Timestamp extendedExpiredAt)
|
318
|
+
{
|
319
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
320
|
+
IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
|
321
|
+
StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
|
322
|
+
|
323
|
+
// ensure bundle belongs to the pool
|
324
|
+
if (bundleInfo.poolNftId != poolNftId) {
|
325
|
+
revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
|
326
|
+
}
|
327
|
+
|
328
|
+
// ensure bundle is active and not yet expired
|
329
|
+
if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
|
330
|
+
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
331
|
+
}
|
332
|
+
|
333
|
+
if (lifetimeExtension.eqz()) {
|
334
|
+
revert ErrorBundleServiceExtensionLifetimeIsZero();
|
335
|
+
}
|
336
|
+
|
337
|
+
bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
|
338
|
+
instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
339
|
+
|
340
|
+
emit LogBundleServiceBundleExtended(bundleNftId, lifetimeExtension, bundleInfo.expiredAt);
|
341
|
+
|
342
|
+
return bundleInfo.expiredAt;
|
244
343
|
}
|
245
344
|
|
246
345
|
|
@@ -274,6 +373,61 @@ contract BundleService is
|
|
274
373
|
instance.getBundleSet().unlinkPolicy(policyNftId);
|
275
374
|
}
|
276
375
|
|
376
|
+
/// @inheritdoc IBundleService
|
377
|
+
function withdrawBundleFees(NftId bundleNftId, Amount amount)
|
378
|
+
public
|
379
|
+
virtual
|
380
|
+
// TODO: restricted() (once #462 is done)
|
381
|
+
returns (Amount withdrawnAmount)
|
382
|
+
{
|
383
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
384
|
+
InstanceReader reader = instance.getInstanceReader();
|
385
|
+
|
386
|
+
IComponents.ComponentInfo memory poolInfo = reader.getComponentInfo(poolNftId);
|
387
|
+
address poolWallet = poolInfo.wallet;
|
388
|
+
|
389
|
+
IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
|
390
|
+
|
391
|
+
// determine withdrawn amount
|
392
|
+
withdrawnAmount = amount;
|
393
|
+
if (withdrawnAmount.gte(AmountLib.max())) {
|
394
|
+
withdrawnAmount = reader.getFeeAmount(bundleNftId);
|
395
|
+
} else {
|
396
|
+
if (withdrawnAmount.gt(reader.getFeeAmount(bundleNftId))) {
|
397
|
+
revert ErrorBundleServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
|
398
|
+
}
|
399
|
+
}
|
400
|
+
|
401
|
+
if (withdrawnAmount.eqz()) {
|
402
|
+
revert ErrorBundleServiceFeesWithdrawAmountIsZero();
|
403
|
+
}
|
404
|
+
|
405
|
+
// check allowance
|
406
|
+
IERC20Metadata token = IERC20Metadata(poolInfo.token);
|
407
|
+
uint256 tokenAllowance = token.allowance(poolWallet, address(poolInfo.tokenHandler));
|
408
|
+
if (tokenAllowance < withdrawnAmount.toInt()) {
|
409
|
+
revert ErrorBundleServiceWalletAllowanceTooSmall(poolWallet, address(poolInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
|
410
|
+
}
|
411
|
+
|
412
|
+
// decrease fee counters by withdrawnAmount
|
413
|
+
{
|
414
|
+
InstanceStore store = instance.getInstanceStore();
|
415
|
+
// decrease fee amount of the bundle
|
416
|
+
_componentService.decreaseBundleBalance(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
|
417
|
+
// decrease pool balance
|
418
|
+
_componentService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
|
419
|
+
}
|
420
|
+
|
421
|
+
// transfer amount to bundle owner
|
422
|
+
{
|
423
|
+
address owner = getRegistry().ownerOf(bundleNftId);
|
424
|
+
// TODO: centralize token handling (issue #471)
|
425
|
+
poolInfo.tokenHandler.transfer(poolWallet, owner, withdrawnAmount);
|
426
|
+
|
427
|
+
emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
|
428
|
+
}
|
429
|
+
}
|
430
|
+
|
277
431
|
/// @dev links policy to bundle
|
278
432
|
function _linkPolicy(IInstance instance, NftId policyNftId)
|
279
433
|
internal
|
@@ -1,12 +1,9 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IVersionable} from "../
|
5
|
-
import {ProxyManager} from "../
|
4
|
+
import {IVersionable} from "../upgradeability/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../upgradeability/ProxyManager.sol";
|
6
6
|
import {BundleService} from "./BundleService.sol";
|
7
|
-
import {Registry} from "../registry/Registry.sol";
|
8
|
-
import {RegistryService} from "../registry/RegistryService.sol";
|
9
|
-
import {ObjectType, REGISTRY} from "../type/ObjectType.sol";
|
10
7
|
|
11
8
|
contract BundleServiceManager is ProxyManager {
|
12
9
|
|
@@ -26,6 +26,18 @@ interface IBundleService is IService {
|
|
26
26
|
|
27
27
|
error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
|
28
28
|
|
29
|
+
error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
|
30
|
+
error ErrorBundleServiceFeesWithdrawAmountIsZero();
|
31
|
+
error ErrorBundleServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
|
32
|
+
|
33
|
+
error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
|
34
|
+
error ErrorBundleServiceBundleWithLockedCollateral(NftId bundleNftId, Amount lockedCollateralAmount);
|
35
|
+
|
36
|
+
error ErrorBundleServiceExtensionLifetimeIsZero();
|
37
|
+
|
38
|
+
event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
|
39
|
+
event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
|
40
|
+
|
29
41
|
/// @dev create a new bundle for the specified attributes
|
30
42
|
/// may only be called by pool service
|
31
43
|
function create(
|
@@ -41,11 +53,20 @@ interface IBundleService is IService {
|
|
41
53
|
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
42
54
|
|
43
55
|
|
44
|
-
/// @dev increase bundle stakes by the specified amount
|
45
|
-
/// may only be called by the
|
46
|
-
|
56
|
+
/// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
|
57
|
+
/// may only be called by the pool service
|
58
|
+
function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
|
47
59
|
|
48
|
-
|
60
|
+
/// @dev decrease bundle stakes by the specified amount
|
61
|
+
/// may only be called by the pool service
|
62
|
+
/// @param instance the instance relevant for the bundle
|
63
|
+
/// @param bundleNftId the bundle nft id
|
64
|
+
/// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
|
65
|
+
/// @return unstakedAmount the effective unstaked amount
|
66
|
+
function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
|
67
|
+
|
68
|
+
/// @dev extend the lifetime of the bundle by the specified time in seconds
|
69
|
+
function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
|
49
70
|
|
50
71
|
/// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
|
51
72
|
/// only active bundles may be locked
|
@@ -64,7 +85,7 @@ interface IBundleService is IService {
|
|
64
85
|
function close(
|
65
86
|
IInstance instance,
|
66
87
|
NftId bundleNftId
|
67
|
-
) external;
|
88
|
+
) external returns (Amount balanceAmount, Amount feeAmount);
|
68
89
|
|
69
90
|
/// @dev set bundle fee to provided value
|
70
91
|
/// may only be called by registered and unlocked pool components
|
@@ -103,4 +124,11 @@ interface IBundleService is IService {
|
|
103
124
|
IInstance instance,
|
104
125
|
NftId policyNftId
|
105
126
|
) external;
|
127
|
+
|
128
|
+
/// @dev Withdraw bundle feeds for the given bundle
|
129
|
+
/// @param bundleNftId the bundle Nft Id
|
130
|
+
/// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
|
131
|
+
/// @return withdrawnAmount the effective withdrawn amount
|
132
|
+
function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
|
133
|
+
|
106
134
|
}
|