@etherisc/gif-next 0.0.2-f1b01e0-214 → 0.0.2-f1e6957-384
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 +76 -341
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +100 -32
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +111 -45
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +52 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +367 -126
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1546 -211
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +261 -59
- 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/IAccessAdmin.sol/IAccessAdmin.json +258 -82
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +97 -14
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +52 -27
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +264 -64
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +20 -11
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +368 -139
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +160 -78
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +19 -10
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +228 -15
- 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 +81 -52
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +263 -63
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +109 -68
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +263 -63
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.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 +74 -33
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +263 -63
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +35 -26
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +85 -60
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +263 -63
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +264 -78
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +263 -63
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
- 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 +4 -0
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +359 -33
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +297 -3
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +407 -97
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +756 -392
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +231 -75
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +492 -424
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +323 -29
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -42
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1444 -2133
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
- 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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +25 -16
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +277 -60
- 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 +19 -10
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -10
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +83 -38
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -50
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +37 -36
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +263 -63
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +294 -117
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +144 -58
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +180 -27
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +19 -10
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +19 -10
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +88 -22
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +324 -65
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +141 -63
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +216 -59
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +113 -43
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -10
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +263 -63
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +128 -70
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +166 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +29 -0
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -10
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +203 -18
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +508 -18
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +138 -72
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +93 -72
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -50
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +19 -10
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +231 -46
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +101 -43
- 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/IRegistry.sol/IRegistry.json +33 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
- 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 +71 -60
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +537 -300
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +330 -71
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +41 -12
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +543 -226
- 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 +167 -103
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -26
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +19 -10
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +169 -174
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +130 -64
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +76 -41
- 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/ContractLib.sol/ITokenRegistryHelper.json +2 -2
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -10
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +84 -105
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -10
- 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/INftOwnable.sol/INftOwnable.json +19 -0
- 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/IRegisterable.sol/IRegisterable.json +19 -0
- 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/IService.sol/IService.json +29 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -10
- 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 +21 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
- 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/Service.sol/Service.json +29 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1384 -128
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +94 -114
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +1472 -185
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +73 -72
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +139 -64
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +293 -149
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +128 -164
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +96 -46
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1617 -817
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +140 -78
- 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/Amount.sol/AmountLib.json +2 -2
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -19
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
- 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 -2
- 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 +6 -6
- 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 +2 -2
- 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/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 +39 -218
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
- 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/String.sol/StrLib.json +50 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +2 -2
- 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/IVersionable.sol/IVersionable.json +10 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -27
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
- package/contracts/accounting/AccountingService.sol +15 -3
- package/contracts/accounting/IAccountingService.sol +2 -0
- package/contracts/authorization/AccessAdmin.sol +292 -317
- package/contracts/authorization/AccessAdminLib.sol +517 -22
- package/contracts/authorization/AccessManagerCloneable.sol +0 -18
- package/contracts/authorization/Authorization.sol +64 -239
- package/contracts/authorization/IAccess.sol +23 -14
- package/contracts/authorization/IAccessAdmin.sol +25 -53
- package/contracts/authorization/IAuthorization.sol +3 -57
- package/contracts/authorization/IServiceAuthorization.sol +55 -17
- package/contracts/authorization/ServiceAuthorization.sol +228 -34
- package/contracts/distribution/BasicDistribution.sol +3 -4
- package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
- package/contracts/distribution/Distribution.sol +9 -8
- package/contracts/distribution/DistributionService.sol +98 -35
- package/contracts/distribution/IDistributionComponent.sol +3 -1
- package/contracts/distribution/IDistributionService.sol +20 -8
- package/contracts/examples/fire/FireProduct.sol +6 -6
- package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -19
- package/contracts/instance/BaseStore.sol +93 -0
- package/contracts/instance/IBaseStore.sol +37 -0
- package/contracts/instance/IInstance.sol +55 -5
- package/contracts/instance/IInstanceService.sol +37 -6
- package/contracts/instance/Instance.sol +103 -56
- package/contracts/instance/InstanceAdmin.sol +151 -294
- package/contracts/instance/InstanceAuthorizationV3.sol +106 -66
- package/contracts/instance/InstanceReader.sol +350 -394
- package/contracts/instance/InstanceService.sol +180 -125
- package/contracts/instance/InstanceStore.sol +153 -128
- package/contracts/instance/ProductStore.sol +290 -0
- package/contracts/instance/RiskSet.sol +10 -2
- package/contracts/instance/TargetNames.sol +10 -0
- package/contracts/instance/base/BalanceStore.sol +4 -6
- package/contracts/instance/base/ObjectLifecycle.sol +2 -6
- package/contracts/instance/module/IComponents.sol +0 -2
- package/contracts/oracle/BasicOracle.sol +2 -3
- package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
- package/contracts/oracle/Oracle.sol +4 -6
- package/contracts/oracle/OracleService.sol +8 -8
- package/contracts/pool/BasicPool.sol +4 -16
- package/contracts/pool/BasicPoolAuthorization.sol +10 -5
- package/contracts/pool/BundleService.sol +34 -43
- package/contracts/pool/IBundleService.sol +14 -13
- package/contracts/pool/IPoolService.sol +7 -2
- package/contracts/pool/Pool.sol +6 -18
- package/contracts/pool/PoolLib.sol +127 -2
- package/contracts/pool/PoolService.sol +40 -181
- package/contracts/product/ApplicationService.sol +64 -11
- package/contracts/product/BasicProduct.sol +2 -3
- package/contracts/product/BasicProductAuthorization.sol +11 -4
- package/contracts/product/ClaimService.sol +99 -105
- package/contracts/product/IApplicationService.sol +21 -2
- package/contracts/product/IClaimService.sol +5 -4
- package/contracts/product/IPolicyService.sol +9 -2
- package/contracts/product/IRiskService.sol +18 -3
- package/contracts/product/PolicyService.sol +40 -59
- package/contracts/product/PolicyServiceLib.sol +79 -5
- package/contracts/product/PricingService.sol +22 -25
- package/contracts/product/Product.sol +40 -16
- package/contracts/product/RiskService.sol +50 -15
- package/contracts/registry/IRegistry.sol +11 -9
- package/contracts/registry/IRelease.sol +6 -3
- package/contracts/registry/Registry.sol +15 -9
- package/contracts/registry/RegistryAdmin.sol +33 -118
- package/contracts/registry/RegistryAuthorization.sol +139 -69
- package/contracts/registry/RegistryService.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +52 -106
- package/contracts/registry/ReleaseRegistry.sol +20 -12
- package/contracts/registry/ServiceAuthorizationV3.sol +43 -32
- package/contracts/registry/TokenRegistry.sol +56 -52
- package/contracts/shared/Component.sol +8 -8
- package/contracts/shared/ComponentService.sol +245 -262
- package/contracts/shared/ContractLib.sol +106 -75
- package/contracts/shared/IComponent.sol +1 -1
- package/contracts/shared/IComponentService.sol +12 -13
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IRegisterable.sol +0 -1
- package/contracts/shared/InstanceLinkedComponent.sol +6 -9
- package/contracts/shared/NftOwnable.sol +3 -1
- package/contracts/shared/PolicyHolder.sol +3 -2
- package/contracts/shared/Service.sol +6 -4
- package/contracts/staking/IStaking.sol +261 -70
- package/contracts/staking/IStakingService.sol +39 -84
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +468 -217
- package/contracts/staking/StakingLib.sol +38 -124
- package/contracts/staking/StakingManager.sol +4 -3
- package/contracts/staking/StakingReader.sol +62 -71
- package/contracts/staking/StakingService.sol +42 -185
- package/contracts/staking/StakingServiceManager.sol +1 -0
- package/contracts/staking/StakingStore.sol +1093 -331
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +69 -46
- package/contracts/type/Amount.sol +4 -0
- package/contracts/type/Blocknumber.sol +17 -22
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/NftId.sol +3 -3
- package/contracts/type/ObjectType.sol +16 -3
- package/contracts/type/RoleId.sol +57 -59
- package/contracts/type/Seconds.sol +19 -0
- package/contracts/type/String.sol +12 -0
- package/contracts/type/Timestamp.sol +4 -2
- package/contracts/type/UFixed.sol +1 -0
- package/contracts/upgradeability/IVersionable.sol +3 -0
- package/contracts/upgradeability/ProxyManager.sol +26 -12
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
- package/contracts/upgradeability/Versionable.sol +6 -3
- package/package.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
- package/contracts/shared/ComponentVerifyingService.sol +0 -128
- package/contracts/shared/IKeyValueStore.sol +0 -54
- package/contracts/shared/KeyValueStore.sol +0 -131
- package/contracts/staking/StakingLifecycle.sol +0 -23
| @@ -13,21 +13,24 @@ import {IComponents} from "../instance/module/IComponents.sol"; | |
| 13 13 | 
             
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 14 14 |  | 
| 15 15 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 16 | 
            -
            import { | 
| 16 | 
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 17 17 | 
             
            import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
         | 
| 18 18 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 19 19 | 
             
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 20 20 | 
             
            import {ObjectType, ACCOUNTING, COMPONENT, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, REGISTRY} from "../type/ObjectType.sol";
         | 
| 21 21 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 22 22 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 23 | 
            -
             | 
| 23 | 
            +
            // TODO PoolLib feels wrong, should likely go in a component type independent lib
         | 
| 24 | 
            +
            import {PoolLib} from "../pool/PoolLib.sol";
         | 
| 25 | 
            +
            import {ReferralId, ReferralStatus, ReferralLib, REFERRAL_OK, REFERRAL_ERROR_UNKNOWN, REFERRAL_ERROR_EXPIRED, REFERRAL_ERROR_EXHAUSTED} from "../type/Referral.sol";
         | 
| 24 26 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 27 | 
            +
            import {Service} from "../shared/Service.sol";
         | 
| 25 28 | 
             
            import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
         | 
| 26 | 
            -
            import {UFixed} from "../type/UFixed.sol";
         | 
| 29 | 
            +
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         | 
| 27 30 |  | 
| 28 31 |  | 
| 29 32 | 
             
            contract DistributionService is
         | 
| 30 | 
            -
                 | 
| 33 | 
            +
                Service,
         | 
| 31 34 | 
             
                IDistributionService
         | 
| 32 35 | 
             
            {
         | 
| 33 36 | 
             
                IAccountingService private _accountingService;
         | 
| @@ -71,12 +74,14 @@ contract DistributionService is | |
| 71 74 | 
             
                    bytes memory data
         | 
| 72 75 | 
             
                )
         | 
| 73 76 | 
             
                    external
         | 
| 77 | 
            +
                    virtual
         | 
| 78 | 
            +
                    restricted()
         | 
| 74 79 | 
             
                    returns (DistributorType distributorType)
         | 
| 75 80 | 
             
                {
         | 
| 76 | 
            -
                    (NftId distributionNftId | 
| 81 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
         | 
| 77 82 |  | 
| 78 83 | 
             
                    {
         | 
| 79 | 
            -
                        NftId productNftId =  | 
| 84 | 
            +
                        NftId productNftId = getRegistry().getParentNftId(distributionNftId);
         | 
| 80 85 | 
             
                        IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
         | 
| 81 86 |  | 
| 82 87 | 
             
                        UFixed variableDistributionFees = feeInfo.distributionFee.fractionalFee;
         | 
| @@ -87,7 +92,7 @@ contract DistributionService is | |
| 87 92 | 
             
                        }
         | 
| 88 93 | 
             
                        UFixed maxDiscountPercentageLimit = variableDistributionFees - variableFeesPartsTotal;
         | 
| 89 94 |  | 
| 90 | 
            -
                        if (maxDiscountPercentage | 
| 95 | 
            +
                        if (maxDiscountPercentage > maxDiscountPercentageLimit) {
         | 
| 91 96 | 
             
                            revert ErrorDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt1000(), maxDiscountPercentageLimit.toInt1000());
         | 
| 92 97 | 
             
                        }
         | 
| 93 98 | 
             
                    }
         | 
| @@ -106,6 +111,8 @@ contract DistributionService is | |
| 106 111 | 
             
                        data: data});
         | 
