@etherisc/gif-next 3.0.0-ce9c327-981 → 3.0.0-d1268ff-759
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 +12 -3
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +42 -56
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +32 -36
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +14 -20
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +44 -56
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +145 -100
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +42 -29
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +2 -96
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -94
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +157 -72
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +63 -63
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +0 -94
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +85 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +2 -2
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +12 -87
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +2 -2
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +47 -127
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +20 -20
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +2 -2
- package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +799 -0
- package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.json +229 -0
- package/artifacts/contracts/examples/flight/FlightNft.sol/FlightNft.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightNft.sol/FlightNft.json +801 -0
- package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +1278 -0
- package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +896 -0
- package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +1391 -0
- package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +844 -0
- package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +2214 -0
- package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +891 -0
- package/artifacts/contracts/examples/flight/FlightProductManager.sol/FlightProductManager.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightProductManager.sol/FlightProductManager.json +711 -0
- package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.json +586 -0
- package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.json +901 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +17 -111
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +2 -2
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +14 -89
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +18 -93
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +2 -2
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +20 -95
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +20 -20
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +1 -1
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.json +50 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +1 -1
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +50 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +61 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +5 -5
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +119 -131
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +236 -75
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +102 -25
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +29 -29
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +82 -32
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +1 -1
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +68 -18
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +2 -2
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +2 -2
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +2 -77
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -75
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -75
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +38 -38
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +0 -75
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +32 -20
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +50 -50
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +12 -0
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +0 -75
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +12 -0
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +0 -75
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +4 -9
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +36 -24
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +51 -51
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +32 -32
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -75
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +20 -20
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +55 -55
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +12 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -75
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +56 -44
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +20 -12
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +48 -48
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +39 -39
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +0 -75
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +2 -2
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +30 -30
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +6 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +47 -37
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +113 -125
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +2 -27
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +25 -25
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +123 -135
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +106 -96
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +19 -19
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +0 -75
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +311 -95
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +49 -49
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +2 -2
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.dbg.json +4 -0
- package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.json +558 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -75
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +255 -39
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -75
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -75
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +23 -50
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +9 -36
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +28 -28
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +25 -75
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +5 -205
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +73 -123
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +2 -7
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +41 -41
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +19 -219
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +28 -28
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +2 -7
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -7
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +2 -7
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -7
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +22 -25
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +4 -0
- package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.json +33 -0
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +2 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.json +21 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +2 -7
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/accounting/AccountingService.sol +17 -29
- package/contracts/accounting/IAccountingService.sol +7 -8
- package/contracts/authorization/AccessAdmin.sol +6 -25
- package/contracts/authorization/AccessAdminLib.sol +20 -3
- package/contracts/authorization/AccessManagerCloneable.sol +4 -0
- package/contracts/distribution/DistributionService.sol +5 -3
- package/contracts/distribution/IDistributionComponent.sol +0 -2
- package/contracts/distribution/IDistributionService.sol +4 -3
- package/contracts/examples/flight/FlightLib.sol +337 -0
- package/contracts/examples/flight/FlightMessageVerifier.sol +128 -0
- package/contracts/examples/flight/FlightNft.sol +234 -0
- package/contracts/examples/flight/FlightOracle.sol +226 -0
- package/contracts/examples/flight/FlightOracleAuthorization.sol +57 -0
- package/contracts/examples/flight/FlightPool.sol +89 -0
- package/contracts/examples/flight/FlightPoolAuthorization.sol +37 -0
- package/contracts/examples/flight/FlightProduct.sol +687 -0
- package/contracts/examples/flight/FlightProductAuthorization.sol +70 -0
- package/contracts/examples/flight/FlightProductManager.sol +49 -0
- package/contracts/examples/flight/FlightUSD.sol +28 -0
- package/contracts/examples/flight/originalV1.sol +396 -0
- package/contracts/instance/BaseStore.sol +4 -0
- package/contracts/instance/IBaseStore.sol +8 -0
- package/contracts/instance/IInstance.sol +1 -1
- package/contracts/instance/IInstanceService.sol +2 -0
- package/contracts/instance/Instance.sol +1 -1
- package/contracts/instance/InstanceAdmin.sol +0 -1
- package/contracts/instance/InstanceReader.sol +44 -8
- package/contracts/instance/InstanceService.sol +4 -0
- package/contracts/oracle/BasicOracle.sol +1 -0
- package/contracts/oracle/IOracleService.sol +12 -12
- package/contracts/oracle/Oracle.sol +2 -2
- package/contracts/pool/BundleService.sol +1 -1
- package/contracts/pool/IBundleService.sol +1 -1
- package/contracts/pool/IPoolService.sol +1 -1
- package/contracts/pool/PoolService.sol +1 -1
- package/contracts/product/BasicProductAuthorization.sol +3 -2
- package/contracts/product/IPolicyService.sol +1 -1
- package/contracts/product/PolicyService.sol +1 -1
- package/contracts/product/PolicyServiceLib.sol +5 -3
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +1 -1
- package/contracts/registry/Registry.sol +5 -3
- package/contracts/registry/RegistryAdmin.sol +7 -1
- package/contracts/registry/RegistryAuthorization.sol +0 -2
- package/contracts/registry/ReleaseAdmin.sol +8 -1
- package/contracts/shared/ComponentService.sol +36 -2
- package/contracts/shared/EcdsaChecker.sol +5 -0
- package/contracts/shared/IAuthorizedComponent.sol +15 -0
- package/contracts/shared/IComponent.sol +0 -4
- package/contracts/shared/IComponentService.sol +24 -2
- package/contracts/shared/IInstanceLinkedComponent.sol +2 -5
- package/contracts/shared/InstanceLinkedComponent.sol +60 -19
- package/contracts/staking/IStaking.sol +2 -0
- package/contracts/staking/IStakingService.sol +1 -10
- package/contracts/staking/Staking.sol +1 -0
- package/contracts/staking/StakingService.sol +1 -1
- package/contracts/type/ObjectType.sol +2 -31
- package/contracts/type/Referral.sol +6 -0
- package/contracts/type/RequestIdSet.sol +62 -0
- package/contracts/type/Seconds.sol +4 -0
- package/contracts/type/String.sol +30 -0
- package/contracts/type/Timestamp.sol +10 -1
- package/package.json +4 -3
@@ -34,6 +34,7 @@ import {RiskId} from "../type/RiskId.sol";
|
|
34
34
|
import {RiskSet} from "./RiskSet.sol";
|
35
35
|
import {RoleId, INSTANCE_OWNER_ROLE} from "../type/RoleId.sol";
|
36
36
|
import {StateId} from "../type/StateId.sol";
|
37
|
+
import {Str, StrLib} from "../type/String.sol";
|
37
38
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
38
39
|
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
39
40
|
|
@@ -163,7 +164,9 @@ contract InstanceReader {
|
|
163
164
|
|
164
165
|
|
165
166
|
/// @dev Returns the currently locked amount for the given NFT ID.
|
166
|
-
///
|
167
|
+
/// Locked amounts are only tracked for bundles, not for pool. To get the
|
168
|
+
/// pool locked amount, then locked amounts of the bundles contained in the
|
169
|
+
/// pool must be summed up. The target NFT ID may only a bundle.
|
167
170
|
function getLockedAmount(NftId targetNftId) external view returns (Amount) {
|
168
171
|
return _store.getLockedAmount(targetNftId);
|
169
172
|
}
|
@@ -177,8 +180,8 @@ contract InstanceReader {
|
|
177
180
|
|
178
181
|
|
179
182
|
/// @dev Returns th product NFT ID for the given index.
|
180
|
-
function
|
181
|
-
return _instance.
|
183
|
+
function getProduct(uint256 idx) public view returns (NftId productNftId) {
|
184
|
+
return _instance.getProduct(idx);
|
182
185
|
}
|
183
186
|
|
184
187
|
|
@@ -219,6 +222,12 @@ contract InstanceReader {
|
|
219
222
|
}
|
220
223
|
|
221
224
|
|
225
|
+
/// @dev Returns true if the specified risk exists for the given product NFT ID.
|
226
|
+
function isProductRisk(NftId productNftId, RiskId riskId) public view returns (bool exists) {
|
227
|
+
return _riskSet.hasRisk(productNftId, riskId);
|
228
|
+
}
|
229
|
+
|
230
|
+
|
222
231
|
/// @dev Returns the risk info for the given risk ID.
|
223
232
|
function getRiskInfo(RiskId riskId) public view returns (IRisk.RiskInfo memory info) {
|
224
233
|
return _productStore.getRiskInfo(riskId);
|
@@ -240,10 +249,21 @@ contract InstanceReader {
|
|
240
249
|
|
241
250
|
|
242
251
|
/// @dev Returns the linked policy NFT ID for the given risk ID and index.
|
243
|
-
function
|
252
|
+
function getPolicyForRisk(RiskId riskId, uint256 idx) public view returns (NftId linkedPolicyNftId) {
|
244
253
|
return _riskSet.getLinkedPolicyNftId(riskId, idx);
|
245
254
|
}
|
246
255
|
|
256
|
+
/// @dev Returns the number of linked policies for the given bundle NFT ID.
|
257
|
+
function policiesForBundle(NftId bundleNftId) public view returns (uint256 linkedPolicies) {
|
258
|
+
return _bundleSet.activePolicies(bundleNftId);
|
259
|
+
}
|
260
|
+
|
261
|
+
|
262
|
+
/// @dev Returns the linked policy NFT ID for the given risk ID and index.
|
263
|
+
function getPolicyForBundle(NftId bundleNftId, uint256 idx) public view returns (NftId linkedPolicyNftId) {
|
264
|
+
return _bundleSet.getActivePolicy(bundleNftId, idx);
|
265
|
+
}
|
266
|
+
|
247
267
|
|
248
268
|
/// @dev Returns the info for the given policy NFT ID.
|
249
269
|
function getPolicyInfo(NftId policyNftId) public view returns (IPolicy.PolicyInfo memory info) {
|
@@ -341,6 +361,11 @@ contract InstanceReader {
|
|
341
361
|
return _store.getRequestInfo(requestId);
|
342
362
|
}
|
343
363
|
|
364
|
+
/// @dev Returns the request info for the given oracle request ID.
|
365
|
+
function getRequestState(RequestId requestId) public view returns (StateId state) {
|
366
|
+
return getState(requestId.toKey32());
|
367
|
+
}
|
368
|
+
|
344
369
|
//--- pool functions -----------------------------------------------------------//
|
345
370
|
|
346
371
|
/// @dev Returns the pool info for the given pool NFT ID.
|
@@ -444,6 +469,12 @@ contract InstanceReader {
|
|
444
469
|
}
|
445
470
|
|
446
471
|
|
472
|
+
/// @dev Returns the role ID for the given index.
|
473
|
+
function getRoleForName(string memory name) public view returns (RoleId roleId, bool exists) {
|
474
|
+
return _instanceAdmin.getRoleForName(name);
|
475
|
+
}
|
476
|
+
|
477
|
+
|
447
478
|
/// @dev Returns the role ID for the instance owner role.
|
448
479
|
/// This role may be used as a "root" admin role for other custom roles defined for this instance.
|
449
480
|
function getInstanceOwnerRole() public pure returns (RoleId roleId) {
|
@@ -573,13 +604,18 @@ contract InstanceReader {
|
|
573
604
|
}
|
574
605
|
|
575
606
|
|
576
|
-
function
|
577
|
-
return UFixedLib.
|
607
|
+
function toInt(UFixed value) public pure returns (uint256) {
|
608
|
+
return UFixedLib.toInt(value);
|
578
609
|
}
|
579
610
|
|
580
611
|
|
581
|
-
function
|
582
|
-
return
|
612
|
+
function toString(Str str) public pure returns (string memory) {
|
613
|
+
return StrLib.toString(str);
|
614
|
+
}
|
615
|
+
|
616
|
+
|
617
|
+
function toUFixed(uint256 value, int8 exp) public pure returns (UFixed) {
|
618
|
+
return UFixedLib.toUFixed(value, exp);
|
583
619
|
}
|
584
620
|
|
585
621
|
//--- internal functions ----------------------------------------------------//
|
@@ -372,6 +372,10 @@ contract InstanceService is
|
|
372
372
|
IInstance masterInstance = IInstance(_masterInstance);
|
373
373
|
IRegistry.ObjectInfo memory info = _registryService.registerInstance(masterInstance, getOwner());
|
374
374
|
masterInstanceNftId = info.nftId;
|
375
|
+
|
376
|
+
emit LogInstanceServiceMasterInstanceRegistered(
|
377
|
+
masterInstanceNftId, _masterInstance, _masterInstanceAdmin, _masterAccessManager,
|
378
|
+
_masterInstanceReader, _masterInstanceBundleSet, _masterInstanceRiskSet, _masterInstanceStore, _masterProductStore);
|
375
379
|
}
|
376
380
|
}
|
377
381
|
|
@@ -41,26 +41,26 @@ interface IOracleService is IService {
|
|
41
41
|
string calldata callbackMethodName
|
42
42
|
) external returns (RequestId requestId);
|
43
43
|
|
44
|
-
/// @dev
|
45
|
-
///
|
46
|
-
///
|
44
|
+
/// @dev Respond to oracle request by oracle compnent.
|
45
|
+
/// The response data is amended in the request info stored with the instance.
|
46
|
+
/// The request state changes to FULFILLED (when calling the callback method of the requester is successful)
|
47
47
|
/// or to FAILED when calling the requester is not succesful.
|
48
|
-
///
|
49
|
-
///
|
48
|
+
/// The function returns true iff the state changes to FULFILLED.
|
49
|
+
/// Permissioned: only the receiving oracle component may call this method
|
50
50
|
function respond(
|
51
51
|
RequestId requestId,
|
52
52
|
bytes calldata responseData
|
53
53
|
) external returns (bool success);
|
54
54
|
|
55
|
-
/// @dev
|
56
|
-
///
|
57
|
-
///
|
58
|
-
///
|
55
|
+
/// @dev Resend a failed response to the requester.
|
56
|
+
/// Only requests in state FAILED may be resent.
|
57
|
+
/// The request state changes to FULFILLED when calling the callback method of the requester is successful.
|
58
|
+
/// Permissioned: only the receiving oracle may resend a request
|
59
59
|
function resend(RequestId requestId) external;
|
60
60
|
|
61
|
-
/// @dev
|
62
|
-
///
|
63
|
-
///
|
61
|
+
/// @dev Notify the oracle component that the specified request has become invalid.
|
62
|
+
/// Only requests in state ACTIVE may be cancelled.
|
63
|
+
/// Permissioned: only the requester may cancel a request
|
64
64
|
function cancel(RequestId requestId) external;
|
65
65
|
|
66
66
|
}
|
@@ -140,10 +140,10 @@ abstract contract Oracle is
|
|
140
140
|
internal
|
141
141
|
virtual
|
142
142
|
{
|
143
|
-
_getOracleStorage()._oracleService.respond(
|
144
|
-
requestId, responseData);
|
143
|
+
_getOracleStorage()._oracleService.respond(requestId, responseData);
|
145
144
|
}
|
146
145
|
|
146
|
+
|
147
147
|
function _getOracleStorage() private pure returns (OracleStorage storage $) {
|
148
148
|
assembly {
|
149
149
|
$.slot := ORACLE_STORAGE_LOCATION_V1
|
@@ -130,7 +130,7 @@ contract BundleService is
|
|
130
130
|
BundleSet bundleManager = instance.getBundleSet();
|
131
131
|
bundleManager.add(bundleNftId);
|
132
132
|
|
133
|
-
emit LogBundleServiceBundleCreated(bundleNftId, poolNftId, lifetime);
|
133
|
+
emit LogBundleServiceBundleCreated(bundleNftId, poolNftId, lifetime, bundleFee.fixedFee, bundleFee.fractionalFee);
|
134
134
|
}
|
135
135
|
|
136
136
|
|
@@ -30,7 +30,7 @@ interface IBundleService is IService {
|
|
30
30
|
|
31
31
|
error ErrorBundleServiceExtensionLifetimeIsZero();
|
32
32
|
|
33
|
-
event LogBundleServiceBundleCreated(NftId bundleNftId, NftId poolNftId, Seconds lifetime);
|
33
|
+
event LogBundleServiceBundleCreated(NftId bundleNftId, NftId poolNftId, Seconds lifetime, Amount fixedFee, UFixed fractionalFee);
|
34
34
|
event LogBundleServiceBundleClosed(NftId bundleNftId);
|
35
35
|
event LogBundleServiceBundleLocked(NftId bundleNftId);
|
36
36
|
event LogBundleServiceBundleUnlocked(NftId bundleNftId);
|
@@ -19,7 +19,7 @@ interface IPoolService is IService {
|
|
19
19
|
event LogPoolServiceWalletDefunded(NftId poolNftId, address poolOwner, Amount amount);
|
20
20
|
|
21
21
|
event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
|
22
|
-
event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
|
22
|
+
event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount balanceAmount, Amount feeAmount);
|
23
23
|
|
24
24
|
event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
|
25
25
|
event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
|
@@ -98,7 +98,7 @@ contract PoolService is
|
|
98
98
|
unstakedAmount + feeAmount,
|
99
99
|
AmountLib.zero());
|
100
100
|
|
101
|
-
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
|
101
|
+
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount, feeAmount);
|
102
102
|
|
103
103
|
if ((unstakedAmount + feeAmount).gtz()){
|
104
104
|
IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
|
@@ -7,7 +7,7 @@ import {IProductComponent} from "./IProductComponent.sol";
|
|
7
7
|
|
8
8
|
import {Authorization} from "../authorization/Authorization.sol";
|
9
9
|
import {BasicProduct} from "./BasicProduct.sol";
|
10
|
-
import {COMPONENT, PRODUCT, POLICY} from "../type/ObjectType.sol";
|
10
|
+
import {COMPONENT, ORACLE, PRODUCT, POLICY} from "../type/ObjectType.sol";
|
11
11
|
import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
|
12
12
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
13
13
|
|
@@ -30,7 +30,8 @@ contract BasicProductAuthorization
|
|
30
30
|
virtual override
|
31
31
|
{
|
32
32
|
_authorizeServiceDomain(COMPONENT(), address(10));
|
33
|
-
_authorizeServiceDomain(
|
33
|
+
_authorizeServiceDomain(ORACLE(), address(11));
|
34
|
+
_authorizeServiceDomain(POLICY(), address(12));
|
34
35
|
}
|
35
36
|
|
36
37
|
function _setupTokenHandlerAuthorizations() internal virtual override {
|
@@ -13,7 +13,7 @@ interface IPolicyService is IService {
|
|
13
13
|
|
14
14
|
event LogPolicyServicePolicyCreated(NftId policyNftId, Amount premiumAmount, Timestamp activatedAt);
|
15
15
|
event LogPolicyServicePolicyDeclined(NftId policyNftId);
|
16
|
-
event LogPolicyServicePolicyPremiumCollected(NftId policyNftId, Amount premiumAmount);
|
16
|
+
event LogPolicyServicePolicyPremiumCollected(NftId policyNftId, NftId productNftId, Amount premiumAmount, Timestamp activateAt);
|
17
17
|
event LogPolicyServicePolicyActivated(NftId policyNftId, Timestamp activatedAt);
|
18
18
|
event LogPolicyServicePolicyActivatedUpdated(NftId policyNftId, Timestamp activatedAt);
|
19
19
|
event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
|
@@ -247,7 +247,7 @@ contract PolicyService is
|
|
247
247
|
instance.getProductStore().updatePremiumState(policyNftId, PAID());
|
248
248
|
|
249
249
|
// log premium collection before interactions with token
|
250
|
-
emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
|
250
|
+
emit LogPolicyServicePolicyPremiumCollected(policyNftId, policyInfo.productNftId, premium.premiumAmount, activateAt);
|
251
251
|
|
252
252
|
// interactions
|
253
253
|
_transferPremiumAmounts(instanceReader, policyNftId, policyInfo.productNftId, premium);
|
@@ -95,13 +95,14 @@ library PolicyServiceLib {
|
|
95
95
|
{
|
96
96
|
if (policyState != COLLATERALIZED()) {
|
97
97
|
revert IPolicyService.ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
|
98
|
-
}
|
99
|
-
|
98
|
+
}
|
99
|
+
|
100
|
+
if (policyInfo.activatedAt.eqz() || TimestampLib.current() < policyInfo.activatedAt) {
|
100
101
|
revert IPolicyService.ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
|
101
102
|
}
|
102
103
|
|
103
104
|
// check expiredAt represents a valid expiry time
|
104
|
-
if (newExpiredAt
|
105
|
+
if (newExpiredAt > policyInfo.expiredAt) {
|
105
106
|
revert IPolicyService.ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, newExpiredAt);
|
106
107
|
}
|
107
108
|
|
@@ -110,6 +111,7 @@ library PolicyServiceLib {
|
|
110
111
|
}
|
111
112
|
}
|
112
113
|
|
114
|
+
|
113
115
|
function policyIsCloseable(InstanceReader instanceReader, NftId policyNftId)
|
114
116
|
external
|
115
117
|
view
|
@@ -11,7 +11,7 @@ contract ChainNft is ERC721Enumerable {
|
|
11
11
|
event LogTokenInterceptorAddress(uint256 tokenId, address interceptor);
|
12
12
|
|
13
13
|
// constants
|
14
|
-
string public constant NAME = "
|
14
|
+
string public constant NAME = "Decentralized Insurance Protocol NFT";
|
15
15
|
string public constant SYMBOL = "DIPNFT";
|
16
16
|
|
17
17
|
uint256 public constant PROTOCOL_NFT_ID = 1101;
|
@@ -20,7 +20,7 @@ interface IRegistry is
|
|
20
20
|
{
|
21
21
|
|
22
22
|
event LogRegistryObjectRegistered(NftId nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
|
23
|
-
event LogRegistryServiceRegistered(VersionPart majorVersion, ObjectType domain);
|
23
|
+
event LogRegistryServiceRegistered(NftId nftId, VersionPart majorVersion, ObjectType domain);
|
24
24
|
event LogRegistryChainRegistryRegistered(NftId nftId, uint256 chainId, address chainRegistryAddress);
|
25
25
|
|
26
26
|
// initialize
|
@@ -2,7 +2,6 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
-
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
5
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
7
6
|
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
|
8
7
|
|
@@ -16,7 +15,6 @@ import {IRelease} from "./IRelease.sol";
|
|
16
15
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
17
16
|
import {IStaking} from "../staking/IStaking.sol";
|
18
17
|
import {ReleaseRegistry} from "./ReleaseRegistry.sol";
|
19
|
-
import {TokenRegistry} from "./TokenRegistry.sol";
|
20
18
|
import {RegistryAdmin} from "./RegistryAdmin.sol";
|
21
19
|
|
22
20
|
/// @dev IMPORTANT
|
@@ -231,7 +229,7 @@ contract Registry is
|
|
231
229
|
|
232
230
|
_service[version][domain] = service;
|
233
231
|
|
234
|
-
emit LogRegistryServiceRegistered(version, domain);
|
232
|
+
emit LogRegistryServiceRegistered(info.nftId,version, domain);
|
235
233
|
|
236
234
|
nftId = _register(info);
|
237
235
|
}
|
@@ -566,6 +564,8 @@ contract Registry is
|
|
566
564
|
initialOwner: NFT_LOCK_ADDRESS,
|
567
565
|
data: ""}),
|
568
566
|
true);
|
567
|
+
|
568
|
+
emit LogRegistryObjectRegistered(protocolNftId, NftIdLib.zero(), PROTOCOL(), false, address(0), NFT_LOCK_ADDRESS);
|
569
569
|
}
|
570
570
|
|
571
571
|
/// @dev register this registry
|
@@ -671,6 +671,8 @@ contract Registry is
|
|
671
671
|
|
672
672
|
// calls nft receiver
|
673
673
|
CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
|
674
|
+
|
675
|
+
emit LogRegistryObjectRegistered(info.nftId, info.parentNftId, info.objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
674
676
|
}
|
675
677
|
|
676
678
|
function _setAddressForNftId(NftId nftId, address objectAddress)
|
@@ -85,7 +85,13 @@ contract RegistryAdmin is
|
|
85
85
|
registry,
|
86
86
|
release);
|
87
87
|
|
88
|
-
|
88
|
+
AccessAdminLib.checkAuthorization(
|
89
|
+
address(_authorization),
|
90
|
+
authorization,
|
91
|
+
REGISTRY(),
|
92
|
+
release,
|
93
|
+
false, // expectServiceAuthorization
|
94
|
+
false); // checkAlreadyInitialized);
|
89
95
|
|
90
96
|
_registry = registry;
|
91
97
|
_authorization = IAuthorization(authorization);
|
@@ -144,8 +144,6 @@ contract RegistryAuthorization
|
|
144
144
|
_setupStakingThAuthorization();
|
145
145
|
}
|
146
146
|
|
147
|
-
event LogAccessAdminDebug(string message, string custom, uint256 value);
|
148
|
-
|
149
147
|
function _setupRegistryAuthorization() internal {
|
150
148
|
IAccess.FunctionInfo[] storage functions;
|
151
149
|
|
@@ -72,7 +72,14 @@ contract ReleaseAdmin is
|
|
72
72
|
release);
|
73
73
|
|
74
74
|
IServiceAuthorization serviceAuthorization = IServiceAuthorization(authorization);
|
75
|
-
|
75
|
+
AccessAdminLib.checkAuthorization(
|
76
|
+
address(_authorization),
|
77
|
+
address(serviceAuthorization),
|
78
|
+
RELEASE(),
|
79
|
+
release,
|
80
|
+
true, // expectServiceAuthorization
|
81
|
+
true); // checkAlreadyInitialized);
|
82
|
+
|
76
83
|
_serviceAuthorization = serviceAuthorization;
|
77
84
|
|
78
85
|
// link nft ownability to registry
|
@@ -312,9 +312,27 @@ contract ComponentService is
|
|
312
312
|
productNftId,
|
313
313
|
initialProductInfo);
|
314
314
|
|
315
|
+
emit LogComponentServiceProductCreated(productNftId, productAddress, initialProductInfo.hasDistribution, initialProductInfo.expectedNumberOfOracles);
|
316
|
+
|
317
|
+
IComponents.FeeInfo memory initialFeeInfo = product.getInitialFeeInfo();
|
318
|
+
|
315
319
|
productStore.createFee(
|
316
320
|
productNftId,
|
317
|
-
|
321
|
+
initialFeeInfo);
|
322
|
+
|
323
|
+
emit LogComponentServiceProductInitialProductFeesSet(
|
324
|
+
productNftId,
|
325
|
+
initialFeeInfo.productFee.fixedFee, initialFeeInfo.productFee.fractionalFee,
|
326
|
+
initialFeeInfo.processingFee.fixedFee, initialFeeInfo.processingFee.fractionalFee);
|
327
|
+
emit LogComponentServiceProductInitialDistributionFeesSet(
|
328
|
+
productNftId,
|
329
|
+
initialFeeInfo.distributionFee.fixedFee, initialFeeInfo.distributionFee.fractionalFee,
|
330
|
+
initialFeeInfo.minDistributionOwnerFee.fixedFee, initialFeeInfo.minDistributionOwnerFee.fractionalFee);
|
331
|
+
emit LogComponentServiceProductInitialPoolFeesSet(
|
332
|
+
productNftId,
|
333
|
+
initialFeeInfo.poolFee.fixedFee, initialFeeInfo.poolFee.fractionalFee,
|
334
|
+
initialFeeInfo.stakingFee.fixedFee, initialFeeInfo.stakingFee.fractionalFee,
|
335
|
+
initialFeeInfo.performanceFee.fixedFee, initialFeeInfo.performanceFee.fractionalFee);
|
318
336
|
}
|
319
337
|
|
320
338
|
//-------- distribution -------------------------------------------------//
|
@@ -341,6 +359,8 @@ contract ComponentService is
|
|
341
359
|
// set distribution in product info
|
342
360
|
productInfo.distributionNftId = distributionNftId;
|
343
361
|
productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
362
|
+
|
363
|
+
emit LogComponentServiceDistributionCreated(distributionNftId, productNftId);
|
344
364
|
}
|
345
365
|
|
346
366
|
|
@@ -400,6 +420,8 @@ contract ComponentService is
|
|
400
420
|
productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
|
401
421
|
productInfo.numberOfOracles++;
|
402
422
|
productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
423
|
+
|
424
|
+
emit LogComponentServiceOracleCreated(oracleNftId, productNftId);
|
403
425
|
}
|
404
426
|
|
405
427
|
//-------- pool ---------------------------------------------------------//
|
@@ -423,13 +445,20 @@ contract ComponentService is
|
|
423
445
|
|
424
446
|
// create info
|
425
447
|
IPoolComponent pool = IPoolComponent(componentAddress);
|
448
|
+
IComponents.PoolInfo memory initialPoolInfo = pool.getInitialPoolInfo();
|
426
449
|
instanceStore.createPool(
|
427
450
|
poolNftId,
|
428
|
-
|
451
|
+
initialPoolInfo);
|
429
452
|
|
430
453
|
// update pool in product info
|
431
454
|
productInfo.poolNftId = poolNftId;
|
432
455
|
productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
456
|
+
|
457
|
+
emit LogComponentServicePoolCreated(
|
458
|
+
poolNftId, productNftId, componentAddress,
|
459
|
+
initialPoolInfo.maxBalanceAmount, initialPoolInfo.collateralizationLevel,
|
460
|
+
initialPoolInfo.retentionLevel, initialPoolInfo.isExternallyManaged,
|
461
|
+
initialPoolInfo.isVerifyingApplications);
|
433
462
|
}
|
434
463
|
|
435
464
|
|
@@ -543,6 +572,11 @@ contract ComponentService is
|
|
543
572
|
address(component), // initially, component is its own wallet
|
544
573
|
token,
|
545
574
|
instanceAdmin.authority());
|
575
|
+
|
576
|
+
emit LogComponentServiceTokenHandlerDeployed(
|
577
|
+
componentNftId,
|
578
|
+
address(componentInfo.tokenHandler),
|
579
|
+
token);
|
546
580
|
|
547
581
|
// register component with instance
|
548
582
|
instanceStore.createComponent(
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IComponent} from "../shared/IComponent.sol";
|
5
|
+
import {IAuthorization} from "../authorization/IAuthorization.sol";
|
6
|
+
|
7
|
+
/// @dev component base class
|
8
|
+
/// component examples are product, distribution, pool and oracle
|
9
|
+
interface IAuthorizedComponent is
|
10
|
+
IComponent
|
11
|
+
{
|
12
|
+
/// @dev returns the initial component authorization specification.
|
13
|
+
function getAuthorization() external view returns (IAuthorization authorization);
|
14
|
+
|
15
|
+
}
|
@@ -25,10 +25,6 @@ interface IComponent is
|
|
25
25
|
error ErrorComponentWalletAddressIsSameAsCurrent();
|
26
26
|
error ErrorComponentWalletNotComponent();
|
27
27
|
|
28
|
-
event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
|
29
|
-
event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
|
30
|
-
event LogComponentTokenHandlerApproved(address tokenHandler, address token, Amount limit, bool isMaxAmount);
|
31
|
-
|
32
28
|
/// @dev returns the name of this component
|
33
29
|
/// to successfully register the component with an instance the name MUST be unique in the linked instance
|
34
30
|
function getName() external view returns (string memory name);
|
@@ -46,9 +46,8 @@ interface IComponentService is
|
|
46
46
|
error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
|
47
47
|
|
48
48
|
event LogComponentServiceComponentLocked(address component, bool locked);
|
49
|
+
event LogComponentServiceTokenHandlerDeployed(NftId componentNftId, address tokenHandler, address token);
|
49
50
|
event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
|
50
|
-
event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
|
51
|
-
event LogComponentServiceWalletTokensTransferred(NftId componentNftId, address currentWallet, address newWallet, uint256 currentBalance);
|
52
51
|
event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
|
53
52
|
event LogComponentServiceProductFeesUpdated(NftId productNftId);
|
54
53
|
event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
|
@@ -61,6 +60,29 @@ interface IComponentService is
|
|
61
60
|
UFixed newFractionalFee,
|
62
61
|
Amount newFixedFee
|
63
62
|
);
|
63
|
+
event LogComponentServiceProductCreated(
|
64
|
+
NftId indexed productNftId, address indexed productAddress, bool indexed hasDistribution, uint8 expectedNumberOfOracles);
|
65
|
+
event LogComponentServiceProductInitialProductFeesSet(
|
66
|
+
NftId indexed productNftId,
|
67
|
+
Amount indexed productFeeFixed, UFixed indexed productFeeFractional,
|
68
|
+
Amount processingFeeFixed, UFixed processingFeeFractional);
|
69
|
+
event LogComponentServiceProductInitialDistributionFeesSet(
|
70
|
+
NftId indexed productNftId,
|
71
|
+
Amount indexed distributionFeeFixed, UFixed indexed distributionFeeFractional,
|
72
|
+
Amount minDistributionOwnerFeeFixed, UFixed minDistributionOwnerFeeFractional);
|
73
|
+
event LogComponentServiceProductInitialPoolFeesSet(
|
74
|
+
NftId indexed productNftId,
|
75
|
+
Amount indexed poolFeeFixed, UFixed indexed poolFeeFractional,
|
76
|
+
Amount stakingFeeFixed, UFixed stakingFeeFractional,
|
77
|
+
Amount performanceFeeFixed, UFixed performanceFeeFractional);
|
78
|
+
event LogComponentServicePoolCreated(
|
79
|
+
NftId indexed poolNftId, NftId indexed productNftId, address indexed componentAddress,
|
80
|
+
Amount maxBalanceAmount, UFixed collateralizationLevel, UFixed retentionLevel,
|
81
|
+
bool isExternallyManaged, bool isVerifyingApplications);
|
82
|
+
event LogComponentServiceDistributionCreated(
|
83
|
+
NftId indexed distributionNftId, NftId indexed productNftId);
|
84
|
+
event LogComponentServiceOracleCreated(
|
85
|
+
NftId indexed oracleNftId, NftId indexed productNftId);
|
64
86
|
|
65
87
|
//-------- component ----------------------------------------------------//
|
66
88
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Amount} from "../type/Amount.sol";
|
5
|
-
import {
|
5
|
+
import {IAuthorizedComponent} from "../shared/IAuthorizedComponent.sol";
|
6
6
|
import {IAuthorization} from "../authorization/IAuthorization.sol";
|
7
7
|
import {IInstance} from "../instance/IInstance.sol";
|
8
8
|
import {NftId} from "../type/NftId.sol";
|
@@ -11,7 +11,7 @@ import {ObjectType} from "../type/ObjectType.sol";
|
|
11
11
|
/// @dev component base class
|
12
12
|
/// component examples are product, distribution, pool and oracle
|
13
13
|
interface IInstanceLinkedComponent is
|
14
|
-
|
14
|
+
IAuthorizedComponent
|
15
15
|
{
|
16
16
|
error ErrorInstanceLinkedComponentTypeMismatch(ObjectType requiredType, ObjectType objectType);
|
17
17
|
error ErrorInstanceLinkedComponentNotProduct(NftId nftId, ObjectType objectType);
|
@@ -24,7 +24,4 @@ interface IInstanceLinkedComponent is
|
|
24
24
|
/// @dev defines the instance to which this component is linked to
|
25
25
|
function getInstance() external view returns (IInstance instance);
|
26
26
|
|
27
|
-
/// @dev returns the initial component authorization specification.
|
28
|
-
function getAuthorization() external view returns (IAuthorization authorization);
|
29
|
-
|
30
27
|
}
|