@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e964d24-516
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -83
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +129 -14
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +203 -14
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +110 -283
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +68 -54
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +309 -2078
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -76
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +434 -2823
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +493 -129
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +406 -192
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +224 -291
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +45 -82
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +291 -189
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +231 -165
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +160 -204
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +184 -100
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +211 -100
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +120 -166
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +210 -21
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +86 -28
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/{components → product}/Product.sol/Product.json +121 -22
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +35 -16
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +26 -53
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +30 -18
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/{components → shared}/Component.sol/Component.json +106 -7
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +114 -35
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +196 -7
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
- package/contracts/{components → distribution}/Distribution.sol +21 -16
- package/contracts/distribution/DistributionService.sol +348 -0
- package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
- package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
- package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
- package/contracts/instance/BundleManager.sol +13 -12
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +48 -63
- package/contracts/instance/IInstanceService.sol +31 -17
- package/contracts/instance/Instance.sol +131 -193
- package/contracts/instance/InstanceAccessManager.sol +405 -161
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +101 -26
- package/contracts/instance/InstanceService.sol +173 -354
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +211 -0
- package/contracts/instance/ObjectManager.sol +9 -11
- package/contracts/instance/base/IKeyValueStore.sol +5 -5
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +18 -41
- package/contracts/instance/base/Lifecycle.sol +27 -7
- package/contracts/instance/module/IAccess.sol +23 -16
- package/contracts/instance/module/IBundle.sol +10 -8
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +7 -6
- package/contracts/instance/module/IPolicy.sol +19 -14
- package/contracts/instance/module/IRisk.sol +1 -1
- package/contracts/instance/module/ISetup.sol +5 -18
- package/contracts/instance/module/ITreasury.sol +2 -2
- package/contracts/pool/BundleService.sol +382 -0
- package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
- package/contracts/pool/IBundleService.sol +118 -0
- package/contracts/{components → pool}/IPoolComponent.sol +19 -56
- package/contracts/pool/IPoolService.sol +114 -0
- package/contracts/{components → pool}/Pool.sol +62 -138
- package/contracts/pool/PoolService.sol +403 -0
- package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
- package/contracts/product/ApplicationService.sol +186 -0
- package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
- package/contracts/product/ClaimService.sol +437 -0
- package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
- package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
- package/contracts/product/IClaimService.sol +90 -0
- package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
- package/contracts/product/IPricingService.sol +37 -0
- package/contracts/{components → product}/IProductComponent.sol +11 -10
- package/contracts/{instance/service → product}/IProductService.sol +10 -10
- package/contracts/product/PolicyService.sol +376 -0
- package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
- package/contracts/product/PricingService.sol +275 -0
- package/contracts/product/PricingServiceManager.sol +51 -0
- package/contracts/{components → product}/Product.sol +160 -74
- package/contracts/product/ProductService.sol +210 -0
- package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +6 -4
- package/contracts/registry/IRegistryService.sol +6 -7
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +26 -23
- package/contracts/registry/RegistryAccessManager.sol +1 -1
- package/contracts/registry/RegistryService.sol +33 -31
- package/contracts/registry/RegistryServiceManager.sol +0 -2
- package/contracts/registry/ReleaseManager.sol +24 -22
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/{components → shared}/Component.sol +68 -18
- package/contracts/shared/ComponentService.sol +150 -0
- package/contracts/{components → shared}/IComponent.sol +28 -6
- package/contracts/shared/INftOwnable.sol +1 -1
- package/contracts/shared/IPolicyHolder.sol +24 -10
- package/contracts/shared/IRegistryLinked.sol +0 -1
- package/contracts/shared/IService.sol +6 -6
- package/contracts/shared/IVersionable.sol +1 -1
- package/contracts/shared/NftOwnable.sol +1 -3
- package/contracts/shared/PolicyHolder.sol +31 -18
- package/contracts/shared/ProxyManager.sol +3 -3
- package/contracts/shared/Registerable.sol +12 -11
- package/contracts/shared/RegistryLinked.sol +0 -5
- package/contracts/shared/Service.sol +23 -9
- package/contracts/shared/TokenHandler.sol +14 -6
- package/contracts/shared/Versionable.sol +1 -1
- package/contracts/staking/IStakingService.sol +102 -0
- package/contracts/staking/StakeingServiceManager.sol +37 -0
- package/contracts/staking/StakingService.sol +166 -0
- package/contracts/type/Amount.sol +109 -0
- package/contracts/{types → type}/Blocknumber.sol +1 -0
- package/contracts/{types → type}/ClaimId.sol +25 -2
- package/contracts/{types → type}/Fee.sol +17 -8
- package/contracts/{types → type}/NftId.sol +8 -0
- package/contracts/{types → type}/NftIdSet.sol +1 -1
- package/contracts/{types → type}/ObjectType.sol +10 -5
- package/contracts/{types → type}/PayoutId.sol +33 -5
- package/contracts/{types → type}/RoleId.sol +6 -4
- package/contracts/{types → type}/StateId.sol +7 -2
- package/contracts/{types → type}/Timestamp.sol +6 -0
- package/contracts/{types → type}/UFixed.sol +1 -0
- package/contracts/{types → type}/Version.sol +1 -0
- package/package.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1096
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1724
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -801
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -347
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -727
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -649
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
- package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
- package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
- package/contracts/instance/base/ComponentService.sol +0 -134
- package/contracts/instance/service/ApplicationService.sol +0 -349
- package/contracts/instance/service/BundleService.sol +0 -299
- package/contracts/instance/service/ClaimService.sol +0 -151
- package/contracts/instance/service/DistributionService.sol +0 -450
- package/contracts/instance/service/IBundleService.sol +0 -55
- package/contracts/instance/service/IClaimService.sol +0 -61
- package/contracts/instance/service/IPoolService.sol +0 -20
- package/contracts/instance/service/PolicyService.sol +0 -394
- package/contracts/instance/service/PoolService.sol +0 -109
- package/contracts/instance/service/ProductService.sol +0 -233
- package/contracts/shared/ContractDeployerLib.sol +0 -72
- package/contracts/test/TestFee.sol +0 -25
- package/contracts/test/TestRegisterable.sol +0 -18
- package/contracts/test/TestRoleId.sol +0 -14
- package/contracts/test/TestService.sol +0 -25
- package/contracts/test/TestToken.sol +0 -26
- package/contracts/test/TestVersion.sol +0 -44
- package/contracts/test/TestVersionable.sol +0 -17
- package/contracts/test/Usdc.sol +0 -26
- package/contracts/types/ChainId.sol +0 -38
- package/contracts/types/NumberId.sol +0 -52
- /package/contracts/{types → type}/AddressSet.sol +0 -0
- /package/contracts/{types → type}/DistributorType.sol +0 -0
- /package/contracts/{types → type}/Key32.sol +0 -0
- /package/contracts/{types → type}/Referral.sol +0 -0
- /package/contracts/{types → type}/RiskId.sol +0 -0
- /package/contracts/{types → type}/Seconds.sol +0 -0
@@ -1,12 +1,13 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {
|
6
|
-
import {
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
4
|
+
import {Amount} from "../../type/Amount.sol";
|
5
|
+
import {NftId} from "../../type/NftId.sol";
|
6
|
+
import {ClaimId} from "../../type/ClaimId.sol";
|
7
|
+
import {ReferralId} from "../../type/Referral.sol";
|
8
|
+
import {RiskId} from "../../type/RiskId.sol";
|
9
|
+
import {Seconds} from "../../type/Seconds.sol";
|
10
|
+
import {Timestamp} from "../../type/Timestamp.sol";
|
10
11
|
|
11
12
|
interface IPolicy {
|
12
13
|
|
@@ -40,15 +41,16 @@ interface IPolicy {
|
|
40
41
|
NftId bundleNftId;
|
41
42
|
ReferralId referralId;
|
42
43
|
RiskId riskId;
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
Amount sumInsuredAmount;
|
45
|
+
Amount premiumAmount;
|
46
|
+
Amount premiumPaidAmount; // when lower than premium amount: max payout decreased accordingly
|
46
47
|
Seconds lifetime;
|
47
48
|
bytes applicationData;
|
48
49
|
bytes policyData;
|
49
50
|
uint16 claimsCount;
|
50
51
|
uint16 openClaimsCount;
|
51
|
-
|
52
|
+
Amount claimAmount; // sum of confirmed claim amounts (max = sum insured amount)
|
53
|
+
Amount payoutAmount; // sum of payouts (max = sum confirmed claim amountst)
|
52
54
|
Timestamp activatedAt; // time of underwriting
|
53
55
|
Timestamp expiredAt; // no new claims (activatedAt + lifetime)
|
54
56
|
Timestamp closedAt; // no locked capital (or declinedAt)
|
@@ -56,16 +58,19 @@ interface IPolicy {
|
|
56
58
|
|
57
59
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
58
60
|
struct ClaimInfo {
|
59
|
-
|
60
|
-
|
61
|
+
Amount claimAmount;
|
62
|
+
Amount paidAmount;
|
63
|
+
uint8 payoutsCount;
|
64
|
+
uint8 openPayoutsCount;
|
61
65
|
bytes data;
|
62
|
-
|
66
|
+
// TODO consider to add processData that may include information supporting confirm or decline
|
67
|
+
Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
|
63
68
|
}
|
64
69
|
|
65
70
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
66
71
|
struct PayoutInfo {
|
67
72
|
ClaimId claimId;
|
68
|
-
|
73
|
+
Amount amount;
|
69
74
|
bytes data;
|
70
75
|
Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
|
71
76
|
}
|
@@ -3,12 +3,14 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
-
import {Fee} from "../../
|
7
|
-
import {NftId} from "../../
|
8
|
-
import {
|
6
|
+
import {Fee} from "../../type/Fee.sol";
|
7
|
+
import {NftId} from "../../type/NftId.sol";
|
8
|
+
import {RoleId} from "../../type/RoleId.sol";
|
9
9
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
10
|
+
import {UFixed} from "../../type/UFixed.sol";
|
10
11
|
|
11
12
|
interface ISetup {
|
13
|
+
|
12
14
|
struct ProductSetupInfo {
|
13
15
|
IERC20Metadata token;
|
14
16
|
TokenHandler tokenHandler;
|
@@ -28,19 +30,4 @@ interface ISetup {
|
|
28
30
|
address wallet;
|
29
31
|
uint256 sumDistributionOwnerFees;
|
30
32
|
}
|
31
|
-
|
32
|
-
struct PoolSetupInfo {
|
33
|
-
NftId productNftId;
|
34
|
-
TokenHandler tokenHandler;
|
35
|
-
uint256 maxCapitalAmount; // max capital amount allowed for pool
|
36
|
-
bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
|
37
|
-
bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
|
38
|
-
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
39
|
-
UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
|
40
|
-
UFixed retentionLevel; // amount of collateral held in pool (default 100%)
|
41
|
-
Fee poolFee; // pool fee on net premium
|
42
|
-
Fee stakingFee; // pool fee on staked capital from investor
|
43
|
-
Fee performanceFee; // pool fee on profits from capital investors
|
44
|
-
address wallet;
|
45
|
-
}
|
46
33
|
}
|
@@ -3,8 +3,8 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
-
import {Fee} from "../../
|
7
|
-
import {NftId} from "../../
|
6
|
+
import {Fee} from "../../type/Fee.sol";
|
7
|
+
import {NftId} from "../../type/NftId.sol";
|
8
8
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
9
9
|
|
10
10
|
interface ITreasury {
|
@@ -0,0 +1,382 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IBundle} from "../instance/module/IBundle.sol";
|
5
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
6
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
7
|
+
import {IInstance} from "../instance/IInstance.sol";
|
8
|
+
import {TokenHandler} from "../instance/module/ITreasury.sol";
|
9
|
+
import {ISetup} from "../instance/module/ISetup.sol";
|
10
|
+
import {IPolicy} from "../instance/module/IPolicy.sol";
|
11
|
+
|
12
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
13
|
+
import {INftOwnable} from "../shared/INftOwnable.sol";
|
14
|
+
import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
|
15
|
+
import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
|
16
|
+
import {POOL_OWNER_ROLE, RoleId} from "../type/RoleId.sol";
|
17
|
+
import {Pool} from "./Pool.sol";
|
18
|
+
|
19
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
20
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
21
|
+
import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
|
22
|
+
import {Seconds} from "../type/Seconds.sol";
|
23
|
+
import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
24
|
+
import {Version, VersionLib} from "../type/Version.sol";
|
25
|
+
import {Versionable} from "../shared/Versionable.sol";
|
26
|
+
|
27
|
+
import {IService} from "../shared/IService.sol";
|
28
|
+
import {Service} from "../shared/Service.sol";
|
29
|
+
import {BundleManager} from "../instance/BundleManager.sol";
|
30
|
+
import {ComponentService} from "../shared/ComponentService.sol";
|
31
|
+
import {IBundleService} from "./IBundleService.sol";
|
32
|
+
import {IRegistryService} from "../registry/IRegistryService.sol";
|
33
|
+
import {InstanceService} from "../instance/InstanceService.sol";
|
34
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
35
|
+
|
36
|
+
string constant BUNDLE_SERVICE_NAME = "BundleService";
|
37
|
+
|
38
|
+
contract BundleService is
|
39
|
+
ComponentService,
|
40
|
+
IBundleService
|
41
|
+
{
|
42
|
+
using NftIdLib for NftId;
|
43
|
+
|
44
|
+
string public constant NAME = "BundleService";
|
45
|
+
|
46
|
+
address internal _registryAddress;
|
47
|
+
|
48
|
+
function _initialize(
|
49
|
+
address owner,
|
50
|
+
bytes memory data
|
51
|
+
)
|
52
|
+
internal
|
53
|
+
initializer
|
54
|
+
virtual override
|
55
|
+
{
|
56
|
+
address registryAddress;
|
57
|
+
address initialOwner;
|
58
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
59
|
+
// TODO while PoolService is not deployed in PoolServiceManager constructor
|
60
|
+
// owner is PoolServiceManager deployer
|
61
|
+
initializeService(registryAddress, address(0), owner);
|
62
|
+
registerInterface(type(IBundleService).interfaceId);
|
63
|
+
}
|
64
|
+
|
65
|
+
function getDomain() public pure override returns(ObjectType) {
|
66
|
+
return BUNDLE();
|
67
|
+
}
|
68
|
+
|
69
|
+
// TODO staking/unstaking as well as collateralize need to go to pool service
|
70
|
+
// it will also be the pool service that is updating the pool info data
|
71
|
+
// collateralize -> potentially accumulate pool fees
|
72
|
+
// collateralize: additional reason to move to pool, pool might has retential level < 1 ...
|
73
|
+
// staking -> potentially accumulate staking fees
|
74
|
+
// unstaking -> potentially accumulate performance fees
|
75
|
+
function _updatePoolWithStakes(
|
76
|
+
IInstance instance,
|
77
|
+
NftId poolNftId,
|
78
|
+
Amount stakingAmount
|
79
|
+
)
|
80
|
+
internal
|
81
|
+
returns (
|
82
|
+
TokenHandler tokenHandler,
|
83
|
+
address wallet,
|
84
|
+
Amount netStakingAmount
|
85
|
+
)
|
86
|
+
{
|
87
|
+
if(stakingAmount.gtz()) {
|
88
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
89
|
+
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
90
|
+
|
91
|
+
tokenHandler = componentInfo.tokenHandler;
|
92
|
+
wallet = componentInfo.wallet;
|
93
|
+
|
94
|
+
IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
95
|
+
Amount poolFeeAmount;
|
96
|
+
|
97
|
+
// calculate pool fee and net staking amount
|
98
|
+
(poolFeeAmount, netStakingAmount) = FeeLib.calculateFee(poolInfo.stakingFee, stakingAmount);
|
99
|
+
|
100
|
+
// update pool balance and fee amount
|
101
|
+
poolInfo.balanceAmount = poolInfo.balanceAmount + netStakingAmount;
|
102
|
+
|
103
|
+
if(poolFeeAmount.gtz()) {
|
104
|
+
poolInfo.feeAmount = poolInfo.feeAmount + poolFeeAmount;
|
105
|
+
}
|
106
|
+
|
107
|
+
// save updated pool info
|
108
|
+
componentInfo.data = abi.encode(poolInfo);
|
109
|
+
instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
|
114
|
+
function create(
|
115
|
+
IInstance instance,
|
116
|
+
NftId poolNftId,
|
117
|
+
address owner,
|
118
|
+
Fee memory bundleFee,
|
119
|
+
Amount stakingAmount,
|
120
|
+
Seconds lifetime,
|
121
|
+
bytes calldata filter
|
122
|
+
)
|
123
|
+
external
|
124
|
+
override
|
125
|
+
// TODO add restricted and add authz for pool service
|
126
|
+
returns(NftId bundleNftId)
|
127
|
+
{
|
128
|
+
// register bundle with registry
|
129
|
+
bundleNftId = getRegistryService().registerBundle(
|
130
|
+
IRegistry.ObjectInfo(
|
131
|
+
zeroNftId(),
|
132
|
+
poolNftId,
|
133
|
+
BUNDLE(),
|
134
|
+
false, // intercepting property for bundles is defined on pool
|
135
|
+
address(0),
|
136
|
+
owner,
|
137
|
+
"" // bundle data to be stored in registry
|
138
|
+
)
|
139
|
+
);
|
140
|
+
|
141
|
+
// create bundle info in instance
|
142
|
+
instance.getInstanceStore().createBundle(
|
143
|
+
bundleNftId,
|
144
|
+
IBundle.BundleInfo(
|
145
|
+
poolNftId,
|
146
|
+
bundleFee,
|
147
|
+
filter,
|
148
|
+
stakingAmount,
|
149
|
+
AmountLib.zero(),
|
150
|
+
AmountLib.zero(),
|
151
|
+
lifetime,
|
152
|
+
TimestampLib.blockTimestamp().addSeconds(lifetime),
|
153
|
+
zeroTimestamp()));
|
154
|
+
|
155
|
+
// put bundle under bundle managemet
|
156
|
+
BundleManager bundleManager = instance.getBundleManager();
|
157
|
+
bundleManager.add(bundleNftId);
|
158
|
+
|
159
|
+
// TODO add logging
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
function setFee(
|
164
|
+
NftId bundleNftId,
|
165
|
+
Fee memory fee
|
166
|
+
)
|
167
|
+
external
|
168
|
+
override
|
169
|
+
{
|
170
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
171
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
172
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
173
|
+
if(bundleInfo.poolNftId.eqz()) {
|
174
|
+
revert ErrorBundleServiceBundleUnknown(bundleNftId);
|
175
|
+
}
|
176
|
+
|
177
|
+
if(bundleInfo.poolNftId != poolNftId) {
|
178
|
+
revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
|
179
|
+
}
|
180
|
+
|
181
|
+
bundleInfo.fee = fee;
|
182
|
+
instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
183
|
+
}
|
184
|
+
|
185
|
+
|
186
|
+
// the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
|
187
|
+
function lockCollateral(
|
188
|
+
IInstance instance,
|
189
|
+
NftId policyNftId,
|
190
|
+
NftId bundleNftId,
|
191
|
+
Amount collateralAmount, // required amount to collateralize policy
|
192
|
+
Amount premiumAmount // premium part that reaches bundle for this policy
|
193
|
+
)
|
194
|
+
external
|
195
|
+
onlyService // TODO replace with restricted + appropriate granting
|
196
|
+
{
|
197
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
198
|
+
StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
|
199
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
200
|
+
|
201
|
+
// ensure bundle is active and not yet expired
|
202
|
+
if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
|
203
|
+
revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
|
204
|
+
}
|
205
|
+
|
206
|
+
// ensure bundle capacity is sufficent to collateralize policy
|
207
|
+
Amount capacity = bundleInfo.capitalAmount + premiumAmount - bundleInfo.lockedAmount;
|
208
|
+
if(capacity < collateralAmount) {
|
209
|
+
revert ErrorBundleServiceCapacityInsufficient(bundleNftId, capacity, collateralAmount);
|
210
|
+
}
|
211
|
+
|
212
|
+
// TODO add more validation
|
213
|
+
|
214
|
+
// updated locked amount
|
215
|
+
bundleInfo.lockedAmount = bundleInfo.lockedAmount + collateralAmount;
|
216
|
+
|
217
|
+
// update capital and fees when premiums are involved
|
218
|
+
_updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
|
219
|
+
|
220
|
+
// link policy to bundle in bundle manger
|
221
|
+
_linkPolicy(instance, policyNftId);
|
222
|
+
}
|
223
|
+
|
224
|
+
|
225
|
+
function _updateBundleWithPremium(
|
226
|
+
IInstance instance,
|
227
|
+
NftId bundleNftId,
|
228
|
+
IBundle.BundleInfo memory bundleInfo,
|
229
|
+
Amount premiumAmount
|
230
|
+
)
|
231
|
+
internal
|
232
|
+
{
|
233
|
+
// update bundle capital and fee amounts
|
234
|
+
if(premiumAmount.gtz()) {
|
235
|
+
// calculate fees and net premium amounts
|
236
|
+
(
|
237
|
+
,
|
238
|
+
Amount netPremiumAmount
|
239
|
+
) = FeeLib.calculateFee(bundleInfo.fee, premiumAmount);
|
240
|
+
|
241
|
+
// update bundle info with additional capital
|
242
|
+
bundleInfo.capitalAmount = bundleInfo.capitalAmount + netPremiumAmount;
|
243
|
+
}
|
244
|
+
|
245
|
+
// save updated bundle info
|
246
|
+
instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
247
|
+
}
|
248
|
+
|
249
|
+
function updateBundleFees(
|
250
|
+
IInstance instance,
|
251
|
+
NftId bundleNftId,
|
252
|
+
Amount feeAmount
|
253
|
+
)
|
254
|
+
external
|
255
|
+
{
|
256
|
+
IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
|
257
|
+
bundleInfo.feeAmount = bundleInfo.feeAmount.add(feeAmount);
|
258
|
+
instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
259
|
+
}
|
260
|
+
|
261
|
+
function lock(NftId bundleNftId)
|
262
|
+
external
|
263
|
+
virtual
|
264
|
+
{
|
265
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
266
|
+
|
267
|
+
// udpate bundle state
|
268
|
+
instance.getInstanceStore().updateBundleState(bundleNftId, PAUSED());
|
269
|
+
|
270
|
+
// update set of active bundles
|
271
|
+
BundleManager bundleManager = instance.getBundleManager();
|
272
|
+
bundleManager.lock(bundleNftId);
|
273
|
+
|
274
|
+
emit LogBundleServiceBundleLocked(bundleNftId);
|
275
|
+
}
|
276
|
+
|
277
|
+
|
278
|
+
function unlock(NftId bundleNftId)
|
279
|
+
external
|
280
|
+
virtual
|
281
|
+
{
|
282
|
+
(,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
|
283
|
+
|
284
|
+
// udpate bundle state
|
285
|
+
instance.getInstanceStore().updateBundleState(bundleNftId, ACTIVE());
|
286
|
+
|
287
|
+
// update set of active bundles
|
288
|
+
BundleManager bundleManager = instance.getBundleManager();
|
289
|
+
bundleManager.unlock(bundleNftId);
|
290
|
+
|
291
|
+
emit LogBundleServiceBundleActivated(bundleNftId);
|
292
|
+
}
|
293
|
+
|
294
|
+
|
295
|
+
function close(
|
296
|
+
IInstance instance,
|
297
|
+
NftId bundleNftId
|
298
|
+
)
|
299
|
+
external
|
300
|
+
virtual
|
301
|
+
// TODO add restricted and autz for pool service
|
302
|
+
{
|
303
|
+
// udpate bundle state
|
304
|
+
instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
|
305
|
+
|
306
|
+
// ensure no open policies attached to bundle
|
307
|
+
BundleManager bundleManager = instance.getBundleManager();
|
308
|
+
uint256 openPolicies = bundleManager.activePolicies(bundleNftId);
|
309
|
+
if(openPolicies > 0) {
|
310
|
+
revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
|
311
|
+
}
|
312
|
+
|
313
|
+
// update set of active bundles
|
314
|
+
bundleManager.lock(bundleNftId);
|
315
|
+
}
|
316
|
+
|
317
|
+
|
318
|
+
function increaseBalance(
|
319
|
+
IInstance instance,
|
320
|
+
NftId bundleNftId,
|
321
|
+
Amount premiumAmount
|
322
|
+
)
|
323
|
+
external
|
324
|
+
onlyService
|
325
|
+
{
|
326
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
327
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
328
|
+
|
329
|
+
// update capital and fees when premiums are involved
|
330
|
+
_updateBundleWithPremium(instance, bundleNftId, bundleInfo, premiumAmount);
|
331
|
+
|
332
|
+
// TODO add logging (?)
|
333
|
+
}
|
334
|
+
|
335
|
+
function releaseCollateral(IInstance instance,
|
336
|
+
NftId policyNftId,
|
337
|
+
NftId bundleNftId,
|
338
|
+
Amount collateralAmount
|
339
|
+
)
|
340
|
+
external
|
341
|
+
onlyService
|
342
|
+
{
|
343
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
344
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
345
|
+
|
346
|
+
// reduce locked amount by released collateral amount
|
347
|
+
bundleInfo.lockedAmount = bundleInfo.lockedAmount - collateralAmount;
|
348
|
+
instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
349
|
+
}
|
350
|
+
|
351
|
+
/// @dev links policy to bundle
|
352
|
+
function _linkPolicy(IInstance instance, NftId policyNftId)
|
353
|
+
internal
|
354
|
+
{
|
355
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
356
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
357
|
+
|
358
|
+
// ensure policy has not yet been activated in a previous tx already
|
359
|
+
if (policyInfo.activatedAt.gtz() && policyInfo.activatedAt < TimestampLib.blockTimestamp()) {
|
360
|
+
revert BundleManager.ErrorBundleManagerPolicyAlreadyActivated(policyNftId);
|
361
|
+
}
|
362
|
+
|
363
|
+
BundleManager bundleManager = instance.getBundleManager();
|
364
|
+
bundleManager.linkPolicy(policyNftId);
|
365
|
+
}
|
366
|
+
|
367
|
+
/// @dev unlinks policy from bundle
|
368
|
+
function unlinkPolicy(
|
369
|
+
IInstance instance,
|
370
|
+
NftId policyNftId
|
371
|
+
)
|
372
|
+
external
|
373
|
+
virtual
|
374
|
+
{
|
375
|
+
// ensure policy is closeable
|
376
|
+
if (!instance.getInstanceReader().policyIsCloseable(policyNftId)) {
|
377
|
+
revert ErrorBundleServicePolicyNotCloseable(policyNftId);
|
378
|
+
}
|
379
|
+
|
380
|
+
instance.getBundleManager().unlinkPolicy(policyNftId);
|
381
|
+
}
|
382
|
+
}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IVersionable} from "
|
5
|
-
import {ProxyManager} from "
|
4
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../shared/ProxyManager.sol";
|
6
6
|
import {BundleService} from "./BundleService.sol";
|
7
|
-
import {Registry} from "
|
8
|
-
import {RegistryService} from "
|
9
|
-
import {ObjectType, REGISTRY} from "
|
7
|
+
import {Registry} from "../registry/Registry.sol";
|
8
|
+
import {RegistryService} from "../registry/RegistryService.sol";
|
9
|
+
import {ObjectType, REGISTRY} from "../type/ObjectType.sol";
|
10
10
|
|
11
11
|
contract BundleServiceManager is ProxyManager {
|
12
12
|
|
@@ -0,0 +1,118 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Amount} from "../type/Amount.sol";
|
5
|
+
import {NftId} from "../type/NftId.sol";
|
6
|
+
import {Fee} from "../type/Fee.sol";
|
7
|
+
import {IService} from "../shared/IService.sol";
|
8
|
+
import {IBundle} from "../instance/module/IBundle.sol";
|
9
|
+
import {IInstance} from "../instance/IInstance.sol";
|
10
|
+
import {Seconds} from "../type/Seconds.sol";
|
11
|
+
import {StateId} from "../type/StateId.sol";
|
12
|
+
import {Timestamp} from "../type/Timestamp.sol";
|
13
|
+
|
14
|
+
interface IBundleService is IService {
|
15
|
+
|
16
|
+
event LogBundleServiceBundleActivated(NftId bundleNftId);
|
17
|
+
event LogBundleServiceBundleLocked(NftId bundleNftId);
|
18
|
+
|
19
|
+
error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, Amount amount);
|
20
|
+
error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state, Timestamp expiredAt);
|
21
|
+
error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId, Amount capacityAmount, Amount collateralAmount);
|
22
|
+
error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
|
23
|
+
|
24
|
+
error ErrorBundleServiceBundleUnknown(NftId bundleNftId);
|
25
|
+
error ErrorBundleServiceBundlePoolMismatch(NftId bundleNftId, NftId expectedPool, NftId actualPool);
|
26
|
+
|
27
|
+
error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
|
28
|
+
|
29
|
+
/// @dev create a new bundle for the specified attributes
|
30
|
+
/// may only be called by pool service
|
31
|
+
function create(
|
32
|
+
IInstance instance, // instance relevant for bundle
|
33
|
+
NftId poolNftId, // the pool the bundle will be linked to
|
34
|
+
address owner, // initial bundle owner
|
35
|
+
Fee memory fee, // fees deducted from premium that go to bundle owner
|
36
|
+
Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
|
37
|
+
Seconds lifetime, // initial duration for which new policies are covered
|
38
|
+
bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
|
39
|
+
)
|
40
|
+
external
|
41
|
+
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
42
|
+
|
43
|
+
|
44
|
+
/// @dev increase bundle stakes by the specified amount
|
45
|
+
/// may only be called by the bundle owner
|
46
|
+
// function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
47
|
+
|
48
|
+
// function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
49
|
+
|
50
|
+
/// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
|
51
|
+
/// only active bundles may be locked
|
52
|
+
/// may only be called by registered and unlocked pool components
|
53
|
+
function lock(NftId bundleNftId) external;
|
54
|
+
|
55
|
+
/// @dev activates the specified bundle
|
56
|
+
/// only locked bundles may be unlocked
|
57
|
+
/// may only be called by registered and unlocked pool components
|
58
|
+
function unlock(NftId bundleNftId) external;
|
59
|
+
|
60
|
+
/// @dev closes the specified bundle
|
61
|
+
/// only open bundles (active or locked) may be closed
|
62
|
+
/// to close a bundle it may not have any non-closed polices attached to it
|
63
|
+
/// may only be called by registered and unlocked pool components
|
64
|
+
function close(
|
65
|
+
IInstance instance,
|
66
|
+
NftId bundleNftId
|
67
|
+
) external;
|
68
|
+
|
69
|
+
/// @dev set bundle fee to provided value
|
70
|
+
/// may only be called by registered and unlocked pool components
|
71
|
+
function setFee(
|
72
|
+
NftId bundleNftId,
|
73
|
+
Fee memory fee
|
74
|
+
) external;
|
75
|
+
|
76
|
+
|
77
|
+
/// @dev locks the specified collateral in the bundle
|
78
|
+
/// the locked collateral is added to the bundle locked capital
|
79
|
+
/// the bundles' fees are updated with the fees for this premium
|
80
|
+
/// the premium (minus bundle fee) is added to the bundle capital
|
81
|
+
/// may only be called by pool service
|
82
|
+
function lockCollateral(
|
83
|
+
IInstance instanceNftId,
|
84
|
+
NftId policyNftId,
|
85
|
+
NftId bundleNftId,
|
86
|
+
Amount collateralAmount,
|
87
|
+
Amount premiumAmount // premium after pool fee
|
88
|
+
) external;
|
89
|
+
|
90
|
+
/// @dev releases the specified collateral in the bundle
|
91
|
+
/// may only be called by pool service
|
92
|
+
function releaseCollateral(
|
93
|
+
IInstance instance,
|
94
|
+
NftId policyNftId,
|
95
|
+
NftId bundleNftId,
|
96
|
+
Amount collateralAmount
|
97
|
+
) external;
|
98
|
+
|
99
|
+
/// @dev unlink policy from bundle
|
100
|
+
/// policy may only be unlinked if policy is closeable
|
101
|
+
/// may only be called by pool service
|
102
|
+
function unlinkPolicy(
|
103
|
+
IInstance instance,
|
104
|
+
NftId policyNftId
|
105
|
+
) external;
|
106
|
+
|
107
|
+
/// @dev updates the bundle's fees of with the provided fee amount
|
108
|
+
function updateBundleFees(
|
109
|
+
IInstance instance,
|
110
|
+
NftId bundleNftId,
|
111
|
+
Amount feeAmount
|
112
|
+
) external;
|
113
|
+
|
114
|
+
function increaseBalance(
|
115
|
+
IInstance instance,
|
116
|
+
NftId bundleNftId,
|
117
|
+
Amount amount) external;
|
118
|
+
}
|