| 107 112 |  | 
| 108 113 | 
             
                    instance.getInstanceStore().createDistributorType(distributorType, info);
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                    emit LogDistributionServiceDistributorTypeCreated(distributionNftId, name);
         | 
| 109 116 | 
             
                }
         | 
| 110 117 |  | 
| 111 118 |  | 
| @@ -116,9 +123,10 @@ contract DistributionService is | |
| 116 123 | 
             
                )
         | 
| 117 124 | 
             
                    external 
         | 
| 118 125 | 
             
                    virtual
         | 
| 126 | 
            +
                    restricted()
         | 
| 119 127 | 
             
                    returns (NftId distributorNftId)
         | 
| 120 128 | 
             
                {
         | 
| 121 | 
            -
                    (NftId distributionNftId | 
| 129 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
         | 
| 122 130 | 
             
                    _checkDistributionType(instance.getInstanceReader(), distributorType, distributionNftId);
         | 
| 123 131 |  | 
| 124 132 | 
             
                    distributorNftId = _registryService.registerDistributor(
         | 
| @@ -139,6 +147,8 @@ contract DistributionService is | |
| 139 147 | 
             
                        data: data});
         | 
| 140 148 |  | 
| 141 149 | 
             
                    instance.getInstanceStore().createDistributor(distributorNftId, info);
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                    emit LogDistributionServiceDistributorCreated(distributionNftId, distributorNftId, distributorType, distributor);
         | 
| 142 152 | 
             
                }
         | 
