@etherisc/gif-next 3.0.0-d6ff88d-936 → 3.0.0-db9ffbc-172
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 +9 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +2 -2
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +2 -2
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
- 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/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 -2
- 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/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +2 -2
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +251 -56
- package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +162 -28
- package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +82 -35
- package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +2 -2
- package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +2 -2
- package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +370 -654
- package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +83 -36
- 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 +1 -1
- package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +2 -2
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +102 -114
- 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 +93 -34
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2 -2
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +1 -1
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +2 -2
- 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/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +2 -2
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/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 +2 -2
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +2 -2
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- 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 +2 -2
- 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 +2 -2
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/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 +2 -2
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/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 +2 -2
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +101 -113
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +110 -122
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +56 -62
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +2 -2
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +2 -2
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- 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 +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/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/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- 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/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/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 +2 -2
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +2 -2
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +2 -2
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +6 -25
- package/contracts/authorization/AccessAdminLib.sol +18 -1
- package/contracts/examples/flight/FlightLib.sol +90 -75
- package/contracts/examples/flight/FlightOracle.sol +41 -2
- package/contracts/examples/flight/FlightOracleAuthorization.sol +24 -5
- package/contracts/examples/flight/FlightProduct.sol +279 -246
- package/contracts/examples/flight/FlightProductAuthorization.sol +35 -10
- package/contracts/examples/flight/FlightProductManager.sol +49 -0
- package/contracts/instance/InstanceAdmin.sol +0 -1
- package/contracts/instance/InstanceReader.sol +16 -4
- package/contracts/oracle/BasicOracle.sol +1 -0
- package/contracts/oracle/Oracle.sol +2 -2
- package/contracts/product/PolicyServiceLib.sol +5 -3
- package/contracts/registry/RegistryAdmin.sol +7 -1
- package/contracts/registry/ReleaseAdmin.sol +8 -1
- package/package.json +1 -1
@@ -6,10 +6,11 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
|
|
6
6
|
|
7
7
|
import {IAuthorization} from "../../authorization/IAuthorization.sol";
|
8
8
|
import {IComponents} from "../../instance/module/IComponents.sol";
|
9
|
+
import {IPolicy} from "../../instance/module/IPolicy.sol";
|
9
10
|
|
10
11
|
import {Amount, AmountLib} from "../../type/Amount.sol";
|
11
|
-
import {BasicProduct} from "../../product/BasicProduct.sol";
|
12
12
|
import {ClaimId} from "../../type/ClaimId.sol";
|
13
|
+
import {Component} from "../../shared/Component.sol";
|
13
14
|
import {FeeLib} from "../../type/Fee.sol";
|
14
15
|
import {FlightLib} from "./FlightLib.sol";
|
15
16
|
import {FlightMessageVerifier} from "./FlightMessageVerifier.sol";
|
@@ -17,109 +18,88 @@ import {FlightOracle} from "./FlightOracle.sol";
|
|
17
18
|
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
18
19
|
import {NftId, NftIdLib} from "../../type/NftId.sol";
|
19
20
|
import {PayoutId} from "../../type/PayoutId.sol";
|
21
|
+
import {Product} from "../../product/Product.sol";
|
20
22
|
import {ReferralLib} from "../../type/Referral.sol";
|
21
23
|
import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
|
22
24
|
import {RequestId} from "../../type/RequestId.sol";
|
23
25
|
import {Seconds, SecondsLib} from "../../type/Seconds.sol";
|
24
|
-
import {Str} from "../../type/String.sol";
|
26
|
+
import {Str, StrLib} from "../../type/String.sol";
|
25
27
|
import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
|
26
28
|
|
27
29
|
|
28
30
|
/// @dev FlightProduct implements the flight delay product.
|
29
31
|
contract FlightProduct is
|
30
|
-
|
32
|
+
Product
|
31
33
|
{
|
32
34
|
|
33
|
-
event
|
34
|
-
event
|
35
|
-
event LogPayoutTransferred(bytes32 bpKey, uint256 claimId, uint256 payoutId, uint256 amount);
|
36
|
-
event LogFlightStatusProcessed(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes, uint8 payoutOption);
|
37
|
-
|
38
|
-
// TODO convert error logs to custom errors
|
39
|
-
event LogError(string error, uint256 index, uint256 stored, uint256 calculated);
|
40
|
-
event LogPolicyExpired(bytes32 bpKey);
|
35
|
+
event LogFlightPolicyPurchased(NftId policyNftId, string flightData, Amount premiumAmount);
|
36
|
+
event LogFlightPolicyClosed(NftId policyNftId, Amount payoutAmount);
|
41
37
|
|
42
|
-
event
|
43
|
-
event
|
44
|
-
event LogErrorUnexpectedStatus(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes);
|
45
|
-
|
46
|
-
error ErrorApplicationDataSignatureMismatch(address expectedSigner, address actualSigner);
|
47
|
-
error ErrorFlightProductClusterRisk(Amount totalSumInsured, Amount maxTotalPayout);
|
48
|
-
error ErrorFlightProductPremiumAmountTooSmall(Amount premiumAmount, Amount minPremium);
|
49
|
-
error ErrorFlightProductPremiumAmountTooLarge(Amount premiumAmount, Amount maxPremium);
|
50
|
-
error ErrorFlightProductArrivalBeforeDepartureTime(Timestamp departureTime, Timestamp arrivalTime);
|
51
|
-
error ErrorFlightProductArrivalAfterMaxFlightDuration(Timestamp arrivalTime, Timestamp maxArrivalTime, Seconds maxDuration);
|
52
|
-
error ErrorFlightProductDepartureBeforeMinTimeBeforeDeparture(Timestamp departureTime, Timestamp now, Seconds minTimeBeforeDeparture);
|
53
|
-
error ErrorFlightProductDepartureAfterMaxTimeBeforeDeparture(Timestamp departureTime, Timestamp now, Seconds maxTimeBeforeDeparture);
|
54
|
-
error ErrorFlightProductNotEnoughObservations(uint256 observations, uint256 minObservations);
|
38
|
+
event LogFlightStatusProcessed(RequestId requestId, RiskId riskId, bytes1 status, int256 delayMinutes, uint8 payoutOption);
|
39
|
+
event LogFlightPoliciesProcessed(RiskId riskId, uint8 payoutOption, uint256 policiesProcessed, uint256 policiesRemaining);
|
55
40
|
|
56
41
|
// solhint-disable
|
57
|
-
|
58
|
-
|
42
|
+
Amount public MIN_PREMIUM;
|
43
|
+
Amount public MAX_PREMIUM;
|
44
|
+
Amount public MAX_PAYOUT;
|
45
|
+
Amount public MAX_TOTAL_PAYOUT; // Maximum risk per flight/risk
|
46
|
+
|
59
47
|
// Minimum time before departure for applying
|
60
|
-
Seconds public MIN_TIME_BEFORE_DEPARTURE
|
48
|
+
Seconds public MIN_TIME_BEFORE_DEPARTURE;
|
61
49
|
// Maximum time before departure for applying
|
62
|
-
Seconds public MAX_TIME_BEFORE_DEPARTURE
|
50
|
+
Seconds public MAX_TIME_BEFORE_DEPARTURE;
|
63
51
|
// Maximum duration of flight
|
64
|
-
Seconds public MAX_FLIGHT_DURATION
|
65
|
-
// Check for delay after .. minutes after scheduled arrival
|
66
|
-
Seconds public CHECK_OFFSET = SecondsLib.fromHours(1);
|
52
|
+
Seconds public MAX_FLIGHT_DURATION;
|
67
53
|
// Max time to process claims after departure
|
68
|
-
Seconds public LIFETIME
|
69
|
-
|
70
|
-
// uint256 public constant MIN_PREMIUM = 15 * 10 ** 18; // production
|
71
|
-
// All amounts in cent = multiplier is 10 ** 16!
|
72
|
-
Amount public MIN_PREMIUM;
|
73
|
-
Amount public MAX_PREMIUM;
|
74
|
-
Amount public MAX_PAYOUT;
|
75
|
-
Amount public MAX_TOTAL_PAYOUT; // Maximum risk per flight is 3x max payout.
|
54
|
+
Seconds public LIFETIME;
|
76
55
|
|
56
|
+
// ['observations','late15','late30','late45','cancelled','diverted']
|
57
|
+
// no payouts for delays of 30' or less
|
58
|
+
uint8[6] public WEIGHT_PATTERN;
|
59
|
+
// Minimum number of observations for valid prediction/premium calculation
|
60
|
+
uint256 public MIN_OBSERVATIONS;
|
77
61
|
// Maximum cumulated weighted premium per risk
|
78
|
-
uint256 public MARGIN_PERCENT
|
79
|
-
|
62
|
+
uint256 public MARGIN_PERCENT;
|
80
63
|
// Maximum number of policies to process in one callback
|
81
|
-
uint8 public MAX_POLICIES_TO_PROCESS
|
64
|
+
uint8 public MAX_POLICIES_TO_PROCESS;
|
65
|
+
// solhint-enable
|
82
66
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
uint8 public constant MAX_WEIGHT = 50;
|
67
|
+
bool internal _testMode;
|
68
|
+
|
69
|
+
mapping(RiskId riskId => RequestId requestId) internal _requests;
|
87
70
|
|
88
71
|
// GIF V3 specifics
|
89
72
|
NftId internal _defaultBundleNftId;
|
90
|
-
|
91
|
-
// TODO add product (base contract) functions
|
92
|
-
// - getOracleNftId(idx)
|
93
|
-
// - getDistributionNftId()
|
94
|
-
// - getPoolNftId()
|
95
|
-
NftId internal _oracleNftId; // TODO refactor to getOracleNftId(0)
|
96
|
-
// solhint-enable
|
97
|
-
|
98
|
-
FlightMessageVerifier internal _flightMessageVerifier;
|
73
|
+
NftId internal _oracleNftId;
|
99
74
|
|
100
75
|
|
101
76
|
struct FlightRisk {
|
102
77
|
Str flightData; // example: "LX 180 ZRH BKK 20241104"
|
103
78
|
Timestamp departureTime;
|
79
|
+
// this field contains static data required by the frontend and is not directly used by the product
|
80
|
+
string departureTimeLocal; // example "2024-10-14T10:10:00.000 Asia/Seoul"
|
104
81
|
Timestamp arrivalTime;
|
82
|
+
// this field contains static data required by the frontend and is not directly used by the product
|
83
|
+
string arrivalTimeLocal; // example "2024-10-14T10:10:00.000 Asia/Seoul"
|
105
84
|
Amount sumOfSumInsuredAmounts;
|
106
|
-
// uint256 premiumMultiplier; // what is this? UFixed?
|
107
|
-
// uint256 weight; // what is this? UFixed?
|
108
85
|
bytes1 status; // 'L'ate, 'C'ancelled, 'D'iverted, ...
|
109
86
|
int256 delayMinutes;
|
87
|
+
uint8 payoutOption;
|
88
|
+
Timestamp statusUpdatedAt;
|
110
89
|
}
|
111
90
|
|
91
|
+
|
112
92
|
struct ApplicationData {
|
113
|
-
|
93
|
+
string flightData;
|
114
94
|
Timestamp departureTime;
|
95
|
+
string departureTimeLocal;
|
115
96
|
Timestamp arrivalTime;
|
97
|
+
string arrivalTimeLocal;
|
116
98
|
Amount premiumAmount;
|
117
99
|
uint256[6] statistics;
|
118
|
-
uint8 v;
|
119
|
-
bytes32 r;
|
120
|
-
bytes32 s;
|
121
100
|
}
|
122
101
|
|
102
|
+
|
123
103
|
struct PermitData {
|
124
104
|
address owner;
|
125
105
|
address spender;
|
@@ -133,24 +113,22 @@ contract FlightProduct is
|
|
133
113
|
|
134
114
|
constructor(
|
135
115
|
address registry,
|
136
|
-
NftId
|
116
|
+
NftId instanceNftId,
|
137
117
|
string memory componentName,
|
138
|
-
IAuthorization authorization
|
139
|
-
FlightMessageVerifier messageVerifier
|
118
|
+
IAuthorization authorization
|
140
119
|
)
|
141
120
|
{
|
142
121
|
address initialOwner = msg.sender;
|
143
122
|
|
144
123
|
_initialize(
|
145
124
|
registry,
|
146
|
-
|
125
|
+
instanceNftId,
|
147
126
|
componentName,
|
148
127
|
authorization,
|
149
128
|
initialOwner);
|
150
|
-
|
151
|
-
_flightMessageVerifier = messageVerifier;
|
152
129
|
}
|
153
130
|
|
131
|
+
|
154
132
|
//--- external functions ------------------------------------------------//
|
155
133
|
//--- unpermissioned functions ------------------------------------------//
|
156
134
|
|
@@ -161,6 +139,7 @@ contract FlightProduct is
|
|
161
139
|
getNftId()).oracleNftId[0];
|
162
140
|
}
|
163
141
|
|
142
|
+
|
164
143
|
function calculatePayoutAmounts(
|
165
144
|
FlightProduct flightProduct,
|
166
145
|
Amount premium,
|
@@ -197,30 +176,156 @@ contract FlightProduct is
|
|
197
176
|
)
|
198
177
|
{
|
199
178
|
// process permit data
|
200
|
-
|
179
|
+
_processPermit(permit);
|
201
180
|
|
202
181
|
// create policy
|
203
182
|
address policyHolder = permit.owner;
|
204
183
|
(
|
205
184
|
riskId,
|
206
185
|
policyNftId
|
207
|
-
) =
|
186
|
+
) = _createPolicy(
|
208
187
|
policyHolder,
|
209
|
-
application.flightData,
|
188
|
+
StrLib.toStr(application.flightData),
|
210
189
|
application.departureTime,
|
190
|
+
application.departureTimeLocal,
|
211
191
|
application.arrivalTime,
|
192
|
+
application.arrivalTimeLocal,
|
212
193
|
application.premiumAmount,
|
213
194
|
application.statistics);
|
214
|
-
// application.v,
|
215
|
-
// application.r,
|
216
|
-
// application.s);
|
217
195
|
}
|
218
196
|
|
219
197
|
|
220
|
-
|
221
|
-
|
198
|
+
/// @dev Callback for flight status oracle.
|
199
|
+
/// Function may only be alled by oracle service.
|
200
|
+
function flightStatusCallback(
|
201
|
+
RequestId requestId,
|
202
|
+
bytes memory responseData
|
203
|
+
)
|
204
|
+
external
|
205
|
+
virtual
|
206
|
+
restricted()
|
207
|
+
{
|
208
|
+
FlightOracle.FlightStatusResponse memory response = abi.decode(
|
209
|
+
responseData, (FlightOracle.FlightStatusResponse));
|
210
|
+
|
211
|
+
_processFlightStatus(
|
212
|
+
requestId,
|
213
|
+
response.riskId,
|
214
|
+
response.status,
|
215
|
+
response.delayMinutes);
|
216
|
+
}
|
217
|
+
|
218
|
+
|
219
|
+
function resendRequest(RequestId requestId)
|
220
|
+
external
|
221
|
+
virtual
|
222
|
+
restricted()
|
223
|
+
{
|
224
|
+
_resendRequest(requestId);
|
225
|
+
}
|
226
|
+
|
227
|
+
|
228
|
+
/// @dev Manual fallback function for product owner.
|
229
|
+
function processPayoutsAndClosePolicies(
|
230
|
+
RiskId riskId,
|
231
|
+
uint8 maxPoliciesToProcess
|
232
|
+
)
|
233
|
+
external
|
234
|
+
virtual
|
235
|
+
restricted()
|
236
|
+
onlyOwner()
|
237
|
+
{
|
238
|
+
_processPayoutsAndClosePolicies(
|
239
|
+
riskId,
|
240
|
+
maxPoliciesToProcess);
|
241
|
+
}
|
242
|
+
|
243
|
+
|
244
|
+
//--- owner functions ---------------------------------------------------//
|
245
|
+
|
246
|
+
/// @dev Call after product registration with the instance
|
247
|
+
/// when the product token/tokenhandler is available
|
248
|
+
function setConstants(
|
249
|
+
Amount minPremium,
|
250
|
+
Amount maxPremium,
|
251
|
+
Amount maxPayout,
|
252
|
+
Amount maxTotalPayout,
|
253
|
+
Seconds minTimeBeforeDeparture,
|
254
|
+
Seconds maxTimeBeforeDeparture,
|
255
|
+
uint8 maxPoliciesToProcess
|
256
|
+
)
|
257
|
+
external
|
258
|
+
virtual
|
259
|
+
restricted()
|
260
|
+
onlyOwner()
|
261
|
+
{
|
262
|
+
MIN_PREMIUM = minPremium;
|
263
|
+
MAX_PREMIUM = maxPremium;
|
264
|
+
MAX_PAYOUT = maxPayout;
|
265
|
+
MAX_TOTAL_PAYOUT = maxTotalPayout;
|
266
|
+
|
267
|
+
MIN_TIME_BEFORE_DEPARTURE = minTimeBeforeDeparture;
|
268
|
+
MAX_TIME_BEFORE_DEPARTURE = maxTimeBeforeDeparture;
|
269
|
+
MAX_POLICIES_TO_PROCESS = maxPoliciesToProcess;
|
270
|
+
}
|
271
|
+
|
272
|
+
function setDefaultBundle(NftId bundleNftId) external restricted() onlyOwner() { _defaultBundleNftId = bundleNftId; }
|
273
|
+
function setTestMode(bool testMode) external restricted() onlyOwner() { _testMode = testMode; }
|
274
|
+
|
275
|
+
function approveTokenHandler(IERC20Metadata token, Amount amount) external restricted() onlyOwner() { _approveTokenHandler(token, amount); }
|
276
|
+
function setLocked(bool locked) external onlyOwner() { _setLocked(locked); }
|
277
|
+
function setWallet(address newWallet) external restricted() onlyOwner() { _setWallet(newWallet); }
|
278
|
+
|
279
|
+
|
280
|
+
//--- view functions ----------------------------------------------------//
|
281
|
+
|
282
|
+
function calculateNetPremium(
|
283
|
+
Amount, // sumInsuredAmount: not used in this product
|
284
|
+
RiskId, // riskId: not used in this product
|
285
|
+
Seconds, // lifetime: not used in this product, a flight is a one time risk
|
286
|
+
bytes memory applicationData // holds the premium amount the customer is willing to pay
|
287
|
+
)
|
288
|
+
external
|
289
|
+
virtual override
|
290
|
+
view
|
291
|
+
returns (Amount netPremiumAmount)
|
292
|
+
{
|
293
|
+
(netPremiumAmount, ) = abi.decode(applicationData, (Amount, Amount[5]));
|
294
|
+
}
|
295
|
+
|
296
|
+
|
297
|
+
function getOracleNftId() public view returns (NftId oracleNftId) { return _oracleNftId; }
|
298
|
+
function isTestMode() public view returns (bool) { return _testMode; }
|
299
|
+
|
300
|
+
|
301
|
+
function getFlightRisk(
|
302
|
+
RiskId riskId,
|
303
|
+
bool requireRiskExists
|
222
304
|
)
|
223
305
|
public
|
306
|
+
view
|
307
|
+
returns (
|
308
|
+
bool exists,
|
309
|
+
FlightRisk memory flightRisk
|
310
|
+
)
|
311
|
+
{
|
312
|
+
(exists, flightRisk) = FlightLib.getFlightRisk(
|
313
|
+
_getInstanceReader(),
|
314
|
+
getNftId(),
|
315
|
+
riskId,
|
316
|
+
requireRiskExists);
|
317
|
+
}
|
318
|
+
|
319
|
+
function getRequestForRisk(RiskId riskId) public view returns (RequestId requestId) { return _requests[riskId]; }
|
320
|
+
function decodeFlightRiskData(bytes memory data) public pure returns (FlightRisk memory) { return abi.decode(data, (FlightRisk)); }
|
321
|
+
|
322
|
+
//--- internal functions ------------------------------------------------//
|
323
|
+
|
324
|
+
|
325
|
+
function _processPermit(
|
326
|
+
PermitData memory permit
|
327
|
+
)
|
328
|
+
internal
|
224
329
|
virtual
|
225
330
|
restricted()
|
226
331
|
{
|
@@ -238,21 +343,18 @@ contract FlightProduct is
|
|
238
343
|
}
|
239
344
|
|
240
345
|
|
241
|
-
function
|
346
|
+
function _createPolicy(
|
242
347
|
address policyHolder,
|
243
348
|
Str flightData,
|
244
349
|
Timestamp departureTime,
|
350
|
+
string memory departureTimeLocal,
|
245
351
|
Timestamp arrivalTime,
|
352
|
+
string memory arrivalTimeLocal,
|
246
353
|
Amount premiumAmount,
|
247
354
|
uint256[6] memory statistics
|
248
|
-
// signature fields
|
249
|
-
// uint8 v,
|
250
|
-
// bytes32 r,
|
251
|
-
// bytes32 s
|
252
355
|
)
|
253
|
-
|
356
|
+
internal
|
254
357
|
virtual
|
255
|
-
restricted()
|
256
358
|
returns (
|
257
359
|
RiskId riskId,
|
258
360
|
NftId policyNftId
|
@@ -260,20 +362,20 @@ contract FlightProduct is
|
|
260
362
|
{
|
261
363
|
// checks
|
262
364
|
// disabled for now - using rbac for security
|
263
|
-
FlightLib.
|
365
|
+
FlightLib.checkApplicationData(
|
264
366
|
this,
|
265
367
|
flightData,
|
266
368
|
departureTime,
|
267
369
|
arrivalTime,
|
268
|
-
premiumAmount
|
269
|
-
statistics);
|
270
|
-
// v, r, s);
|
370
|
+
premiumAmount);
|
271
371
|
|
272
372
|
(riskId, policyNftId) = _prepareApplication(
|
273
373
|
policyHolder,
|
274
374
|
flightData,
|
275
375
|
departureTime,
|
376
|
+
departureTimeLocal,
|
276
377
|
arrivalTime,
|
378
|
+
arrivalTimeLocal,
|
277
379
|
premiumAmount,
|
278
380
|
statistics);
|
279
381
|
|
@@ -287,17 +389,21 @@ contract FlightProduct is
|
|
287
389
|
policyNftId,
|
288
390
|
departureTime); // activate at scheduled departure time of flight
|
289
391
|
|
290
|
-
// send oracle request for flight status (interacts with flight oracle contract)
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
392
|
+
// send oracle request for for new risk to obtain flight status (interacts with flight oracle contract)
|
393
|
+
if (_requests[riskId].eqz()) {
|
394
|
+
_requests[riskId] = _sendRequest(
|
395
|
+
_oracleNftId,
|
396
|
+
abi.encode(
|
397
|
+
FlightOracle.FlightStatusRequest(
|
398
|
+
riskId,
|
399
|
+
flightData,
|
400
|
+
departureTime)),
|
401
|
+
// allow up to 30 days to process the claim
|
402
|
+
arrivalTime.addSeconds(SecondsLib.fromDays(30)),
|
403
|
+
"flightStatusCallback");
|
404
|
+
}
|
405
|
+
|
406
|
+
emit LogFlightPolicyPurchased(policyNftId, flightData.toString(), premiumAmount);
|
301
407
|
}
|
302
408
|
|
303
409
|
|
@@ -305,7 +411,9 @@ contract FlightProduct is
|
|
305
411
|
address policyHolder,
|
306
412
|
Str flightData,
|
307
413
|
Timestamp departureTime,
|
414
|
+
string memory departureTimeLocal,
|
308
415
|
Timestamp arrivalTime,
|
416
|
+
string memory arrivalTimeLocal,
|
309
417
|
Amount premiumAmount,
|
310
418
|
uint256[6] memory statistics
|
311
419
|
)
|
@@ -326,7 +434,9 @@ contract FlightProduct is
|
|
326
434
|
) = _createRiskAndPayoutAmounts(
|
327
435
|
flightData,
|
328
436
|
departureTime,
|
437
|
+
departureTimeLocal,
|
329
438
|
arrivalTime,
|
439
|
+
arrivalTimeLocal,
|
330
440
|
premiumAmount,
|
331
441
|
statistics);
|
332
442
|
|
@@ -344,120 +454,12 @@ contract FlightProduct is
|
|
344
454
|
}
|
345
455
|
|
346
456
|
|
347
|
-
/// @dev Callback for flight status oracle.
|
348
|
-
/// Function may only be alled by oracle service.
|
349
|
-
function flightStatusCallback(
|
350
|
-
RequestId requestId,
|
351
|
-
bytes memory responseData
|
352
|
-
)
|
353
|
-
external
|
354
|
-
virtual
|
355
|
-
restricted()
|
356
|
-
{
|
357
|
-
FlightOracle.FlightStatusResponse memory response = abi.decode(
|
358
|
-
responseData, (FlightOracle.FlightStatusResponse));
|
359
|
-
|
360
|
-
_processFlightStatus(
|
361
|
-
requestId,
|
362
|
-
response.riskId,
|
363
|
-
response.status,
|
364
|
-
response.delayMinutes,
|
365
|
-
MAX_POLICIES_TO_PROCESS);
|
366
|
-
}
|
367
|
-
|
368
|
-
|
369
|
-
/// @dev Manual fallback function for product owner.
|
370
|
-
function processFlightStatus(
|
371
|
-
RequestId requestId,
|
372
|
-
RiskId riskId,
|
373
|
-
bytes1 status,
|
374
|
-
int256 delayMinutes,
|
375
|
-
uint8 maxPoliciesToProcess
|
376
|
-
)
|
377
|
-
external
|
378
|
-
virtual
|
379
|
-
restricted()
|
380
|
-
onlyOwner()
|
381
|
-
{
|
382
|
-
_processFlightStatus(
|
383
|
-
requestId,
|
384
|
-
riskId,
|
385
|
-
status,
|
386
|
-
delayMinutes,
|
387
|
-
maxPoliciesToProcess);
|
388
|
-
}
|
389
|
-
|
390
|
-
//--- owner functions ---------------------------------------------------//
|
391
|
-
|
392
|
-
/// @dev Call after product registration with the instance, when the product token/tokenhandler is available
|
393
|
-
function completeSetup()
|
394
|
-
external
|
395
|
-
virtual
|
396
|
-
restricted()
|
397
|
-
onlyOwner()
|
398
|
-
{
|
399
|
-
IERC20Metadata token = IERC20Metadata(getToken());
|
400
|
-
uint256 tokenMultiplier = 10 ** token.decimals();
|
401
|
-
|
402
|
-
MIN_PREMIUM = AmountLib.toAmount(15 * tokenMultiplier);
|
403
|
-
MAX_PREMIUM = AmountLib.toAmount(200 * tokenMultiplier);
|
404
|
-
MAX_PAYOUT = AmountLib.toAmount(500 * tokenMultiplier);
|
405
|
-
MAX_TOTAL_PAYOUT = AmountLib.toAmount(3 * MAX_PAYOUT.toInt());
|
406
|
-
}
|
407
|
-
|
408
|
-
|
409
|
-
function setDefaultBundle(NftId bundleNftId) external restricted() onlyOwner() { _defaultBundleNftId = bundleNftId; }
|
410
|
-
function approveTokenHandler(IERC20Metadata token, Amount amount) external restricted() onlyOwner() { _approveTokenHandler(token, amount); }
|
411
|
-
function setLocked(bool locked) external onlyOwner() { _setLocked(locked); }
|
412
|
-
function setWallet(address newWallet) external restricted() onlyOwner() { _setWallet(newWallet); }
|
413
|
-
|
414
|
-
|
415
|
-
//--- view functions ----------------------------------------------------//
|
416
|
-
|
417
|
-
|
418
|
-
function calculateNetPremium(
|
419
|
-
Amount, // sumInsuredAmount: not used in this product
|
420
|
-
RiskId, // riskId: not used in this product
|
421
|
-
Seconds, // lifetime: not used in this product, a flight is a one time risk
|
422
|
-
bytes memory applicationData // holds the premium amount the customer is willing to pay
|
423
|
-
)
|
424
|
-
external
|
425
|
-
virtual override
|
426
|
-
view
|
427
|
-
returns (Amount netPremiumAmount)
|
428
|
-
{
|
429
|
-
(netPremiumAmount, ) = abi.decode(applicationData, (Amount, Amount[5]));
|
430
|
-
}
|
431
|
-
|
432
|
-
|
433
|
-
function getFlightMessageVerifier()
|
434
|
-
external
|
435
|
-
view
|
436
|
-
returns (FlightMessageVerifier)
|
437
|
-
{
|
438
|
-
return _flightMessageVerifier;
|
439
|
-
}
|
440
|
-
|
441
|
-
|
442
|
-
function getOracleNftId()
|
443
|
-
public
|
444
|
-
view
|
445
|
-
returns (NftId oracleNftId)
|
446
|
-
{
|
447
|
-
return _oracleNftId;
|
448
|
-
}
|
449
|
-
|
450
|
-
function decodeFlightRiskData(bytes memory data) external pure returns (FlightRisk memory) {
|
451
|
-
return abi.decode(data, (FlightRisk));
|
452
|
-
}
|
453
|
-
|
454
|
-
//--- internal functions ------------------------------------------------//
|
455
|
-
|
456
|
-
|
457
457
|
function _createRiskAndPayoutAmounts(
|
458
458
|
Str flightData,
|
459
459
|
Timestamp departureTime,
|
460
|
+
string memory departureTimeLocal,
|
460
461
|
Timestamp arrivalTime,
|
462
|
+
string memory arrivalTimeLocal,
|
461
463
|
Amount premiumAmount,
|
462
464
|
uint256[6] memory statistics
|
463
465
|
)
|
@@ -483,7 +485,9 @@ contract FlightProduct is
|
|
483
485
|
riskId = _checkAndUpdateFlightRisk(
|
484
486
|
flightData,
|
485
487
|
departureTime,
|
488
|
+
departureTimeLocal,
|
486
489
|
arrivalTime,
|
490
|
+
arrivalTimeLocal,
|
487
491
|
sumInsuredAmount,
|
488
492
|
weight);
|
489
493
|
}
|
@@ -492,7 +496,9 @@ contract FlightProduct is
|
|
492
496
|
function _checkAndUpdateFlightRisk(
|
493
497
|
Str flightData,
|
494
498
|
Timestamp departureTime,
|
499
|
+
string memory departureTimeLocal,
|
495
500
|
Timestamp arrivalTime,
|
501
|
+
string memory arrivalTimeLocal,
|
496
502
|
Amount sumInsuredAmount,
|
497
503
|
uint256 weight
|
498
504
|
)
|
@@ -507,7 +513,9 @@ contract FlightProduct is
|
|
507
513
|
getNftId(),
|
508
514
|
flightData,
|
509
515
|
departureTime,
|
510
|
-
|
516
|
+
departureTimeLocal,
|
517
|
+
arrivalTime,
|
518
|
+
arrivalTimeLocal);
|
511
519
|
|
512
520
|
// create risk, if new
|
513
521
|
if (!exists) {
|
@@ -515,10 +523,10 @@ contract FlightProduct is
|
|
515
523
|
_createRisk(riskKey, abi.encode(flightRisk));
|
516
524
|
}
|
517
525
|
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
526
|
+
FlightLib.checkClusterRisk(
|
527
|
+
flightRisk.sumOfSumInsuredAmounts,
|
528
|
+
sumInsuredAmount,
|
529
|
+
MAX_TOTAL_PAYOUT);
|
522
530
|
|
523
531
|
// update existing risk with additional sum insured amount
|
524
532
|
flightRisk.sumOfSumInsuredAmounts = flightRisk.sumOfSumInsuredAmounts + sumInsuredAmount;
|
@@ -530,71 +538,85 @@ contract FlightProduct is
|
|
530
538
|
RequestId requestId,
|
531
539
|
RiskId riskId,
|
532
540
|
bytes1 status,
|
533
|
-
int256 delayMinutes
|
534
|
-
uint8 maxPoliciesToProcess
|
541
|
+
int256 delayMinutes
|
535
542
|
)
|
536
543
|
internal
|
537
544
|
virtual
|
538
545
|
{
|
539
546
|
// check risk exists
|
540
|
-
|
541
|
-
(
|
542
|
-
bool exists,
|
543
|
-
FlightRisk memory flightRisk
|
544
|
-
) = FlightLib.getFlightRisk(reader, getNftId(), riskId);
|
547
|
+
(, FlightRisk memory flightRisk) = getFlightRisk(riskId, true);
|
545
548
|
|
546
|
-
if
|
547
|
-
|
548
|
-
|
549
|
-
|
549
|
+
// update status, if not yet set
|
550
|
+
if (flightRisk.statusUpdatedAt.eqz()) {
|
551
|
+
flightRisk.statusUpdatedAt = TimestampLib.current();
|
552
|
+
flightRisk.status = status;
|
553
|
+
flightRisk.delayMinutes = delayMinutes;
|
554
|
+
flightRisk.payoutOption = FlightLib.checkAndGetPayoutOption(
|
555
|
+
requestId, riskId, status, delayMinutes);
|
550
556
|
|
551
|
-
|
552
|
-
|
557
|
+
_updateRisk(riskId, abi.encode(flightRisk));
|
558
|
+
}
|
553
559
|
|
554
|
-
_processPayoutsAndClosePolicies(
|
560
|
+
(,, uint8 payoutOption) = _processPayoutsAndClosePolicies(
|
555
561
|
riskId,
|
556
|
-
|
557
|
-
maxPoliciesToProcess);
|
562
|
+
MAX_POLICIES_TO_PROCESS);
|
558
563
|
|
559
564
|
// logging
|
560
565
|
emit LogFlightStatusProcessed(requestId, riskId, status, delayMinutes, payoutOption);
|
561
566
|
}
|
562
567
|
|
563
568
|
|
564
|
-
// REMARK caller responsible to check that risk exists.
|
565
569
|
function _processPayoutsAndClosePolicies(
|
566
570
|
RiskId riskId,
|
567
|
-
uint8 payoutOption,
|
568
571
|
uint8 maxPoliciesToProcess
|
569
572
|
)
|
570
573
|
internal
|
571
574
|
virtual
|
575
|
+
returns (
|
576
|
+
bool riskExists,
|
577
|
+
bool statusAvailable,
|
578
|
+
uint8 payoutOption
|
579
|
+
)
|
572
580
|
{
|
573
581
|
// determine numbers of policies to process
|
574
582
|
InstanceReader reader = _getInstanceReader();
|
583
|
+
(riskExists, statusAvailable, payoutOption) = FlightLib.getPayoutOption(reader, getNftId(), riskId);
|
584
|
+
|
585
|
+
// return with default values if risk does not exist or status is not yet available
|
586
|
+
if (!riskExists || !statusAvailable) {
|
587
|
+
return (riskExists, statusAvailable, payoutOption);
|
588
|
+
}
|
589
|
+
|
575
590
|
uint256 policiesToProcess = reader.policiesForRisk(riskId);
|
576
|
-
|
591
|
+
uint256 policiesProcessed = policiesToProcess < maxPoliciesToProcess ? policiesToProcess : maxPoliciesToProcess;
|
577
592
|
|
578
|
-
//
|
579
|
-
|
580
|
-
|
593
|
+
// assemble array with policies to process
|
594
|
+
NftId [] memory policies = new NftId[](policiesProcessed);
|
595
|
+
for (uint256 i = 0; i < policiesProcessed; i++) {
|
596
|
+
policies[i] = reader.getPolicyForRisk(riskId, i);
|
597
|
+
}
|
581
598
|
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
599
|
+
// go through policies
|
600
|
+
for (uint256 i = 0; i < policiesProcessed; i++) {
|
601
|
+
NftId policyNftId = policies[i];
|
602
|
+
Amount payoutAmount = FlightLib.getPayoutAmount(
|
603
|
+
reader.getPolicyInfo(policyNftId).applicationData,
|
604
|
+
payoutOption);
|
586
605
|
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
payoutOption));
|
592
|
-
}
|
606
|
+
// create claim/payout (if applicable)
|
607
|
+
_resolvePayout(
|
608
|
+
policyNftId,
|
609
|
+
payoutAmount);
|
593
610
|
|
594
611
|
// expire and close policy
|
595
612
|
_expire(policyNftId, TimestampLib.current());
|
596
613
|
_close(policyNftId);
|
614
|
+
|
615
|
+
emit LogFlightPolicyClosed(policyNftId, payoutAmount);
|
597
616
|
}
|
617
|
+
|
618
|
+
// logging
|
619
|
+
emit LogFlightPoliciesProcessed(riskId, payoutOption, policiesProcessed, policiesToProcess - policiesProcessed);
|
598
620
|
}
|
599
621
|
|
600
622
|
|
@@ -605,6 +627,11 @@ contract FlightProduct is
|
|
605
627
|
internal
|
606
628
|
virtual
|
607
629
|
{
|
630
|
+
// no action if no payout
|
631
|
+
if (payoutAmount.eqz()) {
|
632
|
+
return;
|
633
|
+
}
|
634
|
+
|
608
635
|
// create confirmed claim
|
609
636
|
ClaimId claimId = _submitClaim(policyNftId, payoutAmount, "");
|
610
637
|
_confirmClaim(policyNftId, claimId, payoutAmount, "");
|
@@ -623,9 +650,9 @@ contract FlightProduct is
|
|
623
650
|
address initialOwner
|
624
651
|
)
|
625
652
|
internal
|
626
|
-
initializer
|
653
|
+
initializer()
|
627
654
|
{
|
628
|
-
|
655
|
+
__Product_init(
|
629
656
|
registry,
|
630
657
|
instanceNftId,
|
631
658
|
componentName,
|
@@ -650,5 +677,11 @@ contract FlightProduct is
|
|
650
677
|
}),
|
651
678
|
authorization,
|
652
679
|
initialOwner); // number of oracles
|
680
|
+
|
681
|
+
MAX_FLIGHT_DURATION = SecondsLib.fromDays(2);
|
682
|
+
LIFETIME = SecondsLib.fromDays(30);
|
683
|
+
WEIGHT_PATTERN = [0, 0, 0, 30, 50, 50];
|
684
|
+
MIN_OBSERVATIONS = 10;
|
685
|
+
MARGIN_PERCENT = 30;
|
653
686
|
}
|
654
687
|
}
|