@etherisc/gif-next 0.0.2-cbce707-667 → 0.0.2-cbfb727-329
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 +71 -14
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +454 -554
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +314 -178
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +452 -3054
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +612 -181
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -256
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +452 -364
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +285 -121
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → base/Cloneable.sol/Cloneable.json} +91 -2
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → pool/IBundleService.sol/IBundleService.json} +338 -354
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +231 -204
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +651 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +237 -288
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IDistributionService.sol/IDistributionService.json → product/IProductService.sol/IProductService.json} +162 -166
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +227 -224
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +231 -226
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +245 -334
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +228 -315
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +283 -151
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +132 -57
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/shared/{RegisterableUpgradable.sol/RegisterableUpgradable.json → ComponentService.sol/ComponentService.json} +311 -122
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +636 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +285 -65
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → staking/IStakingService.sol/IStakingService.json} +224 -187
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
- package/contracts/distribution/Distribution.sol +285 -0
- package/contracts/distribution/DistributionService.sol +348 -0
- package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +15 -17
- package/contracts/distribution/IDistributionComponent.sol +71 -0
- package/contracts/distribution/IDistributionService.sol +87 -0
- package/contracts/instance/BundleManager.sol +126 -0
- package/contracts/instance/IInstance.sol +62 -24
- package/contracts/instance/IInstanceService.sol +56 -13
- package/contracts/instance/Instance.sol +151 -365
- package/contracts/instance/InstanceAccessManager.sol +431 -178
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +109 -47
- package/contracts/instance/InstanceService.sol +250 -124
- package/contracts/instance/InstanceServiceManager.sol +11 -13
- package/contracts/instance/InstanceStore.sol +211 -0
- package/contracts/instance/base/Cloneable.sol +51 -0
- package/contracts/instance/base/IKeyValueStore.sol +5 -5
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +22 -42
- package/contracts/instance/base/Lifecycle.sol +27 -7
- package/contracts/instance/base/ObjectManager.sol +82 -0
- package/contracts/instance/module/IAccess.sol +37 -21
- package/contracts/instance/module/IBundle.sol +11 -8
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +7 -4
- package/contracts/instance/module/IPolicy.sol +47 -15
- package/contracts/instance/module/IRisk.sol +1 -1
- package/contracts/instance/module/ISetup.sol +11 -22
- package/contracts/instance/module/ITreasury.sol +2 -2
- package/contracts/pool/BundleService.sol +382 -0
- package/contracts/pool/BundleServiceManager.sol +51 -0
- package/contracts/pool/IBundleService.sol +118 -0
- package/contracts/pool/IPoolComponent.sol +114 -0
- package/contracts/pool/IPoolService.sol +114 -0
- package/contracts/pool/Pool.sol +302 -0
- package/contracts/pool/PoolService.sol +403 -0
- package/contracts/{instance/service → pool}/PoolServiceManager.sol +15 -17
- package/contracts/product/ApplicationService.sol +186 -0
- package/contracts/product/ApplicationServiceManager.sol +35 -0
- package/contracts/product/ClaimService.sol +437 -0
- package/contracts/product/ClaimServiceManager.sol +35 -0
- package/contracts/product/IApplicationService.sol +62 -0
- package/contracts/product/IClaimService.sol +90 -0
- package/contracts/product/IPolicyService.sol +80 -0
- package/contracts/product/IPricingService.sol +37 -0
- package/contracts/product/IProductComponent.sol +41 -0
- package/contracts/product/IProductService.sol +40 -0
- package/contracts/product/PolicyService.sol +376 -0
- package/contracts/product/PolicyServiceManager.sol +54 -0
- package/contracts/product/PricingService.sol +275 -0
- package/contracts/product/PricingServiceManager.sol +51 -0
- package/contracts/product/Product.sol +375 -0
- package/contracts/product/ProductService.sol +210 -0
- package/contracts/product/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +9 -1
- package/contracts/registry/IRegistry.sol +43 -36
- package/contracts/registry/IRegistryService.sol +49 -16
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +234 -256
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +126 -240
- package/contracts/registry/RegistryServiceManager.sol +21 -41
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +22 -17
- package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/shared/Component.sol +271 -0
- package/contracts/shared/ComponentService.sol +150 -0
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/IComponent.sol +90 -0
- package/contracts/shared/INftOwnable.sol +12 -11
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +7 -4
- package/contracts/shared/IVersionable.sol +5 -48
- package/contracts/shared/NftOwnable.sol +65 -83
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +26 -41
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +42 -24
- package/contracts/shared/TokenHandler.sol +14 -6
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/staking/IStakingService.sol +102 -0
- package/contracts/staking/StakeingServiceManager.sol +37 -0
- package/contracts/staking/StakingService.sol +166 -0
- package/contracts/type/Amount.sol +109 -0
- package/contracts/{types → type}/Blocknumber.sol +1 -0
- package/contracts/type/ClaimId.sol +75 -0
- package/contracts/{types → type}/DistributorType.sol +2 -2
- package/contracts/{types → type}/Fee.sol +17 -8
- package/contracts/{types → type}/NftId.sol +8 -0
- package/contracts/type/NftIdSet.sol +62 -0
- package/contracts/{types → type}/ObjectType.sol +16 -7
- package/contracts/type/PayoutId.sol +82 -0
- package/contracts/{types → type}/Referral.sol +4 -0
- package/contracts/{types → type}/RoleId.sol +26 -18
- package/contracts/type/Seconds.sol +54 -0
- package/contracts/{types → type}/StateId.sol +7 -2
- package/contracts/{types → type}/Timestamp.sol +18 -13
- package/contracts/{types → type}/UFixed.sol +1 -0
- package/contracts/{types → type}/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -670
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -204
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -249
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
- package/artifacts/contracts/components/Pool.sol/Pool.json +0 -873
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
- package/artifacts/contracts/components/Product.sol/Product.json +0 -775
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -657
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -436
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -796
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -448
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
- package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
- package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -91
- package/contracts/components/Distribution.sol +0 -166
- package/contracts/components/IBaseComponent.sol +0 -25
- package/contracts/components/IDistributionComponent.sol +0 -46
- package/contracts/components/IPoolComponent.sol +0 -62
- package/contracts/components/IProductComponent.sol +0 -35
- package/contracts/components/Pool.sol +0 -247
- package/contracts/components/Product.sol +0 -297
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -41
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/DistributionService.sol +0 -105
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/instance/service/IDistributionService.sol +0 -12
- package/contracts/instance/service/IPoolService.sol +0 -37
- package/contracts/instance/service/IProductService.sol +0 -107
- package/contracts/instance/service/PoolService.sol +0 -211
- package/contracts/shared/ContractDeployerLib.sol +0 -72
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
- package/contracts/test/TestFee.sol +0 -25
- package/contracts/test/TestRegisterable.sol +0 -18
- package/contracts/test/TestRoleId.sol +0 -14
- package/contracts/test/TestService.sol +0 -24
- package/contracts/test/TestToken.sol +0 -26
- package/contracts/test/TestVersion.sol +0 -44
- package/contracts/test/TestVersionable.sol +0 -17
- package/contracts/test/Usdc.sol +0 -26
- package/contracts/types/ChainId.sol +0 -38
- package/contracts/types/NftIdSet.sol +0 -60
- package/contracts/types/NumberId.sol +0 -52
- /package/contracts/{types → type}/AddressSet.sol +0 -0
- /package/contracts/{types → type}/Key32.sol +0 -0
- /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -0,0 +1,302 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
5
|
+
import {Component} from "../shared/Component.sol";
|
6
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
7
|
+
import {IBundleService} from "./IBundleService.sol";
|
8
|
+
import {IPoolComponent} from "./IPoolComponent.sol";
|
9
|
+
import {IPoolService} from "./IPoolService.sol";
|
10
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
11
|
+
import {NftId, NftIdLib} from "../type/NftId.sol";
|
12
|
+
import {BUNDLE, POOL} from "../type/ObjectType.sol";
|
13
|
+
import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
|
14
|
+
import {Seconds} from "../type/Seconds.sol";
|
15
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
16
|
+
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
17
|
+
|
18
|
+
abstract contract Pool is
|
19
|
+
Component,
|
20
|
+
IPoolComponent
|
21
|
+
{
|
22
|
+
// keccak256(abi.encode(uint256(keccak256("etherisc.storage.Pool")) - 1)) & ~bytes32(uint256(0xff));
|
23
|
+
bytes32 public constant POOL_STORAGE_LOCATION_V1 = 0x25e3e51823fbfffb988e0a2744bb93722d9f3e906c07cc0a9e77884c46c58300;
|
24
|
+
|
25
|
+
struct PoolStorage {
|
26
|
+
IPoolService _poolService;
|
27
|
+
IBundleService _bundleService;
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
modifier onlyBundleOwner(NftId bundleNftId) {
|
32
|
+
if(msg.sender != getRegistry().ownerOf(bundleNftId)) {
|
33
|
+
revert ErrorPoolNotBundleOwner(bundleNftId, msg.sender);
|
34
|
+
}
|
35
|
+
_;
|
36
|
+
}
|
37
|
+
|
38
|
+
|
39
|
+
modifier onlyPoolService() {
|
40
|
+
if(msg.sender != address(_getPoolStorage()._poolService)) {
|
41
|
+
revert ErrorPoolNotPoolService(msg.sender);
|
42
|
+
}
|
43
|
+
_;
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
function initializePool(
|
48
|
+
address registry,
|
49
|
+
NftId instanceNftId,
|
50
|
+
string memory name,
|
51
|
+
address token,
|
52
|
+
bool isInterceptingNftTransfers,
|
53
|
+
address initialOwner,
|
54
|
+
bytes memory registryData // writeonly data that will saved in the object info record of the registry
|
55
|
+
)
|
56
|
+
public
|
57
|
+
virtual
|
58
|
+
onlyInitializing()
|
59
|
+
{
|
60
|
+
initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, registryData);
|
61
|
+
|
62
|
+
PoolStorage storage $ = _getPoolStorage();
|
63
|
+
$._poolService = IPoolService(_getServiceAddress(POOL()));
|
64
|
+
$._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
|
65
|
+
|
66
|
+
registerInterface(type(IPoolComponent).interfaceId);
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
function stake(
|
71
|
+
NftId bundleNftId,
|
72
|
+
Amount amount
|
73
|
+
)
|
74
|
+
public
|
75
|
+
virtual
|
76
|
+
restricted()
|
77
|
+
onlyBundleOwner(bundleNftId)
|
78
|
+
{
|
79
|
+
// TODO add implementation
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
function unstake(
|
84
|
+
NftId bundleNftId,
|
85
|
+
Amount amount
|
86
|
+
)
|
87
|
+
public
|
88
|
+
virtual
|
89
|
+
restricted()
|
90
|
+
onlyBundleOwner(bundleNftId)
|
91
|
+
{
|
92
|
+
// TODO add implementation
|
93
|
+
}
|
94
|
+
|
95
|
+
|
96
|
+
function extend(
|
97
|
+
NftId bundleNftId,
|
98
|
+
Seconds lifetimeExtension
|
99
|
+
)
|
100
|
+
public
|
101
|
+
virtual
|
102
|
+
restricted()
|
103
|
+
onlyBundleOwner(bundleNftId)
|
104
|
+
{
|
105
|
+
// TODO add implementation
|
106
|
+
}
|
107
|
+
|
108
|
+
|
109
|
+
function lockBundle(NftId bundleNftId)
|
110
|
+
public
|
111
|
+
virtual
|
112
|
+
//restricted() // TODO consider adding this back
|
113
|
+
onlyBundleOwner(bundleNftId)
|
114
|
+
{
|
115
|
+
_getPoolStorage()._bundleService.lock(bundleNftId);
|
116
|
+
}
|
117
|
+
|
118
|
+
|
119
|
+
function unlockBundle(NftId bundleNftId)
|
120
|
+
public
|
121
|
+
virtual
|
122
|
+
//restricted()
|
123
|
+
onlyBundleOwner(bundleNftId)
|
124
|
+
{
|
125
|
+
_getPoolStorage()._bundleService.unlock(bundleNftId);
|
126
|
+
}
|
127
|
+
|
128
|
+
|
129
|
+
function close(NftId bundleNftId)
|
130
|
+
public
|
131
|
+
virtual
|
132
|
+
//restricted()
|
133
|
+
onlyBundleOwner(bundleNftId)
|
134
|
+
{
|
135
|
+
_getPoolStorage()._poolService.closeBundle(bundleNftId);
|
136
|
+
}
|
137
|
+
|
138
|
+
|
139
|
+
function setBundleFee(
|
140
|
+
NftId bundleNftId,
|
141
|
+
Fee memory fee
|
142
|
+
)
|
143
|
+
public
|
144
|
+
virtual
|
145
|
+
restricted()
|
146
|
+
onlyBundleOwner(bundleNftId)
|
147
|
+
{
|
148
|
+
_getPoolStorage()._bundleService.setFee(bundleNftId, fee);
|
149
|
+
}
|
150
|
+
|
151
|
+
|
152
|
+
function setMaxCapitalAmount(Amount maxCapitalAmount)
|
153
|
+
public
|
154
|
+
virtual
|
155
|
+
restricted()
|
156
|
+
onlyOwner()
|
157
|
+
{
|
158
|
+
_getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
function setBundleOwnerRole(RoleId bundleOwnerRole)
|
163
|
+
public
|
164
|
+
virtual
|
165
|
+
restricted()
|
166
|
+
onlyOwner()
|
167
|
+
{
|
168
|
+
_getPoolStorage()._poolService.setBundleOwnerRole(bundleOwnerRole);
|
169
|
+
}
|
170
|
+
|
171
|
+
|
172
|
+
function setFees(
|
173
|
+
Fee memory poolFee,
|
174
|
+
Fee memory stakingFee,
|
175
|
+
Fee memory performanceFee
|
176
|
+
)
|
177
|
+
public
|
178
|
+
virtual
|
179
|
+
restricted()
|
180
|
+
onlyOwner()
|
181
|
+
{
|
182
|
+
_getPoolStorage()._poolService.setFees(poolFee, stakingFee, performanceFee);
|
183
|
+
}
|
184
|
+
|
185
|
+
|
186
|
+
/// @dev see {IPool.verifyApplication}
|
187
|
+
function verifyApplication(
|
188
|
+
NftId applicationNftId,
|
189
|
+
bytes memory applicationData,
|
190
|
+
NftId bundleNftId,
|
191
|
+
bytes memory bundleFilter,
|
192
|
+
Amount collateralizationAmount
|
193
|
+
)
|
194
|
+
public
|
195
|
+
virtual
|
196
|
+
restricted()
|
197
|
+
{
|
198
|
+
if(!applicationMatchesBundle(
|
199
|
+
applicationNftId,
|
200
|
+
applicationData,
|
201
|
+
bundleNftId,
|
202
|
+
bundleFilter,
|
203
|
+
collateralizationAmount)
|
204
|
+
)
|
205
|
+
{
|
206
|
+
revert ErrorPoolApplicationBundleMismatch(applicationNftId);
|
207
|
+
}
|
208
|
+
|
209
|
+
emit LogPoolVerifiedByPool(address(this), applicationNftId, collateralizationAmount);
|
210
|
+
}
|
211
|
+
|
212
|
+
|
213
|
+
/// @dev see {IPoolComponent.applicationMatchesBundle}
|
214
|
+
/// Override this function to implement any custom application verification
|
215
|
+
/// Default implementation always returns true
|
216
|
+
function applicationMatchesBundle(
|
217
|
+
NftId applicationNftId,
|
218
|
+
bytes memory applicationData,
|
219
|
+
NftId bundleNftId,
|
220
|
+
bytes memory bundleFilter,
|
221
|
+
Amount collateralizationAmount
|
222
|
+
)
|
223
|
+
public
|
224
|
+
view
|
225
|
+
virtual override
|
226
|
+
returns (bool isMatching)
|
227
|
+
{
|
228
|
+
return true;
|
229
|
+
}
|
230
|
+
|
231
|
+
|
232
|
+
function getPoolInfo() external view returns (IComponents.PoolInfo memory poolInfo) {
|
233
|
+
poolInfo = abi.decode(getComponentInfo().data, (IComponents.PoolInfo));
|
234
|
+
}
|
235
|
+
|
236
|
+
// Internals
|
237
|
+
|
238
|
+
function _createBundle(
|
239
|
+
address bundleOwner,
|
240
|
+
Fee memory fee,
|
241
|
+
Amount amount,
|
242
|
+
Seconds lifetime,
|
243
|
+
bytes memory filter
|
244
|
+
)
|
245
|
+
internal
|
246
|
+
returns(NftId bundleNftId)
|
247
|
+
{
|
248
|
+
bundleNftId = _getPoolStorage()._poolService.createBundle(
|
249
|
+
bundleOwner,
|
250
|
+
fee,
|
251
|
+
amount,
|
252
|
+
lifetime,
|
253
|
+
filter);
|
254
|
+
|
255
|
+
// TODO add logging
|
256
|
+
}
|
257
|
+
|
258
|
+
// TODO remove function once this is no longer used to produce contract locations on the fly ...
|
259
|
+
function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
|
260
|
+
return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
|
261
|
+
}
|
262
|
+
|
263
|
+
/// @dev defines initial pool specification
|
264
|
+
/// overwrite this function according to your use case
|
265
|
+
function _getInitialInfo()
|
266
|
+
internal
|
267
|
+
view
|
268
|
+
virtual override
|
269
|
+
returns (IComponents.ComponentInfo memory info)
|
270
|
+
{
|
271
|
+
return IComponents.ComponentInfo(
|
272
|
+
getName(),
|
273
|
+
getToken(),
|
274
|
+
TokenHandler(address(0)), // will be created by GIF service during registration
|
275
|
+
address(this), // contract is its own wallet
|
276
|
+
AmountLib.zero(), // balance amount
|
277
|
+
AmountLib.zero(), // fee amount
|
278
|
+
abi.encode(
|
279
|
+
IComponents.PoolInfo(
|
280
|
+
NftIdLib.zero(), // will be set when GIF registers the related product
|
281
|
+
PUBLIC_ROLE(), // bundleOwnerRole
|
282
|
+
AmountLib.max(), // maxCapitalAmount,
|
283
|
+
AmountLib.zero(), // initial balance amount
|
284
|
+
AmountLib.zero(), // initial fee amount
|
285
|
+
isNftInterceptor(), // isInterceptingBundleTransfers
|
286
|
+
false, // isExternallyManaged,
|
287
|
+
false, // isVerifyingApplications,
|
288
|
+
UFixedLib.toUFixed(1), // collateralizationLevel,
|
289
|
+
UFixedLib.toUFixed(1), // retentionLevel,
|
290
|
+
FeeLib.zeroFee(), // initialPoolFee,
|
291
|
+
FeeLib.zeroFee(), // initialStakingFee,
|
292
|
+
FeeLib.zeroFee() // initialPerformanceFee,
|
293
|
+
)));
|
294
|
+
}
|
295
|
+
|
296
|
+
|
297
|
+
function _getPoolStorage() private pure returns (PoolStorage storage $) {
|
298
|
+
assembly {
|
299
|
+
$.slot := POOL_STORAGE_LOCATION_V1
|
300
|
+
}
|
301
|
+
}
|
302
|
+
}
|
@@ -0,0 +1,403 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Pool} from "./Pool.sol";
|
5
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
6
|
+
import {IInstance} from "../instance/IInstance.sol";
|
7
|
+
import {IBundle} from "../instance/module/IBundle.sol";
|
8
|
+
import {TokenHandler} from "../instance/module/ITreasury.sol";
|
9
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
10
|
+
import {IPolicy} from "../instance/module/IPolicy.sol";
|
11
|
+
|
12
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
13
|
+
import {Versionable} from "../shared/Versionable.sol";
|
14
|
+
import {INftOwnable} from "../shared/INftOwnable.sol";
|
15
|
+
|
16
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
17
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
18
|
+
import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
|
19
|
+
import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
|
20
|
+
import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
|
21
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
22
|
+
import {Version, VersionLib} from "../type/Version.sol";
|
23
|
+
import {KEEP_STATE, StateId} from "../type/StateId.sol";
|
24
|
+
import {Seconds} from "../type/Seconds.sol";
|
25
|
+
import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
26
|
+
import {Version, VersionLib} from "../type/Version.sol";
|
27
|
+
|
28
|
+
import {IService} from "../shared/IService.sol";
|
29
|
+
import {Service} from "../shared/Service.sol";
|
30
|
+
import {BundleManager} from "../instance/BundleManager.sol";
|
31
|
+
import {ComponentService} from "../shared/ComponentService.sol";
|
32
|
+
import {IBundleService} from "./IBundleService.sol";
|
33
|
+
import {IPoolService} from "./IPoolService.sol";
|
34
|
+
import {IRegistryService} from "../registry/IRegistryService.sol";
|
35
|
+
import {InstanceService} from "../instance/InstanceService.sol";
|
36
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
37
|
+
import {IComponent} from "../shared/IComponent.sol";
|
38
|
+
import {IPoolComponent} from "./IPoolComponent.sol";
|
39
|
+
|
40
|
+
string constant POOL_SERVICE_NAME = "PoolService";
|
41
|
+
|
42
|
+
contract PoolService is
|
43
|
+
ComponentService,
|
44
|
+
IPoolService
|
45
|
+
{
|
46
|
+
using NftIdLib for NftId;
|
47
|
+
using AmountLib for Amount;
|
48
|
+
|
49
|
+
IBundleService internal _bundleService;
|
50
|
+
|
51
|
+
function _initialize(
|
52
|
+
address owner,
|
53
|
+
bytes memory data
|
54
|
+
)
|
55
|
+
internal
|
56
|
+
initializer
|
57
|
+
virtual override
|
58
|
+
{
|
59
|
+
address registryAddress;
|
60
|
+
address initialOwner;
|
61
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
62
|
+
// TODO while PoolService is not deployed in PoolServiceManager constructor
|
63
|
+
// owner is PoolServiceManager deployer
|
64
|
+
initializeService(registryAddress, address(0), owner);
|
65
|
+
|
66
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
|
67
|
+
|
68
|
+
registerInterface(type(IPoolService).interfaceId);
|
69
|
+
}
|
70
|
+
|
71
|
+
function getDomain() public pure override returns(ObjectType) {
|
72
|
+
return POOL();
|
73
|
+
}
|
74
|
+
|
75
|
+
function register(address poolAddress)
|
76
|
+
external
|
77
|
+
returns(NftId poolNftId)
|
78
|
+
{
|
79
|
+
(
|
80
|
+
IComponent component,
|
81
|
+
address owner,
|
82
|
+
IInstance instance,
|
83
|
+
NftId instanceNftId
|
84
|
+
) = _checkComponentForRegistration(
|
85
|
+
poolAddress,
|
86
|
+
POOL(),
|
87
|
+
POOL_OWNER_ROLE());
|
88
|
+
|
89
|
+
IPoolComponent pool = IPoolComponent(poolAddress);
|
90
|
+
IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
|
91
|
+
pool.linkToRegisteredNftId();
|
92
|
+
poolNftId = registryInfo.nftId;
|
93
|
+
|
94
|
+
// amend component info with pool specific token handler
|
95
|
+
IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
|
96
|
+
componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
|
97
|
+
|
98
|
+
// save amended component info with instance
|
99
|
+
instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
|
100
|
+
|
101
|
+
bytes4[][] memory selectors = new bytes4[][](2);
|
102
|
+
selectors[0] = new bytes4[](1);
|
103
|
+
selectors[1] = new bytes4[](1);
|
104
|
+
|
105
|
+
selectors[0][0] = IPoolComponent.setFees.selector;
|
106
|
+
selectors[1][0] = IPoolComponent.verifyApplication.selector;
|
107
|
+
|
108
|
+
RoleId[] memory roles = new RoleId[](2);
|
109
|
+
roles[0] = POOL_OWNER_ROLE();
|
110
|
+
roles[1] = POLICY_SERVICE_ROLE();
|
111
|
+
|
112
|
+
getInstanceService().createGifTarget(
|
113
|
+
instanceNftId,
|
114
|
+
poolAddress,
|
115
|
+
pool.getName(),
|
116
|
+
selectors,
|
117
|
+
roles);
|
118
|
+
}
|
119
|
+
|
120
|
+
|
121
|
+
function setMaxCapitalAmount(Amount maxCapitalAmount)
|
122
|
+
external
|
123
|
+
virtual
|
124
|
+
{
|
125
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
126
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
127
|
+
|
128
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
129
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
130
|
+
Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
|
131
|
+
|
132
|
+
poolInfo.maxCapitalAmount = maxCapitalAmount;
|
133
|
+
componentInfo.data = abi.encode(poolInfo);
|
134
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
135
|
+
|
136
|
+
emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
|
137
|
+
}
|
138
|
+
|
139
|
+
function setBundleOwnerRole(RoleId bundleOwnerRole)
|
140
|
+
external
|
141
|
+
virtual
|
142
|
+
{
|
143
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
144
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
145
|
+
|
146
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
147
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
148
|
+
|
149
|
+
// bundle owner role may only be set once per pool
|
150
|
+
if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
|
151
|
+
revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
|
152
|
+
}
|
153
|
+
|
154
|
+
poolInfo.bundleOwnerRole = bundleOwnerRole;
|
155
|
+
componentInfo.data = abi.encode(poolInfo);
|
156
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
157
|
+
|
158
|
+
emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
function setFees(
|
163
|
+
Fee memory poolFee,
|
164
|
+
Fee memory stakingFee,
|
165
|
+
Fee memory performanceFee
|
166
|
+
)
|
167
|
+
external
|
168
|
+
virtual
|
169
|
+
{
|
170
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
171
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
172
|
+
|
173
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
174
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
175
|
+
|
176
|
+
poolInfo.poolFee = poolFee;
|
177
|
+
poolInfo.stakingFee = stakingFee;
|
178
|
+
poolInfo.performanceFee = performanceFee;
|
179
|
+
componentInfo.data = abi.encode(poolInfo);
|
180
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
181
|
+
|
182
|
+
// TODO add logging
|
183
|
+
}
|
184
|
+
|
185
|
+
|
186
|
+
function createBundle(
|
187
|
+
address owner, // initial bundle owner
|
188
|
+
Fee memory fee, // fees deducted from premium that go to bundle owner
|
189
|
+
Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
|
190
|
+
Seconds lifetime, // initial duration for which new policies are covered
|
191
|
+
bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
|
192
|
+
)
|
193
|
+
external
|
194
|
+
virtual
|
195
|
+
returns(NftId bundleNftId)
|
196
|
+
{
|
197
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
198
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
199
|
+
|
200
|
+
// pool fee book keeping
|
201
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
202
|
+
Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
|
203
|
+
|
204
|
+
bundleNftId = _bundleService.create(
|
205
|
+
instance,
|
206
|
+
poolNftId,
|
207
|
+
owner,
|
208
|
+
fee,
|
209
|
+
stakingNetAmount,
|
210
|
+
lifetime,
|
211
|
+
filter);
|
212
|
+
|
213
|
+
// collect tokens from bundle owner
|
214
|
+
_transferStakingAmount(componentInfo, owner, stakingAmount);
|
215
|
+
|
216
|
+
emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
|
217
|
+
}
|
218
|
+
|
219
|
+
|
220
|
+
function closeBundle(NftId bundleNftId)
|
221
|
+
external
|
222
|
+
virtual
|
223
|
+
{
|
224
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
225
|
+
|
226
|
+
// TODO book keeping for pool collateral released outside of retention level
|
227
|
+
|
228
|
+
// releasing collateral in bundle
|
229
|
+
_bundleService.close(instance, bundleNftId);
|
230
|
+
|
231
|
+
// TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
|
232
|
+
|
233
|
+
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
|
234
|
+
}
|
235
|
+
|
236
|
+
function processSale(
|
237
|
+
NftId bundleNftId,
|
238
|
+
IPolicy.Premium memory premium,
|
239
|
+
Amount actualAmountTransferred
|
240
|
+
)
|
241
|
+
external
|
242
|
+
virtual
|
243
|
+
{
|
244
|
+
IRegistry registry = getRegistry();
|
245
|
+
IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
|
246
|
+
IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
|
247
|
+
IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
|
248
|
+
IInstance instance = IInstance(instanceObjectInfo.objectAddress);
|
249
|
+
|
250
|
+
Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
|
251
|
+
Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
|
252
|
+
Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
|
253
|
+
if (!(actualAmountTransferred == expectedTransferAmount)) {
|
254
|
+
revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
|
255
|
+
}
|
256
|
+
|
257
|
+
// update pool fee balance
|
258
|
+
if (poolFeeAmount.gtz()) {
|
259
|
+
IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
|
260
|
+
poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
|
261
|
+
instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
|
262
|
+
}
|
263
|
+
|
264
|
+
if (bundleFeeAmount.gtz()) {
|
265
|
+
_bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
|
266
|
+
}
|
267
|
+
}
|
268
|
+
|
269
|
+
function lockCollateral(
|
270
|
+
IInstance instance,
|
271
|
+
NftId productNftId,
|
272
|
+
NftId applicationNftId,
|
273
|
+
IPolicy.PolicyInfo memory applicationInfo,
|
274
|
+
Amount premiumAmount // premium amount after product and distribution fees
|
275
|
+
)
|
276
|
+
external
|
277
|
+
virtual
|
278
|
+
// TODO add restricted and granting for policy service
|
279
|
+
{
|
280
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
281
|
+
NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
|
282
|
+
NftId bundleNftId = applicationInfo.bundleNftId;
|
283
|
+
|
284
|
+
// TODO move this check to application creation and don't repeat this here
|
285
|
+
// ensure that pool for bundle from application matches with pool for product of application
|
286
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
287
|
+
if(bundleInfo.poolNftId != poolNftId) {
|
288
|
+
revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
|
289
|
+
}
|
290
|
+
|
291
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
292
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
293
|
+
|
294
|
+
// TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
|
295
|
+
Amount collateralAmount = applicationInfo.sumInsuredAmount;
|
296
|
+
|
297
|
+
// TODO add correct net premium calculation (pool fee might be > 0)
|
298
|
+
Amount premiumAfterPoolFeeAmount = premiumAmount;
|
299
|
+
|
300
|
+
// lock collateral amount from involvedd bundle
|
301
|
+
_bundleService.lockCollateral(
|
302
|
+
instance,
|
303
|
+
applicationNftId,
|
304
|
+
bundleNftId,
|
305
|
+
collateralAmount,
|
306
|
+
premiumAfterPoolFeeAmount);
|
307
|
+
|
308
|
+
// also verify/confirm application by pool if necessary
|
309
|
+
if(poolInfo.isVerifyingApplications) {
|
310
|
+
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
311
|
+
IPoolComponent(poolAddress).verifyApplication(
|
312
|
+
applicationNftId,
|
313
|
+
applicationInfo.applicationData,
|
314
|
+
bundleNftId,
|
315
|
+
bundleInfo.filter,
|
316
|
+
collateralAmount);
|
317
|
+
}
|
318
|
+
}
|
319
|
+
|
320
|
+
|
321
|
+
function reduceCollateral(
|
322
|
+
IInstance instance,
|
323
|
+
NftId policyNftId,
|
324
|
+
IPolicy.PolicyInfo memory policyInfo,
|
325
|
+
Amount payoutAmount
|
326
|
+
)
|
327
|
+
external
|
328
|
+
virtual
|
329
|
+
// TODO add restricted and granting for claim service
|
330
|
+
{
|
331
|
+
_bundleService.releaseCollateral(
|
332
|
+
instance,
|
333
|
+
policyNftId,
|
334
|
+
policyInfo.bundleNftId,
|
335
|
+
payoutAmount);
|
336
|
+
}
|
337
|
+
|
338
|
+
|
339
|
+
/// @dev releases the remaining collateral linked to the specified policy
|
340
|
+
/// may only be called by the policy service for unlocked pool components
|
341
|
+
function releaseCollateral(
|
342
|
+
IInstance instance,
|
343
|
+
NftId policyNftId,
|
344
|
+
IPolicy.PolicyInfo memory policyInfo
|
345
|
+
)
|
346
|
+
external
|
347
|
+
virtual
|
348
|
+
// TODO add restricted and granting for policy service
|
349
|
+
{
|
350
|
+
_bundleService.releaseCollateral(
|
351
|
+
instance,
|
352
|
+
policyNftId,
|
353
|
+
policyInfo.bundleNftId,
|
354
|
+
policyInfo.sumInsuredAmount - policyInfo.claimAmount);
|
355
|
+
|
356
|
+
_bundleService.unlinkPolicy(
|
357
|
+
instance,
|
358
|
+
policyNftId);
|
359
|
+
}
|
360
|
+
|
361
|
+
|
362
|
+
function _processStakingFees(
|
363
|
+
IComponents.ComponentInfo memory componentInfo,
|
364
|
+
Amount stakingAmount
|
365
|
+
)
|
366
|
+
internal
|
367
|
+
returns (Amount stakingNetAmount)
|
368
|
+
{
|
369
|
+
stakingNetAmount = stakingAmount;
|
370
|
+
|
371
|
+
// check if any staking fees apply
|
372
|
+
Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
|
373
|
+
if (FeeLib.gtz(stakingFee)) {
|
374
|
+
(Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
|
375
|
+
stakingNetAmount = netAmount;
|
376
|
+
|
377
|
+
// TODO update fee balance for pool
|
378
|
+
}
|
379
|
+
}
|
380
|
+
|
381
|
+
|
382
|
+
// TODO create (I)TreasuryService that deals with all gif related token transfers
|
383
|
+
/// @dev transfers the specified amount from the bundle owner to the pool's wallet
|
384
|
+
function _transferStakingAmount(
|
385
|
+
IComponents.ComponentInfo memory componentInfo,
|
386
|
+
address bundleOwner,
|
387
|
+
Amount stakingAmount
|
388
|
+
)
|
389
|
+
internal
|
390
|
+
{
|
391
|
+
TokenHandler tokenHandler = componentInfo.tokenHandler;
|
392
|
+
address poolWallet = componentInfo.wallet;
|
393
|
+
|
394
|
+
if(stakingAmount.gtz()) {
|
395
|
+
tokenHandler.transfer(
|
396
|
+
bundleOwner,
|
397
|
+
poolWallet,
|
398
|
+
stakingAmount
|
399
|
+
);
|
400
|
+
}
|
401
|
+
}
|
402
|
+
|
403
|
+
}
|