| 143 153 |  | 
| 144 154 | 
             
                function changeDistributorType(
         | 
| @@ -148,15 +158,19 @@ contract DistributionService is | |
| 148 158 | 
             
                )
         | 
| 149 159 | 
             
                    external
         | 
| 150 160 | 
             
                    virtual
         | 
| 161 | 
            +
                    restricted()
         | 
| 151 162 | 
             
                {
         | 
| 152 163 | 
             
                    _checkNftType(distributorNftId, DISTRIBUTOR());
         | 
| 153 | 
            -
                    (NftId distributionNftId | 
| 164 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
         | 
| 154 165 | 
             
                    _checkDistributionType(instance.getInstanceReader(), newDistributorType, distributionNftId);
         | 
| 155 166 |  | 
| 156 167 | 
             
                    IDistribution.DistributorInfo memory distributorInfo = instance.getInstanceReader().getDistributorInfo(distributorNftId);
         | 
| 168 | 
            +
                    DistributorType oldDistributorType = distributorInfo.distributorType;
         | 
| 157 169 | 
             
                    distributorInfo.distributorType = newDistributorType;
         | 
| 158 170 | 
             
                    distributorInfo.data = data;
         | 
| 159 171 | 
             
                    instance.getInstanceStore().updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                    emit LogDistributionServiceDistributorTypeChanged(distributorNftId, oldDistributorType, newDistributorType);
         | 
| 160 174 | 
             
                }
         | 
| 161 175 |  | 
| 162 176 |  | 
| @@ -170,15 +184,16 @@ contract DistributionService is | |
| 170 184 | 
             
                )
         | 
| 171 185 | 
             
                    external
         | 
| 172 186 | 
             
                    virtual
         | 
| 187 | 
            +
                    restricted()
         | 
| 173 188 | 
             
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 174 189 | 
             
                    returns (ReferralId referralId)
         | 
| 175 190 | 
             
                {
         | 
| 176 | 
            -
                    (NftId distributionNftId | 
| 191 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
         | 
| 177 192 |  | 
| 178 193 | 
             
                    if (bytes(code).length == 0) {
         | 
| 179 | 
            -
                        revert ErrorDistributionServiceInvalidReferral( | 
| 194 | 
            +
                        revert ErrorDistributionServiceInvalidReferral();
         | 
| 180 195 | 
             
                    }
         | 
| 181 | 
            -
                    if (expiryAt.eqz() || expiryAt | 
| 196 | 
            +
                    if (expiryAt.eqz() || expiryAt < TimestampLib.current()) {
         | 
| 182 197 | 
             
                        revert ErrorDistributionServiceExpirationInvalid(expiryAt);
         | 
| 183 198 | 
             
                    }
         | 
| 184 199 |  | 
| @@ -193,15 +208,15 @@ contract DistributionService is | |
| 193 208 | 
             
                        IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
         | 
| 194 209 |  | 
| 195 210 | 
             
                        if (distributorTypeData.maxReferralCount < maxReferrals) {
         | 
| 196 | 
            -
                            revert ErrorDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
         | 
| 211 | 
            +
                            revert ErrorDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount, maxReferrals);
         | 
| 197 212 | 
             
                        }
         | 
| 198 213 | 
             
                        if (distributorTypeData.minDiscountPercentage > discountPercentage) {
         | 
| 199 | 
            -
                            revert ErrorDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage | 
| 214 | 
            +
                            revert ErrorDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage, discountPercentage);
         | 
| 200 215 | 
             
                        }
         | 
| 201 216 | 
             
                        if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
         | 
| 202 | 
            -
                            revert ErrorDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage | 
| 217 | 
            +
                            revert ErrorDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage, discountPercentage);
         | 
| 203 218 | 
             
                        }
         | 
