@etherisc/gif-next 0.0.2-bcecc4c-647 → 0.0.2-bd8fe7c-423
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 +30 -60
- 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 -38
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +78 -115
- 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 +16 -128
- 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/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/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 +18 -48
- 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/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 -38
- 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 +11 -99
- 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 +131 -93
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +57 -49
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +25 -3
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1 -57
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +74 -66
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +1 -95
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +198 -118
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +63 -27
- 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 +0 -38
- 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 +82 -58
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +34 -30
- 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/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 +184 -88
- 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/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 +291 -139
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -26
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -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 +0 -38
- 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/Component.sol/Component.json +0 -38
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +74 -58
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +38 -30
- 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/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- 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 -38
- 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 +53 -6
- 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 +2 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +56 -70
- 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 +29 -17
- 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 +12 -12
- 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/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/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/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/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/UFixedLib.dbg.json +1 -1
- 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 +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/distribution/DistributionService.sol +1 -2
- package/contracts/instance/InstanceReader.sol +10 -7
- package/contracts/instance/base/ObjectLifecycle.sol +1 -3
- package/contracts/instance/module/IComponents.sol +1 -6
- package/contracts/instance/module/IPolicy.sol +1 -1
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +5 -2
- package/contracts/pool/BundleService.sol +51 -25
- package/contracts/pool/IBundleService.sol +12 -5
- package/contracts/pool/IPoolService.sol +8 -14
- package/contracts/pool/Pool.sol +7 -11
- package/contracts/pool/PoolService.sol +103 -86
- package/contracts/product/BasicProduct.sol +3 -33
- package/contracts/product/ClaimService.sol +16 -9
- package/contracts/product/IClaimService.sol +1 -0
- package/contracts/product/IPolicyService.sol +19 -12
- package/contracts/product/PolicyService.sol +188 -108
- package/contracts/product/Product.sol +19 -0
- package/contracts/shared/Component.sol +8 -7
- package/contracts/shared/ComponentService.sol +1 -2
- package/contracts/shared/IComponent.sol +4 -3
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -8
- package/contracts/shared/TokenHandler.sol +4 -0
- package/contracts/staking/StakingService.sol +8 -12
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/package.json +1 -1
@@ -16,7 +16,7 @@ import {IPolicy} from "../instance/module/IPolicy.sol";
|
|
16
16
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
17
17
|
import {BundleSet} from "../instance/BundleSet.sol";
|
18
18
|
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
19
|
-
import {Fee
|
19
|
+
import {Fee} from "../type/Fee.sol";
|
20
20
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
21
21
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
22
22
|
import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
|
@@ -113,13 +113,15 @@ contract BundleService is
|
|
113
113
|
InstanceStore instanceStore = instance.getInstanceStore();
|
114
114
|
instanceStore.createBundle(
|
115
115
|
bundleNftId,
|
116
|
-
IBundle.BundleInfo(
|
117
|
-
poolNftId,
|
118
|
-
bundleFee,
|
119
|
-
filter,
|
120
|
-
TimestampLib.blockTimestamp(),
|
121
|
-
TimestampLib.blockTimestamp().addSeconds(lifetime),
|
122
|
-
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
|
+
);
|
123
125
|
|
124
126
|
// bundle book keeping
|
125
127
|
_componentService.increaseBundleBalance(
|
@@ -131,7 +133,6 @@ contract BundleService is
|
|
131
133
|
// put bundle under bundle managemet
|
132
134
|
BundleSet bundleManager = instance.getBundleSet();
|
133
135
|
bundleManager.add(bundleNftId);
|
134
|
-
|
135
136
|
// TODO add logging
|
136
137
|
}
|
137
138
|
|
@@ -148,7 +149,7 @@ contract BundleService is
|
|
148
149
|
restricted()
|
149
150
|
{
|
150
151
|
InstanceReader instanceReader = instance.getInstanceReader();
|
151
|
-
StateId bundleState =
|
152
|
+
StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
|
152
153
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
153
154
|
|
154
155
|
// ensure bundle is active and not yet expired
|
@@ -218,9 +219,9 @@ contract BundleService is
|
|
218
219
|
external
|
219
220
|
virtual
|
220
221
|
restricted
|
222
|
+
returns (Amount unstakedAmount, Amount feeAmount)
|
221
223
|
{
|
222
|
-
|
223
|
-
instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
|
224
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
224
225
|
|
225
226
|
// ensure no open policies attached to bundle
|
226
227
|
BundleSet bundleManager = instance.getBundleSet();
|
@@ -229,8 +230,18 @@ contract BundleService is
|
|
229
230
|
revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
|
230
231
|
}
|
231
232
|
|
232
|
-
|
233
|
-
|
233
|
+
{
|
234
|
+
// update bundle state
|
235
|
+
InstanceStore instanceStore = instance.getInstanceStore();
|
236
|
+
instanceStore.updateBundleState(bundleNftId, CLOSED());
|
237
|
+
bundleManager.lock(bundleNftId);
|
238
|
+
|
239
|
+
// decrease bundle counters
|
240
|
+
Amount balanceAmountWithFees = instanceReader.getBalanceAmount(bundleNftId);
|
241
|
+
feeAmount = instanceReader.getFeeAmount(bundleNftId);
|
242
|
+
unstakedAmount = balanceAmountWithFees - feeAmount;
|
243
|
+
_componentService.decreaseBundleBalance(instanceStore, bundleNftId, unstakedAmount, feeAmount);
|
244
|
+
}
|
234
245
|
}
|
235
246
|
|
236
247
|
/// @inheritdoc IBundleService
|
@@ -241,12 +252,14 @@ contract BundleService is
|
|
241
252
|
)
|
242
253
|
external
|
243
254
|
virtual
|
244
|
-
restricted()
|
255
|
+
// TODO: restricted() (once #462 is done)
|
245
256
|
{
|
246
257
|
IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
|
247
|
-
StateId bundleState = instance.getInstanceReader().
|
258
|
+
StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
|
248
259
|
|
249
|
-
if(bundleState != ACTIVE()
|
260
|
+
if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
|
261
|
+
|| bundleInfo.expiredAt < TimestampLib.blockTimestamp()
|
262
|
+
|| bundleInfo.closedAt.gtz()) {
|
250
263
|
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
251
264
|
}
|
252
265
|
|
@@ -265,7 +278,8 @@ contract BundleService is
|
|
265
278
|
)
|
266
279
|
external
|
267
280
|
virtual
|
268
|
-
restricted()
|
281
|
+
// TODO: restricted() (once #462 is done)
|
282
|
+
returns (Amount unstakedAmount)
|
269
283
|
{
|
270
284
|
InstanceStore instanceStore = instance.getInstanceStore();
|
271
285
|
(
|
@@ -274,29 +288,38 @@ contract BundleService is
|
|
274
288
|
Amount feeAmount
|
275
289
|
) = instanceStore.getAmounts(bundleNftId);
|
276
290
|
|
291
|
+
Amount unstakedAmount = amount;
|
277
292
|
Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
|
293
|
+
|
294
|
+
// if amount is max, then unstake all available
|
295
|
+
if (amount.gte(AmountLib.max())) {
|
296
|
+
unstakedAmount = availableAmount;
|
297
|
+
}
|
278
298
|
|
279
|
-
|
280
|
-
|
299
|
+
// ensure unstaked amount does not exceed available amount
|
300
|
+
if (unstakedAmount > availableAmount) {
|
301
|
+
revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
|
281
302
|
}
|
282
303
|
|
283
304
|
_componentService.decreaseBundleBalance(
|
284
305
|
instanceStore,
|
285
306
|
bundleNftId,
|
286
|
-
|
307
|
+
unstakedAmount,
|
287
308
|
AmountLib.zero());
|
309
|
+
|
310
|
+
return unstakedAmount;
|
288
311
|
}
|
289
312
|
|
290
313
|
/// @inheritdoc IBundleService
|
291
314
|
function extend(NftId bundleNftId, Seconds lifetimeExtension)
|
292
315
|
external
|
293
316
|
virtual
|
294
|
-
restricted
|
317
|
+
// TODO: restricted() (once #462 is done)
|
295
318
|
returns (Timestamp extendedExpiredAt)
|
296
319
|
{
|
297
320
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
298
321
|
IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
|
299
|
-
StateId bundleState = instance.getInstanceReader().
|
322
|
+
StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
|
300
323
|
|
301
324
|
// ensure bundle belongs to the pool
|
302
325
|
if (bundleInfo.poolNftId != poolNftId) {
|
@@ -308,6 +331,10 @@ contract BundleService is
|
|
308
331
|
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
309
332
|
}
|
310
333
|
|
334
|
+
if (lifetimeExtension.eqz()) {
|
335
|
+
revert ErrorBundleServiceExtensionLifetimeIsZero();
|
336
|
+
}
|
337
|
+
|
311
338
|
bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
|
312
339
|
instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
313
340
|
|
@@ -395,10 +422,9 @@ contract BundleService is
|
|
395
422
|
// transfer amount to bundle owner
|
396
423
|
{
|
397
424
|
address owner = getRegistry().ownerOf(bundleNftId);
|
425
|
+
emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
|
398
426
|
// TODO: centralize token handling (issue #471)
|
399
427
|
poolInfo.tokenHandler.transfer(poolWallet, owner, withdrawnAmount);
|
400
|
-
|
401
|
-
emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
|
402
428
|
}
|
403
429
|
}
|
404
430
|
|
@@ -26,12 +26,13 @@ interface IBundleService is IService {
|
|
26
26
|
|
27
27
|
error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
|
28
28
|
|
29
|
-
// error ErrorBundleServiceBundleNotActive(NftId distributorNftId);
|
30
29
|
error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
|
31
30
|
error ErrorBundleServiceFeesWithdrawAmountIsZero();
|
32
31
|
error ErrorBundleServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
|
33
32
|
|
34
|
-
error
|
33
|
+
error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
|
34
|
+
|
35
|
+
error ErrorBundleServiceExtensionLifetimeIsZero();
|
35
36
|
|
36
37
|
event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
|
37
38
|
event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
|
@@ -51,13 +52,17 @@ interface IBundleService is IService {
|
|
51
52
|
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
52
53
|
|
53
54
|
|
54
|
-
/// @dev increase bundle stakes by the specified amount
|
55
|
+
/// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
|
55
56
|
/// may only be called by the pool service
|
56
57
|
function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
|
57
58
|
|
58
59
|
/// @dev decrease bundle stakes by the specified amount
|
59
60
|
/// may only be called by the pool service
|
60
|
-
|
61
|
+
/// @param instance the instance relevant for the bundle
|
62
|
+
/// @param bundleNftId the bundle nft id
|
63
|
+
/// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
|
64
|
+
/// @return unstakedAmount the effective unstaked amount
|
65
|
+
function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
|
61
66
|
|
62
67
|
/// @dev extend the lifetime of the bundle by the specified time in seconds
|
63
68
|
function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
|
@@ -76,10 +81,12 @@ interface IBundleService is IService {
|
|
76
81
|
/// only open bundles (active or locked) may be closed
|
77
82
|
/// to close a bundle it may not have any non-closed polices attached to it
|
78
83
|
/// may only be called by registered and unlocked pool components
|
84
|
+
/// @return balanceAmount the unstaked amount that was remaining in the bundle
|
85
|
+
/// @return feeAmount the fee amount that was remaining for the bundle
|
79
86
|
function close(
|
80
87
|
IInstance instance,
|
81
88
|
NftId bundleNftId
|
82
|
-
) external;
|
89
|
+
) external returns (Amount balanceAmount, Amount feeAmount);
|
83
90
|
|
84
91
|
/// @dev set bundle fee to provided value
|
85
92
|
/// may only be called by registered and unlocked pool components
|
@@ -17,33 +17,28 @@ import {UFixed} from "../type/UFixed.sol";
|
|
17
17
|
|
18
18
|
interface IPoolService is IService {
|
19
19
|
|
20
|
-
event
|
20
|
+
event LogPoolServiceMaxBalanceAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
|
21
21
|
event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
|
22
22
|
|
23
23
|
event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
|
24
24
|
event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
|
25
25
|
|
26
26
|
event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
|
27
|
+
event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount);
|
27
28
|
|
28
29
|
error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
|
29
30
|
error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
|
30
31
|
error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
|
31
|
-
error
|
32
|
+
error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
|
33
|
+
error ErrorPoolServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
|
34
|
+
error ErrorPoolServiceAmountIsZero();
|
32
35
|
|
33
36
|
/// @dev defines the required role for bundle owners for the calling pool
|
34
37
|
/// default implementation returns PUBLIC ROLE
|
35
38
|
function setBundleOwnerRole(RoleId bundleOwnerRole) external;
|
36
39
|
|
37
|
-
/// @dev sets the max
|
38
|
-
function
|
39
|
-
|
40
|
-
/// @dev set pool sepecific fees
|
41
|
-
function setFees(
|
42
|
-
Fee memory poolFee,
|
43
|
-
Fee memory stakingFee,
|
44
|
-
Fee memory performanceFee
|
45
|
-
) external;
|
46
|
-
|
40
|
+
/// @dev sets the max balance amount for the calling pool
|
41
|
+
function setMaxBalanceAmount(Amount maxBalanceAmount) external;
|
47
42
|
|
48
43
|
/// @dev locks required collateral to cover the specified application (and turn it into a policy)
|
49
44
|
/// - retention level == 1: the full collateral amount will be locked by the specified bundle
|
@@ -99,8 +94,7 @@ interface IPoolService is IService {
|
|
99
94
|
bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
|
100
95
|
)
|
101
96
|
external
|
102
|
-
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
103
|
-
// TODO: return netAmount
|
97
|
+
returns(NftId bundleNftId, Amount netStakedAmount); // the nft id of the newly created bundle
|
104
98
|
|
105
99
|
|
106
100
|
/// @dev closes the specified bundle
|
package/contracts/pool/Pool.sol
CHANGED
@@ -114,17 +114,13 @@ abstract contract Pool is
|
|
114
114
|
returns (IComponents.PoolInfo memory poolInfo)
|
115
115
|
{
|
116
116
|
return IComponents.PoolInfo(
|
117
|
-
NftIdLib.zero(), // will be set when GIF registers the related product
|
118
117
|
PUBLIC_ROLE(), // bundleOwnerRole
|
119
118
|
AmountLib.max(), // maxCapitalAmount,
|
120
119
|
isNftInterceptor(), // isInterceptingBundleTransfers
|
121
120
|
false, // isExternallyManaged,
|
122
121
|
false, // isVerifyingApplications,
|
123
122
|
UFixedLib.toUFixed(1), // collateralizationLevel,
|
124
|
-
UFixedLib.toUFixed(1)
|
125
|
-
FeeLib.zero(), // initialPoolFee,
|
126
|
-
FeeLib.zero(), // initialStakingFee,
|
127
|
-
FeeLib.zero() // initialPerformanceFee,
|
123
|
+
UFixedLib.toUFixed(1) // retentionLevel,
|
128
124
|
);
|
129
125
|
}
|
130
126
|
|
@@ -233,7 +229,7 @@ abstract contract Pool is
|
|
233
229
|
/// To close a bundle all all linked policies MUST be in closed state as well.
|
234
230
|
/// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
|
235
231
|
/// Once a bundle is closed this action cannot be reversed.
|
236
|
-
function
|
232
|
+
function _closeBundle(NftId bundleNftId)
|
237
233
|
internal
|
238
234
|
virtual
|
239
235
|
{
|
@@ -255,13 +251,13 @@ abstract contract Pool is
|
|
255
251
|
}
|
256
252
|
|
257
253
|
|
258
|
-
/// @dev Sets the maximum
|
254
|
+
/// @dev Sets the maximum balance amound held by this pool.
|
259
255
|
/// Function may only be called by pool owner.
|
260
|
-
function
|
256
|
+
function _setMaxBalanceAmount(Amount maxBalanceAmount)
|
261
257
|
internal
|
262
258
|
virtual
|
263
259
|
{
|
264
|
-
_getPoolStorage()._poolService.
|
260
|
+
_getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
|
265
261
|
}
|
266
262
|
|
267
263
|
/// @dev Sets the required role to create/own bundles.
|
@@ -300,9 +296,9 @@ abstract contract Pool is
|
|
300
296
|
bytes memory filter
|
301
297
|
)
|
302
298
|
internal
|
303
|
-
returns(NftId bundleNftId)
|
299
|
+
returns(NftId bundleNftId, Amount netStakedAmount)
|
304
300
|
{
|
305
|
-
bundleNftId = _getPoolStorage()._poolService.createBundle(
|
301
|
+
(bundleNftId, netStakedAmount) = _getPoolStorage()._poolService.createBundle(
|
306
302
|
bundleOwner,
|
307
303
|
fee,
|
308
304
|
amount,
|
@@ -1,6 +1,8 @@
|
|
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";
|
5
7
|
import {IBundleService} from "./IBundleService.sol";
|
6
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
@@ -15,7 +17,7 @@ import {IStaking} from "../staking/IStaking.sol";
|
|
15
17
|
|
16
18
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
17
19
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
18
|
-
import {NftId
|
20
|
+
import {NftId} from "../type/NftId.sol";
|
19
21
|
import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
|
20
22
|
import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
|
21
23
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
@@ -66,24 +68,20 @@ contract PoolService is
|
|
66
68
|
registerInterface(type(IPoolService).interfaceId);
|
67
69
|
}
|
68
70
|
|
69
|
-
|
70
|
-
function
|
71
|
+
/// @inheritdoc IPoolService
|
72
|
+
function setMaxBalanceAmount(Amount maxBalanceAmount)
|
71
73
|
external
|
72
74
|
virtual
|
73
75
|
{
|
74
|
-
/*
|
75
76
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
76
77
|
InstanceReader instanceReader = instance.getInstanceReader();
|
78
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
|
81
|
-
|
82
|
-
poolInfo.maxCapitalAmount = maxCapitalAmount;
|
80
|
+
Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
|
81
|
+
poolInfo.maxBalanceAmount = maxBalanceAmount;
|
83
82
|
instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
|
84
83
|
|
85
|
-
emit
|
86
|
-
*/
|
84
|
+
emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
|
87
85
|
}
|
88
86
|
|
89
87
|
function setBundleOwnerRole(RoleId bundleOwnerRole)
|
@@ -107,27 +105,6 @@ contract PoolService is
|
|
107
105
|
emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
|
108
106
|
}
|
109
107
|
|
110
|
-
|
111
|
-
function setFees(
|
112
|
-
Fee memory poolFee,
|
113
|
-
Fee memory stakingFee,
|
114
|
-
Fee memory performanceFee
|
115
|
-
)
|
116
|
-
external
|
117
|
-
virtual
|
118
|
-
{
|
119
|
-
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
120
|
-
|
121
|
-
IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
|
122
|
-
poolInfo.poolFee = poolFee;
|
123
|
-
poolInfo.stakingFee = stakingFee;
|
124
|
-
poolInfo.performanceFee = performanceFee;
|
125
|
-
|
126
|
-
instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
|
127
|
-
|
128
|
-
// TODO add logging
|
129
|
-
}
|
130
|
-
|
131
108
|
/// @inheritdoc IPoolService
|
132
109
|
function createBundle(
|
133
110
|
address bundleOwner, // initial bundle owner
|
@@ -138,26 +115,32 @@ contract PoolService is
|
|
138
115
|
)
|
139
116
|
external
|
140
117
|
virtual
|
141
|
-
returns(NftId bundleNftId)
|
118
|
+
returns(NftId bundleNftId, Amount netStakedAmount)
|
142
119
|
{
|
143
120
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
144
|
-
InstanceReader instanceReader = instance.getInstanceReader();
|
145
121
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
122
|
+
{
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
124
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
125
|
+
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
|
126
|
+
if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
|
127
|
+
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
Amount stakingFeeAmount;
|
133
|
+
(stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
|
134
|
+
_getStakingFee(instance.getInstanceReader(), poolNftId),
|
151
135
|
stakingAmount);
|
152
136
|
|
153
|
-
// TODO: staking amount must be be > maxCapitalAmount
|
154
137
|
|
155
138
|
bundleNftId = _bundleService.create(
|
156
139
|
instance,
|
157
140
|
poolNftId,
|
158
141
|
bundleOwner,
|
159
142
|
fee,
|
160
|
-
|
143
|
+
netStakedAmount,
|
161
144
|
lifetime,
|
162
145
|
filter);
|
163
146
|
|
@@ -165,12 +148,12 @@ contract PoolService is
|
|
165
148
|
_componentService.increasePoolBalance(
|
166
149
|
instance.getInstanceStore(),
|
167
150
|
poolNftId,
|
168
|
-
|
151
|
+
netStakedAmount,
|
169
152
|
stakingFeeAmount);
|
170
153
|
|
171
154
|
// pool bookkeeping and collect tokens from bundle owner
|
172
155
|
_collectStakingAmount(
|
173
|
-
|
156
|
+
instance.getInstanceReader(),
|
174
157
|
poolNftId,
|
175
158
|
bundleOwner,
|
176
159
|
stakingAmount);
|
@@ -184,8 +167,8 @@ contract PoolService is
|
|
184
167
|
view
|
185
168
|
returns (Fee memory stakingFee)
|
186
169
|
{
|
187
|
-
NftId productNftId = instanceReader.
|
188
|
-
return instanceReader.
|
170
|
+
NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
|
171
|
+
return instanceReader.getProductInfo(productNftId).stakingFee;
|
189
172
|
}
|
190
173
|
|
191
174
|
function closeBundle(NftId bundleNftId)
|
@@ -194,21 +177,47 @@ contract PoolService is
|
|
194
177
|
{
|
195
178
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
196
179
|
|
197
|
-
// TODO
|
180
|
+
// TODO get performance fee for pool (#477)
|
198
181
|
|
199
182
|
// releasing collateral in bundle
|
200
|
-
_bundleService.close(instance, bundleNftId);
|
201
|
-
|
202
|
-
// TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
|
183
|
+
(Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
|
203
184
|
|
185
|
+
_componentService.decreasePoolBalance(
|
186
|
+
instance.getInstanceStore(),
|
187
|
+
poolNftId,
|
188
|
+
unstakedAmount + feeAmount,
|
189
|
+
AmountLib.zero());
|
190
|
+
|
204
191
|
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
|
192
|
+
|
193
|
+
if ((unstakedAmount + feeAmount).gtz()){
|
194
|
+
IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
|
195
|
+
TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
|
196
|
+
IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
|
197
|
+
|
198
|
+
// TODO: centralize token handling (issue #471)
|
199
|
+
|
200
|
+
// check allowance
|
201
|
+
uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
|
202
|
+
if (tokenAllowance < (unstakedAmount.toInt() + feeAmount.toInt())) {
|
203
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(
|
204
|
+
poolComponentInfo.wallet,
|
205
|
+
address(tokenHandler),
|
206
|
+
tokenAllowance,
|
207
|
+
unstakedAmount.toInt() + feeAmount.toInt());
|
208
|
+
}
|
209
|
+
|
210
|
+
// transfer amount to bundle owner
|
211
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
212
|
+
tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, unstakedAmount + feeAmount);
|
213
|
+
}
|
205
214
|
}
|
206
215
|
|
207
216
|
/// @inheritdoc IPoolService
|
208
217
|
function stake(NftId bundleNftId, Amount amount)
|
209
218
|
external
|
210
219
|
virtual
|
211
|
-
restricted()
|
220
|
+
// TODO: restricted() (once #462 is done)
|
212
221
|
returns(Amount netAmount)
|
213
222
|
{
|
214
223
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
@@ -220,15 +229,18 @@ contract PoolService is
|
|
220
229
|
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
|
221
230
|
}
|
222
231
|
|
223
|
-
|
224
|
-
|
225
|
-
|
232
|
+
{
|
233
|
+
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
|
234
|
+
if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
|
235
|
+
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
|
236
|
+
}
|
226
237
|
}
|
227
238
|
|
228
239
|
// calculate fees
|
240
|
+
Amount feeAmount;
|
229
241
|
(
|
230
|
-
|
231
|
-
|
242
|
+
feeAmount,
|
243
|
+
netAmount
|
232
244
|
) = FeeLib.calculateFee(
|
233
245
|
_getStakingFee(instanceReader, poolNftId),
|
234
246
|
amount);
|
@@ -244,69 +256,67 @@ contract PoolService is
|
|
244
256
|
|
245
257
|
// collect tokens from bundle owner
|
246
258
|
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
259
|
+
emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
|
247
260
|
_collectStakingAmount(
|
248
261
|
instanceReader,
|
249
262
|
poolNftId,
|
250
263
|
bundleOwner,
|
251
264
|
amount);
|
252
|
-
|
253
|
-
emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
|
254
265
|
}
|
255
266
|
|
256
267
|
/// @inheritdoc IPoolService
|
257
268
|
function unstake(NftId bundleNftId, Amount amount)
|
258
269
|
external
|
259
270
|
virtual
|
260
|
-
restricted()
|
271
|
+
// TODO: restricted() (once #462 is done)
|
261
272
|
returns(Amount netAmount)
|
262
273
|
{
|
263
274
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
264
275
|
InstanceReader instanceReader = instance.getInstanceReader();
|
265
276
|
InstanceStore instanceStore = instance.getInstanceStore();
|
266
277
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
267
|
-
|
278
|
+
|
268
279
|
if (bundleInfo.poolNftId != poolNftId) {
|
269
280
|
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
|
270
281
|
}
|
271
282
|
|
283
|
+
if (amount.eqz()) {
|
284
|
+
revert ErrorPoolServiceAmountIsZero();
|
285
|
+
}
|
286
|
+
|
272
287
|
// call bundle service for bookkeeping and additional checks
|
273
|
-
_bundleService.unstake(instance, bundleNftId, amount);
|
288
|
+
Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
|
274
289
|
|
275
|
-
//
|
276
|
-
//
|
277
|
-
|
278
|
-
|
279
|
-
Amount netAmount
|
280
|
-
) = FeeLib.calculateFee(
|
281
|
-
_getPerformanceFee(instanceReader, poolNftId),
|
282
|
-
amount);
|
290
|
+
// Important: from now on work only with unstakedAmount as it is the only reliable amount.
|
291
|
+
// if amount was max, this was set to the available amount
|
292
|
+
|
293
|
+
// TODO: handle performance fees (issue #477)
|
283
294
|
|
284
295
|
// update pool bookkeeping - performance fees stay in the pool, but as fees
|
285
296
|
_componentService.decreasePoolBalance(
|
286
297
|
instanceStore,
|
287
298
|
poolNftId,
|
288
|
-
|
299
|
+
unstakedAmount,
|
289
300
|
AmountLib.zero());
|
290
301
|
|
291
|
-
|
292
|
-
|
293
|
-
poolNftId,
|
294
|
-
AmountLib.zero(),
|
295
|
-
performanceFeeAmount);
|
296
|
-
|
297
|
-
// TODO: transfer net amount to bundle owner (allowance)
|
302
|
+
IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
|
303
|
+
address poolWallet = poolComponentInfo.wallet;
|
298
304
|
|
299
|
-
//
|
300
|
-
|
305
|
+
// check allowance
|
306
|
+
{
|
307
|
+
IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
|
308
|
+
uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
|
309
|
+
if (tokenAllowance < unstakedAmount.toInt()) {
|
310
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
|
311
|
+
}
|
312
|
+
}
|
301
313
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
|
309
|
-
return instanceReader.getPoolInfo(productNftId).performanceFee;
|
314
|
+
// transfer amount to bundle owner
|
315
|
+
address owner = getRegistry().ownerOf(bundleNftId);
|
316
|
+
emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
|
317
|
+
// TODO: centralize token handling (issue #471)
|
318
|
+
poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
|
319
|
+
return unstakedAmount;
|
310
320
|
}
|
311
321
|
|
312
322
|
function processSale(
|
@@ -528,11 +538,18 @@ contract PoolService is
|
|
528
538
|
address poolWallet = componentInfo.wallet;
|
529
539
|
|
530
540
|
if(amount.gtz()) {
|
541
|
+
uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
|
542
|
+
if (allowance < amount.toInt()) {
|
543
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
|
544
|
+
}
|
545
|
+
|
531
546
|
// TODO: centralize token handling (issue #471)
|
532
547
|
tokenHandler.transfer(
|
533
548
|
bundleOwner,
|
534
549
|
poolWallet,
|
535
550
|
amount);
|
551
|
+
} else {
|
552
|
+
revert ErrorPoolServiceAmountIsZero();
|
536
553
|
}
|
537
554
|
}
|
538
555
|
|