| 204 | 
            -
                        if (expiryAt.toInt() - TimestampLib. | 
| 219 | 
            +
                        if (expiryAt.toInt() - TimestampLib.current().toInt() > distributorTypeData.maxReferralLifetime.toInt()) {
         | 
| 205 220 | 
             
                            revert ErrorDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt);
         | 
| 206 221 | 
             
                        }
         | 
| 207 222 | 
             
                    }
         | 
| @@ -220,6 +235,8 @@ contract DistributionService is | |
| 220 235 | 
             
                        });
         | 
| 221 236 |  | 
| 222 237 | 
             
                        instance.getInstanceStore().createReferral(referralId, info);
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                        emit LogDistributionServiceReferralCreated(distributionNftId, distributorNftId, referralId, code);
         | 
| 223 240 | 
             
                    }
         | 
| 224 241 | 
             
                }
         | 
| 225 242 |  | 
| @@ -234,14 +251,14 @@ contract DistributionService is | |
| 234 251 | 
             
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 235 252 | 
             
                {
         | 
| 236 253 | 
             
                    if (referralIsValid(distributionNftId, referralId)) {
         | 
| 237 | 
            -
                         | 
| 238 | 
            -
                        IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 239 | 
            -
                        IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
         | 
| 254 | 
            +
                        IInstance instance = IInstance(ContractLib.getInstanceForComponent(getRegistry(), distributionNftId));
         | 
| 240 255 |  | 
| 241 256 | 
             
                        // update book keeping for referral info
         | 
| 242 257 | 
             
                        IDistribution.ReferralInfo memory referralInfo = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 243 258 | 
             
                        referralInfo.usedReferrals += 1;
         | 
| 244 259 | 
             
                        instance.getInstanceStore().updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 260 | 
            +
             | 
| 261 | 
            +
                        emit LogDistributionServiceReferralProcessed(distributionNftId, referralInfo.distributorNftId, referralId, referralInfo.usedReferrals);
         | 
| 245 262 | 
             
                    }
         | 
| 246 263 | 
             
                }
         | 
| 247 264 |  | 
| @@ -255,9 +272,7 @@ contract DistributionService is | |
| 255 272 | 
             
                    restricted()
         | 
| 256 273 | 
             
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 257 274 | 
             
                {
         | 
| 258 | 
            -
                     | 
| 259 | 
            -
                    IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 260 | 
            -
                    IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
         | 
| 275 | 
            +
                    IInstance instance = IInstance(ContractLib.getInstanceForComponent(getRegistry(), distributionNftId));
         | 
| 261 276 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 262 277 | 
             
                    InstanceStore store = instance.getInstanceStore();
         | 
| 263 278 |  | 
| @@ -284,17 +299,19 @@ contract DistributionService is | |
| 284 299 | 
             
                        // increase distribution balance by distribution owner fee
         | 
| 285 300 | 
             
                        _accountingService.increaseDistributionBalance(store, distributionNftId, AmountLib.zero(), distributionOwnerFee);
         | 
| 286 301 | 
             
                    }
         | 
| 302 | 
            +
             | 
| 303 | 
            +
                    emit LogDistributionServiceSaleProcessed(distributionNftId, referralId);
         | 
| 287 304 | 
             
                }
         | 
| 288 305 |  | 
| 289 306 | 
             
                /// @inheritdoc IDistributionService
         | 
| 290 307 | 
             
                function withdrawCommission(NftId distributorNftId, Amount amount) 
         | 
| 291 308 | 
             
                    public 
         | 
| 292 309 | 
             
                    virtual
         | 
| 293 | 
            -
                     | 
| 310 | 
            +
                    restricted()
         | 
| 294 311 | 
             
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 295 312 | 
             
                    returns (Amount withdrawnAmount) 
         | 
| 296 313 | 
             
                {
         | 
| 297 | 
            -
                    (NftId distributionNftId | 
| 314 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
         | 
| 298 315 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 299 316 |  | 
| 300 317 | 
             
                    IComponents.ComponentInfo memory distributionInfo = reader.getComponentInfo(distributionNftId);
         | 
| @@ -304,10 +321,10 @@ contract DistributionService is | |
| 304 321 |  | 
| 305 322 | 
             
                    // determine withdrawn amount
         | 
| 306 323 | 
             
                    withdrawnAmount = amount;
         | 
| 307 | 
            -
                    if (withdrawnAmount | 
| 324 | 
            +
                    if (withdrawnAmount >= AmountLib.max()) {
         | 
| 308 325 | 
             
                        withdrawnAmount = commissionAmount;
         | 
| 309 326 | 
             
                    } else {
         | 
| 310 | 
            -
                        if (withdrawnAmount | 
| 327 | 
            +
                        if (withdrawnAmount > commissionAmount) {
         | 
| 311 328 | 
             
                            revert ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(withdrawnAmount, commissionAmount);
         | 
| 312 329 | 
             
                        }
         | 
| 313 330 | 
             
                    }
         | 
| @@ -331,6 +348,7 @@ contract DistributionService is | |
| 331 348 |  | 
| 332 349 | 
             
                function referralIsValid(NftId distributionNftId, ReferralId referralId) 
         | 
| 333 350 | 
             
                    public 
         | 
| 351 | 
            +
                    virtual
         | 
| 334 352 | 
             
                    view 
         | 
| 335 353 | 
             
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 336 354 | 
             
                    returns (bool isValid) 
         | 
| @@ -339,9 +357,7 @@ contract DistributionService is | |
| 339 357 | 
             
                        return false;
         | 
| 340 358 | 
             
                    }
         | 
| 341 359 |  | 
| 342 | 
            -
                     | 
| 343 | 
            -
                    IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 344 | 
            -
                    IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
         | 
| 360 | 
            +
                    IInstance instance = IInstance(ContractLib.getInstanceForComponent(getRegistry(), distributionNftId));
         | 
| 345 361 | 
             
                    IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 346 362 |  | 
| 347 363 | 
             
                    if (info.distributorNftId.eqz()) {
         | 
| @@ -353,10 +369,52 @@ contract DistributionService is | |
| 353 369 | 
             
                        revert ErrorDistributionServiceReferralDistributionMismatch(referralId, info.distributionNftId, distributionNftId);
         | 
| 354 370 | 
             
                    }
         | 
| 355 371 |  | 
| 356 | 
            -
                    isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib. | 
| 372 | 
            +
                    isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.current() <= info.expiryAt);
         | 
| 357 373 | 
             
                    isValid = isValid && info.usedReferrals < info.maxReferrals;
         | 
| 358 374 | 
             
                }
         | 
| 359 375 |  | 
| 376 | 
            +
             | 
| 377 | 
            +
                function getDiscountPercentage(
         | 
| 378 | 
            +
                    InstanceReader instanceReader,
         | 
| 379 | 
            +
                    ReferralId referralId
         | 
| 380 | 
            +
                )
         | 
| 381 | 
            +
                    external
         | 
| 382 | 
            +
                    virtual
         | 
| 383 | 
            +
                    view 
         | 
| 384 | 
            +
                    returns (
         | 
| 385 | 
            +
                        UFixed discountPercentage, 
         | 
| 386 | 
            +
                        ReferralStatus status
         | 
| 387 | 
            +
                    )
         | 
| 388 | 
            +
                { 
         | 
| 389 | 
            +
                    IDistribution.ReferralInfo memory info = instanceReader.getReferralInfo(
         | 
| 390 | 
            +
                        referralId);        
         | 
| 391 | 
            +
             | 
| 392 | 
            +
                    if (info.expiryAt.eqz()) {
         | 
| 393 | 
            +
                        return (
         | 
| 394 | 
            +
                            UFixedLib.zero(),
         | 
| 395 | 
            +
                            REFERRAL_ERROR_UNKNOWN());
         | 
| 396 | 
            +
                    }
         | 
| 397 | 
            +
             | 
| 398 | 
            +
                    if (info.expiryAt < TimestampLib.current()) {
         | 
| 399 | 
            +
                        return (
         | 
| 400 | 
            +
                            UFixedLib.zero(),
         | 
| 401 | 
            +
                            REFERRAL_ERROR_EXPIRED());
         | 
| 402 | 
            +
                    }
         | 
| 403 | 
            +
             | 
| 404 | 
            +
                    if (info.usedReferrals >= info.maxReferrals) {
         | 
| 405 | 
            +
                        return (
         | 
| 406 | 
            +
                            UFixedLib.zero(),
         | 
| 407 | 
            +
                            REFERRAL_ERROR_EXHAUSTED());
         | 
| 408 | 
            +
                    }
         | 
| 409 | 
            +
             | 
| 410 | 
            +
                    return (
         | 
| 411 | 
            +
                        info.discountPercentage,
         | 
| 412 | 
            +
                        REFERRAL_OK()
         | 
| 413 | 
            +
                    );
         | 
| 414 | 
            +
             | 
| 415 | 
            +
                }
         | 
| 416 | 
            +
             | 
| 417 | 
            +
             | 
| 360 418 | 
             
                function _checkDistributionType(InstanceReader instanceReader, DistributorType distributorType, NftId expectedDistributionNftId) 
         | 
| 361 419 | 
             
                    internal
         | 
| 362 420 | 
             
                    view 
         | 
| @@ -369,16 +427,21 @@ contract DistributionService is | |
| 369 427 | 
             
                    }
         | 
| 370 428 | 
             
                }
         | 
| 371 429 |  | 
| 372 | 
            -
             | 
| 430 | 
            +
             | 
| 431 | 
            +
             | 
| 432 | 
            +
                function _getAndVerifyActiveDistribution()
         | 
| 373 433 | 
             
                    internal
         | 
| 434 | 
            +
                    virtual
         | 
| 374 435 | 
             
                    view
         | 
| 375 | 
            -
                    returns( | 
| 436 | 
            +
                    returns (
         | 
| 437 | 
            +
                        NftId poolNftId,
         | 
| 438 | 
            +
                        IInstance instance
         | 
| 439 | 
            +
                    )
         | 
| 376 440 | 
             
                {
         | 
| 377 | 
            -
                     | 
| 378 | 
            -
                    address instanceAddress = getRegistry().getObjectAddress(instanceNftId);
         | 
| 379 | 
            -
                    return IInstance(instanceAddress);
         | 
| 441 | 
            +
                    return PoolLib.getAndVerifyActiveComponent(getRegistry(), msg.sender, DISTRIBUTION());
         | 
| 380 442 | 
             
                }
         | 
| 381 443 |  | 
| 444 | 
            +
             | 
| 382 445 | 
             
                function _getDomain() internal pure override returns(ObjectType) {
         | 
| 383 446 | 
             
                    return DISTRIBUTION();
         | 
| 384 447 | 
             
                }
         | 
| @@ -1,12 +1,14 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {Amount} from "../type/Amount.sol";
         | 
| 5 4 | 
             
            import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            import {Amount} from "../type/Amount.sol";
         | 
| 6 7 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 7 8 | 
             
            import {ReferralId, ReferralStatus} from "../type/Referral.sol";
         | 
| 8 9 | 
             
            import {UFixed} from "../type/UFixed.sol";
         | 
| 9 10 |  | 
| 11 | 
            +
             | 
| 10 12 | 
             
            interface IDistributionComponent is IInstanceLinkedComponent {
         | 
| 11 13 |  | 
| 12 14 | 
             
                event LogDistributorUpdated(address to, address operator);
         | 
| @@ -1,15 +1,17 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {Amount} from "../type/Amount.sol";
         | 
| 5 | 
            -
            import {NftId} from "../type/NftId.sol";
         | 
| 6 4 | 
             
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 7 5 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 8 | 
            -
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            import {Amount} from "../type/Amount.sol";
         | 
| 9 8 | 
             
            import {DistributorType} from "../type/DistributorType.sol";
         | 
| 10 | 
            -
            import { | 
| 9 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 10 | 
            +
            import {NftId} from "../type/NftId.sol";
         | 
| 11 | 
            +
            import {ReferralId, ReferralStatus} from "../type/Referral.sol";
         | 
| 11 12 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 12 13 | 
             
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 14 | 
            +
            import {UFixed} from "../type/UFixed.sol";
         | 
| 13 15 |  | 
| 14 16 |  | 
| 15 17 | 
             
            interface IDistributionService is IService {
         | 
| @@ -17,11 +19,11 @@ interface IDistributionService is IService { | |
| 17 19 | 
             
                error ErrorDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
         | 
| 18 20 | 
             
                error ErrorDistributionServiceCallerNotDistributor(address caller);
         | 
| 19 21 | 
             
                error ErrorDistributionServiceInvalidReferralId(ReferralId referralId);
         | 
| 20 | 
            -
                error ErrorDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
         | 
| 21 | 
            -
                error ErrorDistributionServiceDiscountTooLow( | 
| 22 | 
            -
                error ErrorDistributionServiceDiscountTooHigh( | 
| 22 | 
            +
                error ErrorDistributionServiceMaxReferralsExceeded(uint256 limit, uint256 maxReferrals);
         | 
| 23 | 
            +
                error ErrorDistributionServiceDiscountTooLow(UFixed minDiscountPercentage, UFixed discountPercentage);
         | 
| 24 | 
            +
                error ErrorDistributionServiceDiscountTooHigh(UFixed maxDiscountPercentage, UFixed discountPercentage);
         | 
| 23 25 | 
             
                error ErrorDistributionServiceExpiryTooLong(Seconds maxReferralLifetime, Timestamp expiryAt);
         | 
| 24 | 
            -
                error ErrorDistributionServiceInvalidReferral( | 
| 26 | 
            +
                error ErrorDistributionServiceInvalidReferral();
         | 
| 25 27 | 
             
                error ErrorDistributionServiceExpirationInvalid(Timestamp expiryAt);
         | 
| 26 28 | 
             
                error ErrorDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
         | 
| 27 29 | 
             
                error ErrorDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
         | 
| @@ -38,6 +40,12 @@ interface IDistributionService is IService { | |
| 38 40 | 
             
                error ErrorDistributionServiceReferralDistributionMismatch(ReferralId referralId, NftId referralDistributionNft, NftId distributionNftId);
         | 
| 39 41 |  | 
| 40 42 | 
             
                event LogDistributionServiceCommissionWithdrawn(NftId distributorNftId, address recipient, address tokenAddress, Amount amount);
         | 
| 43 | 
            +
                event LogDistributionServiceDistributorTypeCreated(NftId distributionNftId, string name);
         | 
| 44 | 
            +
                event LogDistributionServiceDistributorCreated(NftId distributionNftId, NftId distributorNftId, DistributorType distributorType, address distributor);
         | 
| 45 | 
            +
                event LogDistributionServiceDistributorTypeChanged(NftId distributorNftId, DistributorType oldDistributorType, DistributorType newDistributorType);
         | 
| 46 | 
            +
                event LogDistributionServiceReferralCreated(NftId distributionNftId, NftId distributorNftId, ReferralId referralId, string code);
         | 
| 47 | 
            +
                event LogDistributionServiceReferralProcessed(NftId distributionNftId, NftId distributorNftId, ReferralId referralId, uint32 usedReferrals);
         | 
| 48 | 
            +
                event LogDistributionServiceSaleProcessed(NftId distributionNftId, ReferralId referralId);
         | 
| 41 49 |  | 
| 42 50 | 
             
                function createDistributorType(
         | 
| 43 51 | 
             
                    string memory name,
         | 
| @@ -100,4 +108,8 @@ interface IDistributionService is IService { | |
| 100 108 | 
             
                /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
         | 
| 101 109 | 
             
                /// @return withdrawnAmount the effective withdrawn amount
         | 
| 102 110 | 
             
                function withdrawCommission(NftId distributorNftId, Amount amount) external returns (Amount withdrawnAmount);
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                /// @dev Returns the discount percentage for the provided referral code.
         | 
| 113 | 
            +
                /// The function retuns both the percentage and the status of the referral code.
         | 
| 114 | 
            +
                function getDiscountPercentage(InstanceReader instanceReader, ReferralId referralId) external view returns (UFixed discountPercentage, ReferralStatus status);
         | 
| 103 115 | 
             
            }
         | 
| @@ -140,9 +140,9 @@ contract FireProduct is | |
| 140 140 | 
             
                        revert ErrorFireProductCityUnknown(cityName);
         | 
| 141 141 | 
             
                    }
         | 
| 142 142 |  | 
| 143 | 
            -
                     | 
| 143 | 
            +
                    _setRiskLocked(
         | 
| 144 144 | 
             
                        _riskMapping[cityName],
         | 
| 145 | 
            -
                         | 
| 145 | 
            +
                        true
         | 
| 146 146 | 
             
                    );
         | 
| 147 147 | 
             
                }
         | 
| 148 148 |  | 
| @@ -156,9 +156,9 @@ contract FireProduct is | |
| 156 156 | 
             
                        revert ErrorFireProductCityUnknown(cityName);
         | 
| 157 157 | 
             
                    }
         | 
| 158 158 |  | 
| 159 | 
            -
                     | 
| 159 | 
            +
                    _setRiskLocked(
         | 
| 160 160 | 
             
                        _riskMapping[cityName],
         | 
| 161 | 
            -
                         | 
| 161 | 
            +
                        false
         | 
| 162 162 | 
             
                    );
         | 
| 163 163 | 
             
                }
         | 
| 164 164 |  | 
| @@ -263,7 +263,7 @@ contract FireProduct is | |
| 263 263 | 
             
                    onlyOwner()
         | 
| 264 264 | 
             
                    onlyNftOfType(policyNftId, POLICY())
         | 
| 265 265 | 
             
                {
         | 
| 266 | 
            -
                    _createPolicy(policyNftId, activateAt);
         | 
| 266 | 
            +
                    _createPolicy(policyNftId, activateAt, AmountLib.max());
         | 
| 267 267 | 
             
                    _collectPremium(policyNftId, activateAt);
         | 
| 268 268 | 
             
                }
         | 
| 269 269 |  | 
| @@ -316,7 +316,7 @@ contract FireProduct is | |
| 316 316 | 
             
                        revert ErrorFireProductCityUnknown(cityName);
         | 
| 317 317 | 
             
                    }
         | 
| 318 318 |  | 
| 319 | 
            -
                    if (reportedAt > TimestampLib. | 
| 319 | 
            +
                    if (reportedAt > TimestampLib.current()) {
         | 
| 320 320 | 
             
                        revert ErrorFireProductTimestampInFuture();
         | 
| 321 321 | 
             
                    }
         | 
| 322 322 |  | 
| @@ -100,16 +100,22 @@ contract SimpleProduct is | |
| 100 100 | 
             
                    );
         | 
| 101 101 | 
             
                }
         | 
| 102 102 |  | 
| 103 | 
            -
                function  | 
| 103 | 
            +
                function setRiskLocked(
         | 
| 104 104 | 
             
                    RiskId id,
         | 
| 105 | 
            -
                     | 
| 105 | 
            +
                    bool locked
         | 
| 106 106 | 
             
                ) public {
         | 
| 107 | 
            -
                     | 
| 107 | 
            +
                    _setRiskLocked(
         | 
| 108 108 | 
             
                        id,
         | 
| 109 | 
            -
                         | 
| 109 | 
            +
                        locked
         | 
| 110 110 | 
             
                    );
         | 
| 111 111 | 
             
                }
         | 
| 112 112 |  | 
| 113 | 
            +
                function closeRisk(
         | 
| 114 | 
            +
                    RiskId id
         | 
| 115 | 
            +
                ) public {
         | 
| 116 | 
            +
                    _closeRisk(id);
         | 
| 117 | 
            +
                }
         | 
| 118 | 
            +
             | 
| 113 119 | 
             
                function createApplication(
         | 
| 114 120 | 
             
                    address applicationOwner,
         | 
| 115 121 | 
             
                    RiskId riskId,
         | 
| @@ -143,12 +149,55 @@ contract SimpleProduct is | |
| 143 149 | 
             
                    );
         | 
| 144 150 | 
             
                }
         | 
| 145 151 |  | 
| 152 | 
            +
                function createApplication2(
         | 
| 153 | 
            +
                    address applicationOwner,
         | 
| 154 | 
            +
                    RiskId riskId,
         | 
| 155 | 
            +
                    Amount sumInsuredAmount,
         | 
| 156 | 
            +
                    Amount premiumAmount,
         | 
| 157 | 
            +
                    Seconds lifetime,
         | 
| 158 | 
            +
                    bytes memory applicationData,
         | 
| 159 | 
            +
                    NftId bundleNftId,
         | 
| 160 | 
            +
                    ReferralId referralId
         | 
| 161 | 
            +
                )
         | 
| 162 | 
            +
                    public
         | 
| 163 | 
            +
                    returns (NftId nftId)
         | 
| 164 | 
            +
                {
         | 
| 165 | 
            +
                    return _createApplication(
         | 
| 166 | 
            +
                        applicationOwner,
         | 
| 167 | 
            +
                        riskId,
         | 
| 168 | 
            +
                        sumInsuredAmount,
         | 
| 169 | 
            +
                        premiumAmount,
         | 
| 170 | 
            +
                        lifetime,
         | 
| 171 | 
            +
                        bundleNftId,
         | 
| 172 | 
            +
                        referralId,
         | 
| 173 | 
            +
                        applicationData
         | 
| 174 | 
            +
                    );
         | 
| 175 | 
            +
                }
         | 
| 176 | 
            +
                
         | 
| 177 | 
            +
                function revoke(
         | 
| 178 | 
            +
                    NftId applicationNftId
         | 
| 179 | 
            +
                ) public {
         | 
| 180 | 
            +
                    _revoke(applicationNftId);
         | 
| 181 | 
            +
                }
         | 
| 182 | 
            +
             | 
| 146 183 | 
             
                function createPolicy(
         | 
| 147 184 | 
             
                    NftId applicationNftId,
         | 
| 148 185 | 
             
                    bool requirePremiumPayment,
         | 
| 149 186 | 
             
                    Timestamp activateAt
         | 
| 150 187 | 
             
                ) public {
         | 
| 151 | 
            -
                    _createPolicy(applicationNftId, activateAt);
         | 
| 188 | 
            +
                    _createPolicy(applicationNftId, activateAt, AmountLib.max());
         | 
| 189 | 
            +
                    if (requirePremiumPayment == true) {
         | 
| 190 | 
            +
                        _collectPremium(applicationNftId, activateAt);
         | 
| 191 | 
            +
                    }
         | 
| 192 | 
            +
                }
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                function createPolicy2(
         | 
| 195 | 
            +
                    NftId applicationNftId,
         | 
| 196 | 
            +
                    bool requirePremiumPayment,
         | 
| 197 | 
            +
                    Timestamp activateAt,
         | 
| 198 | 
            +
                    Amount maxPremiumAmount
         | 
| 199 | 
            +
                ) public {
         | 
| 200 | 
            +
                    _createPolicy(applicationNftId, activateAt, maxPremiumAmount);
         | 
| 152 201 | 
             
                    if (requirePremiumPayment == true) {
         | 
| 153 202 | 
             
                        _collectPremium(applicationNftId, activateAt);
         | 
| 154 203 | 
             
                    }
         | 
| @@ -229,11 +278,11 @@ contract SimpleProduct is | |
| 229 278 | 
             
                    _declineClaim(policyNftId, claimId, processData);
         | 
| 230 279 | 
             
                }
         | 
| 231 280 |  | 
| 232 | 
            -
                function  | 
| 281 | 
            +
                function cancelConfirmedClaim(
         | 
| 233 282 | 
             
                    NftId policyNftId,
         | 
| 234 283 | 
             
                    ClaimId claimId
         | 
| 235 284 | 
             
                ) public {
         | 
| 236 | 
            -
                     | 
| 285 | 
            +
                    _cancelConfirmedClaim(policyNftId, claimId);
         | 
| 237 286 | 
             
                }
         | 
| 238 287 |  | 
| 239 288 | 
             
                function createPayout(
         | 
| @@ -266,8 +315,8 @@ contract SimpleProduct is | |
| 266 315 | 
             
                function processPayout(
         | 
| 267 316 | 
             
                    NftId policyNftId,
         | 
| 268 317 | 
             
                    PayoutId payoutId
         | 
| 269 | 
            -
                ) public {
         | 
| 270 | 
            -
                    _processPayout(policyNftId, payoutId);
         | 
| 318 | 
            +
                ) public returns (Amount netPayoutAmount, Amount processingFeeAmount) {
         | 
| 319 | 
            +
                    (netPayoutAmount, processingFeeAmount) = _processPayout(policyNftId, payoutId);
         | 
| 271 320 | 
             
                }
         | 
| 272 321 |  | 
| 273 322 | 
             
                function createOracleRequest(
         | 
| @@ -299,6 +348,28 @@ contract SimpleProduct is | |
| 299 348 | 
             
                    }
         | 
| 300 349 | 
             
                }
         | 
| 301 350 |  | 
| 351 | 
            +
                function createOracleRequest2(
         | 
| 352 | 
            +
                    NftId oracleNftId,
         | 
| 353 | 
            +
                    string memory requestText,
         | 
| 354 | 
            +
                    Timestamp expiryAt,
         | 
| 355 | 
            +
                    bool synchronous,
         | 
| 356 | 
            +
                    string memory callbackMethod
         | 
| 357 | 
            +
                )
         | 
| 358 | 
            +
                    public
         | 
| 359 | 
            +
                    // restricted()
         | 
| 360 | 
            +
                    returns (RequestId)
         | 
| 361 | 
            +
                {
         | 
| 362 | 
            +
                    bytes memory requestData = abi.encode(SimpleOracle.SimpleRequest(
         | 
| 363 | 
            +
                        synchronous,
         | 
| 364 | 
            +
                        requestText));
         | 
| 365 | 
            +
             | 
| 366 | 
            +
                    return _oracleService.request(
         | 
| 367 | 
            +
                        oracleNftId, 
         | 
| 368 | 
            +
                        requestData, 
         | 
| 369 | 
            +
                        expiryAt, 
         | 
| 370 | 
            +
                        callbackMethod);
         | 
| 371 | 
            +
                }
         | 
| 372 | 
            +
             | 
| 302 373 | 
             
                function cancelOracleRequest(
         | 
| 303 374 | 
             
                    RequestId requestId
         | 
| 304 375 | 
             
                )
         | 
| @@ -329,7 +400,7 @@ contract SimpleProduct is | |
| 329 400 | 
             
                    SimpleOracle.SimpleResponse memory response = abi.decode(
         | 
| 330 401 | 
             
                        responseData, (SimpleOracle.SimpleResponse));
         | 
| 331 402 |  | 
| 332 | 
            -
                    if (response.revertInCall && response.revertUntil >= TimestampLib. | 
| 403 | 
            +
                    if (response.revertInCall && response.revertUntil >= TimestampLib.current()) {
         | 
| 333 404 | 
             
                        revert ErrorSimpleProductRevertedWhileProcessingResponse(requestId);
         | 
| 334 405 | 
             
                    }
         | 
| 335 406 |  | 
| @@ -347,21 +418,14 @@ contract SimpleProduct is | |
| 347 418 | 
             
                }
         | 
| 348 419 |  | 
| 349 420 |  | 
| 350 | 
            -
                function  | 
| 421 | 
            +
                function doSomethingOnlyWhenActive() 
         | 
| 351 422 | 
             
                    public 
         | 
| 352 | 
            -
                     | 
| 423 | 
            +
                    onlyActive()
         | 
| 353 424 | 
             
                    returns (bool) 
         | 
| 354 425 | 
             
                {
         | 
| 355 426 | 
             
                    return true;
         | 
| 356 427 | 
             
                }
         | 
| 357 428 |  | 
| 358 | 
            -
                function doWhenNotLocked() 
         | 
| 359 | 
            -
                    public 
         | 
| 360 | 
            -
                    restricted()
         | 
| 361 | 
            -
                    returns (bool) 
         | 
| 362 | 
            -
                {
         | 
| 363 | 
            -
                    return true;
         | 
| 364 | 
            -
                }
         | 
| 365 429 |  | 
| 366 430 | 
             
                function getOracleService() public view returns (IOracleService) {
         | 
| 367 431 | 
             
                    return _oracleService;
         |