@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f3b4c66-505
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 +46 -8
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +203 -77
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +200 -16
- 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 +142 -44
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +107 -15
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +165 -391
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +206 -27
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +103 -321
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +378 -355
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +133 -119
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +115 -143
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +248 -122
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1475 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2032 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +589 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1523 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1195 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1655 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +158 -57
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +194 -154
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +446 -143
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +150 -90
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1031 -298
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +131 -266
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -92
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +668 -511
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +114 -340
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +180 -29
- 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 +102 -130
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +90 -308
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +119 -387
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +206 -27
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +275 -314
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +122 -108
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +172 -97
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +124 -219
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +464 -312
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -394
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +653 -532
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +163 -97
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +194 -178
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +100 -90
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +243 -400
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +206 -27
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +415 -234
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +140 -114
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +136 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +308 -16
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +354 -106
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +157 -83
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +235 -202
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +88 -8
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +441 -304
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +141 -99
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +247 -313
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -122
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +241 -398
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +688 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +736 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +334 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +540 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +349 -167
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +420 -246
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +76 -265
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +501 -626
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +136 -128
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +541 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +89 -88
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +446 -276
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +102 -130
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -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 +55 -2
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +89 -307
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -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 +22 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +122 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +57 -111
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +134 -125
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +77 -16
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +76 -106
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +210 -366
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +122 -95
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +122 -164
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +99 -85
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +149 -108
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
- 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 +33 -9
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- 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 +3 -3
- 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 +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- 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 +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- 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 +125 -7
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- 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/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/authorization/AccessAdmin.sol +232 -134
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +321 -202
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +17 -10
- package/contracts/authorization/IAuthorization.sol +27 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +15 -12
- package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
- package/contracts/distribution/Distribution.sol +42 -48
- package/contracts/distribution/DistributionService.sol +152 -104
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +31 -25
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +90 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +437 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +85 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +106 -0
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +377 -0
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +21 -37
- package/contracts/instance/IInstanceService.sol +9 -29
- package/contracts/instance/Instance.sol +59 -66
- package/contracts/instance/InstanceAdmin.sol +256 -85
- package/contracts/instance/InstanceAuthorizationV3.sol +56 -47
- package/contracts/instance/InstanceReader.sol +288 -43
- package/contracts/instance/InstanceService.sol +125 -164
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +23 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +11 -4
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +14 -14
- package/contracts/instance/module/IDistribution.sol +5 -2
- package/contracts/instance/module/IPolicy.sol +26 -25
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +7 -17
- package/contracts/oracle/OracleService.sol +113 -81
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +38 -27
- package/contracts/pool/BasicPoolAuthorization.sol +32 -11
- package/contracts/pool/BundleService.sol +179 -125
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +29 -34
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +90 -75
- package/contracts/pool/Pool.sol +145 -128
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +540 -217
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +87 -43
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +11 -12
- package/contracts/product/BasicProductAuthorization.sol +24 -11
- package/contracts/product/ClaimService.sol +368 -153
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +9 -2
- package/contracts/product/IClaimService.sol +44 -8
- package/contracts/product/IPolicyService.sol +53 -38
- package/contracts/product/IPricingService.sol +11 -10
- package/contracts/product/IProductComponent.sol +27 -5
- package/contracts/product/{IProductService.sol → IRiskService.sol} +8 -8
- package/contracts/product/PolicyService.sol +464 -281
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +71 -62
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +162 -94
- package/contracts/product/RiskService.sol +154 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +60 -28
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +357 -203
- package/contracts/registry/RegistryAdmin.sol +171 -182
- package/contracts/registry/RegistryService.sol +37 -48
- package/contracts/registry/RegistryServiceManager.sol +3 -3
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +258 -232
- package/contracts/registry/ServiceAuthorizationV3.sol +99 -52
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +74 -127
- package/contracts/shared/ComponentService.sol +426 -385
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +28 -17
- package/contracts/shared/ContractLib.sol +253 -0
- package/contracts/shared/IComponent.sol +8 -17
- package/contracts/shared/IComponentService.sol +41 -37
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +23 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +73 -48
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +29 -9
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +55 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +15 -32
- package/contracts/shared/TokenHandler.sol +309 -26
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +7 -9
- package/contracts/staking/IStakingService.sol +8 -3
- package/contracts/staking/StakeManagerLib.sol +19 -26
- package/contracts/staking/Staking.sol +71 -61
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +13 -6
- package/contracts/staking/StakingService.sol +54 -35
- package/contracts/staking/StakingServiceManager.sol +6 -5
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +7 -0
- package/contracts/type/ObjectType.sol +52 -20
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +38 -6
- package/contracts/type/RoleId.sol +23 -15
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +10 -5
- package/contracts/type/UFixed.sol +13 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +5 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/product/ProductService.sol +0 -99
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -1,36 +1,36 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import { | 
| 5 | 
            -
             | 
| 6 | 
            -
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 7 | 
            -
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 4 | 
            +
            import {IAccountingService} from "../accounting/IAccountingService.sol";
         | 
| 8 5 | 
             
            import {IComponentService} from "../shared/IComponentService.sol";
         | 
| 6 | 
            +
            import {IDistribution} from "../instance/module/IDistribution.sol";
         | 
| 7 | 
            +
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 8 | 
            +
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 9 9 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 10 | 
            +
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 10 11 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 11 | 
            -
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 12 12 | 
             
            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 {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 17 | 
            -
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 18 | 
            -
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 19 | 
            -
            import {ObjectType, COMPONENT, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, REGISTRY} from "../type/ObjectType.sol";
         | 
| 20 16 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 21 | 
            -
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 22 | 
            -
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         | 
| 23 17 | 
             
            import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
         | 
| 18 | 
            +
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 19 | 
            +
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 20 | 
            +
            import {ObjectType, ACCOUNTING, COMPONENT, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, REGISTRY} from "../type/ObjectType.sol";
         | 
| 21 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 22 | 
            +
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 24 23 | 
             
            import {ReferralId, ReferralLib} from "../type/Referral.sol";
         | 
| 24 | 
            +
            import {Seconds} from "../type/Seconds.sol";
         | 
| 25 25 | 
             
            import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
         | 
| 26 | 
            -
            import { | 
| 27 | 
            -
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 26 | 
            +
            import {UFixed} from "../type/UFixed.sol";
         | 
| 28 27 |  | 
| 29 28 |  | 
| 30 29 | 
             
            contract DistributionService is
         | 
| 31 30 | 
             
                ComponentVerifyingService,
         | 
| 32 31 | 
             
                IDistributionService
         | 
| 33 32 | 
             
            {
         | 
| 33 | 
            +
                IAccountingService private _accountingService;
         | 
| 34 34 | 
             
                IComponentService private _componentService;
         | 
| 35 35 | 
             
                IInstanceService private _instanceService;
         | 
| 36 36 | 
             
                IRegistryService private _registryService;
         | 
| @@ -40,21 +40,22 @@ contract DistributionService is | |
| 40 40 | 
             
                    bytes memory data
         | 
| 41 41 | 
             
                )
         | 
| 42 42 | 
             
                    internal
         | 
| 43 | 
            -
                    initializer
         | 
| 44 43 | 
             
                    virtual override
         | 
| 44 | 
            +
                    initializer()
         | 
| 45 45 | 
             
                {
         | 
| 46 | 
            -
                     | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
                     | 
| 50 | 
            -
                    //      owner is DistributionServiceManager deployer
         | 
| 51 | 
            -
                    initializeService(registryAddress, address(0), owner);
         | 
| 46 | 
            +
                    (
         | 
| 47 | 
            +
                        address authority,
         | 
| 48 | 
            +
                        address registry
         | 
| 49 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 52 50 |  | 
| 51 | 
            +
                    __Service_init(authority, registry, owner);
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
         | 
| 53 54 | 
             
                    _componentService = IComponentService(_getServiceAddress(COMPONENT()));
         | 
| 54 55 | 
             
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 55 56 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 56 57 |  | 
| 57 | 
            -
                     | 
| 58 | 
            +
                    _registerInterface(type(IDistributionService).interfaceId);
         | 
| 58 59 | 
             
                }
         | 
| 59 60 |  | 
| 60 61 |  | 
| @@ -64,7 +65,7 @@ contract DistributionService is | |
| 64 65 | 
             
                    UFixed maxDiscountPercentage,
         | 
| 65 66 | 
             
                    UFixed commissionPercentage,
         | 
| 66 67 | 
             
                    uint32 maxReferralCount,
         | 
| 67 | 
            -
                     | 
| 68 | 
            +
                    Seconds maxReferralLifetime,
         | 
| 68 69 | 
             
                    bool allowSelfReferrals,
         | 
| 69 70 | 
             
                    bool allowRenewals,
         | 
| 70 71 | 
             
                    bytes memory data
         | 
| @@ -73,14 +74,13 @@ contract DistributionService is | |
| 73 74 | 
             
                    returns (DistributorType distributorType)
         | 
| 74 75 | 
             
                {
         | 
| 75 76 | 
             
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| 76 | 
            -
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 77 77 |  | 
| 78 78 | 
             
                    {
         | 
| 79 | 
            -
                        NftId productNftId = _getProductNftId( | 
| 80 | 
            -
                        IComponents. | 
| 79 | 
            +
                        NftId productNftId = _getProductNftId(distributionNftId);
         | 
| 80 | 
            +
                        IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
         | 
| 81 81 |  | 
| 82 | 
            -
                        UFixed variableDistributionFees =  | 
| 83 | 
            -
                        UFixed variableFeesPartsTotal =  | 
| 82 | 
            +
                        UFixed variableDistributionFees = feeInfo.distributionFee.fractionalFee;
         | 
| 83 | 
            +
                        UFixed variableFeesPartsTotal = feeInfo.minDistributionOwnerFee.fractionalFee + commissionPercentage;
         | 
| 84 84 |  | 
| 85 85 | 
             
                        if (variableFeesPartsTotal > variableDistributionFees) {
         | 
| 86 86 | 
             
                            revert ErrorDistributionServiceVariableFeesTooHight(variableDistributionFees.toInt1000(), variableFeesPartsTotal.toInt1000());
         | 
| @@ -95,6 +95,7 @@ contract DistributionService is | |
| 95 95 | 
             
                    distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
         | 
| 96 96 | 
             
                    IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
         | 
| 97 97 | 
             
                        name,
         | 
| 98 | 
            +
                        distributionNftId,
         | 
| 98 99 | 
             
                        minDiscountPercentage,
         | 
| 99 100 | 
             
                        maxDiscountPercentage,
         | 
| 100 101 | 
             
                        commissionPercentage,
         | 
| @@ -118,6 +119,7 @@ contract DistributionService is | |
| 118 119 | 
             
                    returns (NftId distributorNftId)
         | 
| 119 120 | 
             
                {
         | 
| 120 121 | 
             
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| 122 | 
            +
                    _checkDistributionType(instance.getInstanceReader(), distributorType, distributionNftId);
         | 
| 121 123 |  | 
| 122 124 | 
             
                    distributorNftId = _registryService.registerDistributor(
         | 
| 123 125 | 
             
                        IRegistry.ObjectInfo(
         | 
| @@ -139,21 +141,23 @@ contract DistributionService is | |
| 139 141 | 
             
                    instance.getInstanceStore().createDistributor(distributorNftId, info);
         | 
| 140 142 | 
             
                }
         | 
| 141 143 |  | 
| 142 | 
            -
                 | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
                 | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
                 | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 144 | 
            +
                function changeDistributorType(
         | 
| 145 | 
            +
                    NftId distributorNftId,
         | 
| 146 | 
            +
                    DistributorType newDistributorType,
         | 
| 147 | 
            +
                    bytes memory data
         | 
| 148 | 
            +
                )
         | 
| 149 | 
            +
                    external
         | 
| 150 | 
            +
                    virtual
         | 
| 151 | 
            +
                {
         | 
| 152 | 
            +
                    _checkNftType(distributorNftId, DISTRIBUTOR());
         | 
| 153 | 
            +
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| 154 | 
            +
                    _checkDistributionType(instance.getInstanceReader(), newDistributorType, distributionNftId);
         | 
| 155 | 
            +
                    
         | 
| 156 | 
            +
                    IDistribution.DistributorInfo memory distributorInfo = instance.getInstanceReader().getDistributorInfo(distributorNftId);
         | 
| 157 | 
            +
                    distributorInfo.distributorType = newDistributorType;
         | 
| 158 | 
            +
                    distributorInfo.data = data;
         | 
| 159 | 
            +
                    instance.getInstanceStore().updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
         | 
| 160 | 
            +
                }
         | 
| 157 161 |  | 
| 158 162 |  | 
| 159 163 | 
             
                function createReferral(
         | 
| @@ -166,79 +170,111 @@ contract DistributionService is | |
| 166 170 | 
             
                )
         | 
| 167 171 | 
             
                    external
         | 
| 168 172 | 
             
                    virtual
         | 
| 173 | 
            +
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 169 174 | 
             
                    returns (ReferralId referralId)
         | 
| 170 175 | 
             
                {
         | 
| 171 176 | 
             
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| 172 177 |  | 
| 173 178 | 
             
                    if (bytes(code).length == 0) {
         | 
| 174 | 
            -
                        revert  | 
| 179 | 
            +
                        revert ErrorDistributionServiceInvalidReferral(code);
         | 
| 175 180 | 
             
                    }
         | 
| 176 | 
            -
                    if (expiryAt.eqz()) {
         | 
| 177 | 
            -
                        revert  | 
| 181 | 
            +
                    if (expiryAt.eqz() || expiryAt.lte(TimestampLib.blockTimestamp())) {
         | 
| 182 | 
            +
                        revert ErrorDistributionServiceExpirationInvalid(expiryAt);
         | 
| 178 183 | 
             
                    }
         | 
| 179 184 |  | 
| 180 | 
            -
                     | 
| 181 | 
            -
                     | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
                    if (distributorTypeData.maxReferralCount < maxReferrals) {
         | 
| 185 | 
            -
                        revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
         | 
| 186 | 
            -
                    }
         | 
| 187 | 
            -
                    if (distributorTypeData.minDiscountPercentage > discountPercentage) {
         | 
| 188 | 
            -
                        revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
         | 
| 185 | 
            +
                    NftId distributorDistributionNftId = getRegistry().getParentNftId(distributorNftId);
         | 
| 186 | 
            +
                    if (distributorDistributionNftId != distributionNftId) {
         | 
| 187 | 
            +
                        revert ErrorDistributionServiceDistributorDistributionMismatch(distributorNftId, distributorDistributionNftId, distributionNftId);
         | 
| 189 188 | 
             
                    }
         | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
                         | 
| 189 | 
            +
             | 
| 190 | 
            +
                    {
         | 
| 191 | 
            +
                        InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 192 | 
            +
                        DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
         | 
| 193 | 
            +
                        IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                        if (distributorTypeData.maxReferralCount < maxReferrals) {
         | 
| 196 | 
            +
                            revert ErrorDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
         | 
| 197 | 
            +
                        }
         | 
| 198 | 
            +
                        if (distributorTypeData.minDiscountPercentage > discountPercentage) {
         | 
| 199 | 
            +
                            revert ErrorDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
         | 
| 200 | 
            +
                        }
         | 
| 201 | 
            +
                        if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
         | 
| 202 | 
            +
                            revert ErrorDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
         | 
| 203 | 
            +
                        }
         | 
| 204 | 
            +
                        if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime.toInt()) {
         | 
| 205 | 
            +
                            revert ErrorDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt);
         | 
| 206 | 
            +
                        }
         | 
| 195 207 | 
             
                    }
         | 
| 196 208 |  | 
| 197 | 
            -
                     | 
| 198 | 
            -
             | 
| 199 | 
            -
                         | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 205 | 
            -
             | 
| 206 | 
            -
             | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 209 | 
            +
                    {
         | 
| 210 | 
            +
                        referralId = ReferralLib.toReferralId(distributionNftId, code);
         | 
| 211 | 
            +
                        IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
         | 
| 212 | 
            +
                            distributionNftId,
         | 
| 213 | 
            +
                            distributorNftId,
         | 
| 214 | 
            +
                            code,
         | 
| 215 | 
            +
                            discountPercentage,
         | 
| 216 | 
            +
                            maxReferrals,
         | 
| 217 | 
            +
                            0, // used referrals
         | 
| 218 | 
            +
                            expiryAt,
         | 
| 219 | 
            +
                            data
         | 
| 220 | 
            +
                        );
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                        instance.getInstanceStore().createReferral(referralId, info);
         | 
| 223 | 
            +
                    }
         | 
| 210 224 | 
             
                }
         | 
| 211 225 |  | 
| 226 | 
            +
                /// @inheritdoc IDistributionService
         | 
| 227 | 
            +
                function processReferral(
         | 
| 228 | 
            +
                    NftId distributionNftId, 
         | 
| 229 | 
            +
                    ReferralId referralId
         | 
| 230 | 
            +
                ) 
         | 
| 231 | 
            +
                    external
         | 
| 232 | 
            +
                    virtual
         | 
| 233 | 
            +
                    restricted()
         | 
| 234 | 
            +
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 235 | 
            +
                {
         | 
| 236 | 
            +
                    if (referralIsValid(distributionNftId, referralId)) {
         | 
| 237 | 
            +
                        IRegistry registry = getRegistry();
         | 
| 238 | 
            +
                        IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 239 | 
            +
                        IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                        // update book keeping for referral info
         | 
| 242 | 
            +
                        IDistribution.ReferralInfo memory referralInfo = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 243 | 
            +
                        referralInfo.usedReferrals += 1;
         | 
| 244 | 
            +
                        instance.getInstanceStore().updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 245 | 
            +
                    }
         | 
| 246 | 
            +
                }
         | 
| 212 247 |  | 
| 213 248 | 
             
                function processSale(
         | 
| 214 249 | 
             
                    NftId distributionNftId, // assume always of distribution type
         | 
| 215 250 | 
             
                    ReferralId referralId,
         | 
| 216 | 
            -
                    IPolicy. | 
| 251 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 217 252 | 
             
                )
         | 
| 218 253 | 
             
                    external
         | 
| 219 254 | 
             
                    virtual
         | 
| 220 | 
            -
                    restricted
         | 
| 255 | 
            +
                    restricted()
         | 
| 256 | 
            +
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 221 257 | 
             
                {
         | 
| 222 | 
            -
                     | 
| 258 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 259 | 
            +
                    IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 260 | 
            +
                    IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
         | 
| 223 261 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 224 262 | 
             
                    InstanceStore store = instance.getInstanceStore();
         | 
| 225 263 |  | 
| 226 264 | 
             
                    // get distribution owner fee amount
         | 
| 227 | 
            -
                    Amount distributionOwnerFee =  | 
| 265 | 
            +
                    Amount distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
         | 
| 228 266 |  | 
| 229 267 | 
             
                    // update referral/distributor info if applicable
         | 
| 230 268 | 
             
                    if (referralIsValid(distributionNftId, referralId)) {
         | 
| 231 269 |  | 
| 232 270 | 
             
                        // increase distribution balance by commission amount and distribution owner fee
         | 
| 233 | 
            -
                        Amount commissionAmount =  | 
| 234 | 
            -
                         | 
| 271 | 
            +
                        Amount commissionAmount = premium.commissionAmount;
         | 
| 272 | 
            +
                        _accountingService.increaseDistributionBalance(store, distributionNftId, commissionAmount, distributionOwnerFee);
         | 
| 235 273 |  | 
| 236 274 | 
             
                        // update book keeping for referral info
         | 
| 237 275 | 
             
                        IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 238 | 
            -
                        referralInfo.usedReferrals += 1;
         | 
| 239 | 
            -
                        store.updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 240 276 |  | 
| 241 | 
            -
                         | 
| 277 | 
            +
                        _accountingService.increaseDistributorBalance(store, referralInfo.distributorNftId, AmountLib.zero(), commissionAmount);
         | 
| 242 278 |  | 
| 243 279 | 
             
                        // update book keeping for distributor info
         | 
| 244 280 | 
             
                        IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
         | 
| @@ -246,7 +282,7 @@ contract DistributionService is | |
| 246 282 | 
             
                        store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
         | 
| 247 283 | 
             
                    } else {
         | 
| 248 284 | 
             
                        // increase distribution balance by distribution owner fee
         | 
| 249 | 
            -
                         | 
| 285 | 
            +
                        _accountingService.increaseDistributionBalance(store, distributionNftId, AmountLib.zero(), distributionOwnerFee);
         | 
| 250 286 | 
             
                    }
         | 
| 251 287 | 
             
                }
         | 
| 252 288 |  | 
| @@ -255,13 +291,14 @@ contract DistributionService is | |
| 255 291 | 
             
                    public 
         | 
| 256 292 | 
             
                    virtual
         | 
| 257 293 | 
             
                    // TODO: restricted() (once #462 is done)
         | 
| 294 | 
            +
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 258 295 | 
             
                    returns (Amount withdrawnAmount) 
         | 
| 259 296 | 
             
                {
         | 
| 260 297 | 
             
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| 261 298 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 262 299 |  | 
| 263 300 | 
             
                    IComponents.ComponentInfo memory distributionInfo = reader.getComponentInfo(distributionNftId);
         | 
| 264 | 
            -
                    address distributionWallet = distributionInfo. | 
| 301 | 
            +
                    address distributionWallet = distributionInfo.tokenHandler.getWallet();
         | 
| 265 302 |  | 
| 266 303 | 
             
                    Amount commissionAmount = reader.getFeeAmount(distributorNftId);
         | 
| 267 304 |  | 
| @@ -275,59 +312,70 @@ contract DistributionService is | |
| 275 312 | 
             
                        }
         | 
| 276 313 | 
             
                    }
         | 
| 277 314 |  | 
| 278 | 
            -
                    if (withdrawnAmount.eqz()) {
         | 
| 279 | 
            -
                        revert ErrorDistributionServiceCommissionWithdrawAmountIsZero();
         | 
| 280 | 
            -
                    }
         | 
| 281 | 
            -
             | 
| 282 | 
            -
                    // check allowance
         | 
| 283 | 
            -
                    IERC20Metadata token = IERC20Metadata(distributionInfo.token);
         | 
| 284 | 
            -
                    uint256 tokenAllowance = token.allowance(distributionWallet, address(distributionInfo.tokenHandler));
         | 
| 285 | 
            -
                    if (tokenAllowance < withdrawnAmount.toInt()) {
         | 
| 286 | 
            -
                        revert ErrorDistributionServiceWalletAllowanceTooSmall(distributionWallet, address(distributionInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
         | 
| 287 | 
            -
                    }
         | 
| 288 | 
            -
             | 
| 289 315 | 
             
                    // decrease fee counters by withdrawnAmount and update distributor info
         | 
| 290 316 | 
             
                    {
         | 
| 291 317 | 
             
                        InstanceStore store = instance.getInstanceStore();
         | 
| 292 318 | 
             
                        // decrease fee counter for distribution balance
         | 
| 293 | 
            -
                         | 
| 319 | 
            +
                        _accountingService.decreaseDistributionBalance(store, distributionNftId, withdrawnAmount, AmountLib.zero());
         | 
| 294 320 | 
             
                        // decrease fee counter for distributor fee
         | 
| 295 | 
            -
                         | 
| 321 | 
            +
                        _accountingService.decreaseDistributorBalance(store, distributorNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 296 322 | 
             
                    }
         | 
| 297 323 |  | 
| 298 324 | 
             
                    // transfer amount to distributor
         | 
| 299 325 | 
             
                    {
         | 
| 300 326 | 
             
                        address distributor = getRegistry().ownerOf(distributorNftId);
         | 
| 301 | 
            -
                         | 
| 302 | 
            -
                        distributionInfo.tokenHandler. | 
| 303 | 
            -
             | 
| 304 | 
            -
                        emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(token), withdrawnAmount);
         | 
| 327 | 
            +
                        emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(distributionInfo.token), withdrawnAmount);
         | 
| 328 | 
            +
                        distributionInfo.tokenHandler.pushToken(distributor, withdrawnAmount);
         | 
| 305 329 | 
             
                    }
         | 
| 306 330 | 
             
                }
         | 
| 307 331 |  | 
| 308 | 
            -
                function referralIsValid(NftId distributionNftId, ReferralId referralId)  | 
| 332 | 
            +
                function referralIsValid(NftId distributionNftId, ReferralId referralId) 
         | 
| 333 | 
            +
                    public 
         | 
| 334 | 
            +
                    view 
         | 
| 335 | 
            +
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 336 | 
            +
                    returns (bool isValid) 
         | 
| 337 | 
            +
                {
         | 
| 309 338 | 
             
                    if (distributionNftId.eqz() || referralId.eqz()) {
         | 
| 310 339 | 
             
                        return false;
         | 
| 311 340 | 
             
                    }
         | 
| 312 341 |  | 
| 313 | 
            -
                     | 
| 342 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 343 | 
            +
                    IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 344 | 
            +
                    IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
         | 
| 314 345 | 
             
                    IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 315 346 |  | 
| 316 347 | 
             
                    if (info.distributorNftId.eqz()) {
         | 
| 317 348 | 
             
                        return false;
         | 
| 318 349 | 
             
                    }
         | 
| 319 350 |  | 
| 351 | 
            +
                    // ensure the referral was created on the same distribution
         | 
| 352 | 
            +
                    if(info.distributionNftId != distributionNftId) {
         | 
| 353 | 
            +
                        revert ErrorDistributionServiceReferralDistributionMismatch(referralId, info.distributionNftId, distributionNftId);
         | 
| 354 | 
            +
                    }
         | 
| 355 | 
            +
             | 
| 320 356 | 
             
                    isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
         | 
| 321 357 | 
             
                    isValid = isValid && info.usedReferrals < info.maxReferrals;
         | 
| 322 358 | 
             
                }
         | 
| 323 359 |  | 
| 360 | 
            +
                function _checkDistributionType(InstanceReader instanceReader, DistributorType distributorType, NftId expectedDistributionNftId) 
         | 
| 361 | 
            +
                    internal
         | 
| 362 | 
            +
                    view 
         | 
| 363 | 
            +
                {
         | 
| 364 | 
            +
                    // enfore distributor type belongs to the calling distribution
         | 
| 365 | 
            +
                    NftId distributorTypeDistributionNftId = instanceReader.getDistributorTypeInfo(distributorType).distributionNftId;
         | 
| 366 | 
            +
             | 
| 367 | 
            +
                    if (distributorTypeDistributionNftId != expectedDistributionNftId) {
         | 
| 368 | 
            +
                        revert ErrorDistributionServiceDistributorTypeDistributionMismatch(distributorType, distributorTypeDistributionNftId, expectedDistributionNftId);
         | 
| 369 | 
            +
                    }
         | 
| 370 | 
            +
                }
         | 
| 371 | 
            +
             | 
| 324 372 | 
             
                function _getInstanceForDistribution(NftId distributionNftId)
         | 
| 325 373 | 
             
                    internal
         | 
| 326 374 | 
             
                    view
         | 
| 327 375 | 
             
                    returns(IInstance instance)
         | 
| 328 376 | 
             
                {
         | 
| 329 | 
            -
                    NftId instanceNftId = getRegistry(). | 
| 330 | 
            -
                    address instanceAddress = getRegistry(). | 
| 377 | 
            +
                    NftId instanceNftId = getRegistry().getParentNftId(distributionNftId);
         | 
| 378 | 
            +
                    address instanceAddress = getRegistry().getObjectAddress(instanceNftId);
         | 
| 331 379 | 
             
                    return IInstance(instanceAddress);
         | 
| 332 380 | 
             
                }
         | 
| 333 381 |  | 
| @@ -12,15 +12,15 @@ contract DistributionServiceManager is ProxyManager { | |
| 12 12 | 
             
                /// @dev initializes proxy manager with distribution service implementation and deploys instance
         | 
| 13 13 | 
             
                constructor(
         | 
| 14 14 | 
             
                    address authority, 
         | 
| 15 | 
            -
                    address  | 
| 15 | 
            +
                    address registry,
         | 
| 16 16 | 
             
                    bytes32 salt
         | 
| 17 17 | 
             
                ) 
         | 
| 18 | 
            -
                    ProxyManager(registryAddress)
         | 
| 19 18 | 
             
                {
         | 
| 20 | 
            -
                    DistributionService  | 
| 21 | 
            -
                    bytes memory data = abi.encode( | 
| 22 | 
            -
                    IVersionable versionable =  | 
| 23 | 
            -
                         | 
| 19 | 
            +
                    DistributionService svc = new DistributionService{salt: salt}();
         | 
| 20 | 
            +
                    bytes memory data = abi.encode(authority, registry);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 23 | 
            +
                        address(svc), 
         | 
| 24 24 | 
             
                        data,
         | 
| 25 25 | 
             
                        salt);
         | 
| 26 26 |  | 
| @@ -12,7 +12,7 @@ interface IDistributionComponent is IInstanceLinkedComponent { | |
| 12 12 | 
             
                error ErrorDistributionNotDistributor(address distributor);
         | 
| 13 13 | 
             
                error ErrorDistributionAlreadyDistributor(address distributor, NftId distributorNftId);
         | 
| 14 14 |  | 
| 15 | 
            -
                event LogDistributorUpdated(address to, address  | 
| 15 | 
            +
                event LogDistributorUpdated(address to, address operator);
         | 
| 16 16 |  | 
| 17 17 | 
             
                /// @dev Returns true iff the provided address is registered as a distributor with this distribution component.
         | 
| 18 18 | 
             
                function isDistributor(address candidate) external view returns (bool);
         | 
| @@ -3,39 +3,39 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {Amount} from "../type/Amount.sol";
         | 
| 5 5 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 6 | 
            -
            import {Fee} from "../type/Fee.sol";
         | 
| 7 6 | 
             
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 8 7 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 9 8 | 
             
            import {UFixed} from "../type/UFixed.sol";
         | 
| 10 9 | 
             
            import {DistributorType} from "../type/DistributorType.sol";
         | 
| 11 10 | 
             
            import {ReferralId} from "../type/Referral.sol";
         | 
| 11 | 
            +
            import {Seconds} from "../type/Seconds.sol";
         | 
| 12 12 | 
             
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 13 13 |  | 
| 14 14 |  | 
| 15 15 | 
             
            interface IDistributionService is IService {
         | 
| 16 | 
            -
             | 
| 17 16 | 
             
                error ErrorDistributionServiceCallerNotRegistered(address caller);
         | 
| 18 | 
            -
                error  | 
| 19 | 
            -
                error  | 
| 20 | 
            -
                error  | 
| 21 | 
            -
                error  | 
| 22 | 
            -
                error  | 
| 23 | 
            -
                error  | 
| 24 | 
            -
                error  | 
| 25 | 
            -
                error  | 
| 26 | 
            -
                error  | 
| 27 | 
            -
                error  | 
| 28 | 
            -
                error  | 
| 17 | 
            +
                error ErrorDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
         | 
| 18 | 
            +
                error ErrorDistributionServiceCallerNotDistributor(address caller);
         | 
| 19 | 
            +
                error ErrorDistributionServiceInvalidReferralId(ReferralId referralId);
         | 
| 20 | 
            +
                error ErrorDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
         | 
| 21 | 
            +
                error ErrorDistributionServiceDiscountTooLow(uint256 minDiscountPercentage, uint256 discountPercentage);
         | 
| 22 | 
            +
                error ErrorDistributionServiceDiscountTooHigh(uint256 maxDiscountPercentage, uint256 discountPercentage);
         | 
| 23 | 
            +
                error ErrorDistributionServiceExpiryTooLong(Seconds maxReferralLifetime, Timestamp expiryAt);
         | 
| 24 | 
            +
                error ErrorDistributionServiceInvalidReferral(string code);
         | 
| 25 | 
            +
                error ErrorDistributionServiceExpirationInvalid(Timestamp expiryAt);
         | 
| 26 | 
            +
                error ErrorDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
         | 
| 27 | 
            +
                error ErrorDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
         | 
| 28 | 
            +
                error ErrorDistributionServiceDistributorTypeDistributionMismatch(DistributorType distributorType, NftId distributorTypeDistributionNftId, NftId distributionNftId);
         | 
| 29 | 
            +
                error ErrorDistributionServiceDistributorDistributionMismatch(NftId distributorNftId, NftId distributorDistributionNftId, NftId distributionNftId);
         | 
| 29 30 |  | 
| 30 31 | 
             
                error ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 31 | 
            -
                 | 
| 32 | 
            -
                error ErrorDistributionServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
         | 
| 33 | 
            -
             | 
| 32 | 
            +
                
         | 
| 34 33 | 
             
                error ErrorDistributionServiceVariableFeesTooHight(uint256 maxDiscountPercentage, uint256 limit);
         | 
| 35 34 | 
             
                error ErrorDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
         | 
| 36 35 |  | 
| 37 | 
            -
                error  | 
| 36 | 
            +
                error ErrorDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
         | 
| 38 37 | 
             
                error ErrorDistributionServiceInvalidFeeTransferred(Amount transferredDistributionFeeAmount, Amount expectedDistributionFeeAmount);
         | 
| 38 | 
            +
                error ErrorDistributionServiceReferralDistributionMismatch(ReferralId referralId, NftId referralDistributionNft, NftId distributionNftId);
         | 
| 39 39 |  | 
| 40 40 | 
             
                event LogDistributionServiceCommissionWithdrawn(NftId distributorNftId, address recipient, address tokenAddress, Amount amount);
         | 
| 41 41 |  | 
| @@ -45,7 +45,7 @@ interface IDistributionService is IService { | |
| 45 45 | 
             
                    UFixed maxDiscountPercentage,
         | 
| 46 46 | 
             
                    UFixed commissionPercentage,
         | 
| 47 47 | 
             
                    uint32 maxReferralCount,
         | 
| 48 | 
            -
                     | 
| 48 | 
            +
                    Seconds maxReferralLifetime,
         | 
| 49 49 | 
             
                    bool allowSelfReferrals,
         | 
| 50 50 | 
             
                    bool allowRenewals,
         | 
| 51 51 | 
             
                    bytes memory data
         | 
| @@ -59,12 +59,11 @@ interface IDistributionService is IService { | |
| 59 59 | 
             
                    bytes memory data
         | 
| 60 60 | 
             
                ) external returns (NftId distributorNftId);
         | 
| 61 61 |  | 
| 62 | 
            -
                 | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
                 | 
| 67 | 
            -
                // ) external;
         | 
| 62 | 
            +
                function changeDistributorType(
         | 
| 63 | 
            +
                    NftId distributorNftId,
         | 
| 64 | 
            +
                    DistributorType newDistributorType,
         | 
| 65 | 
            +
                    bytes memory data
         | 
| 66 | 
            +
                ) external;
         | 
| 68 67 |  | 
| 69 68 | 
             
                function createReferral(
         | 
| 70 69 | 
             
                    NftId distributorNftId,
         | 
| @@ -77,11 +76,18 @@ interface IDistributionService is IService { | |
| 77 76 | 
             
                    external
         | 
| 78 77 | 
             
                    returns (ReferralId referralId);
         | 
| 79 78 |  | 
| 79 | 
            +
                /// @dev callback from product service when a referral is used. 
         | 
| 80 | 
            +
                /// Calling this will increment the referral usage counter. 
         | 
| 81 | 
            +
                function processReferral(
         | 
| 82 | 
            +
                    NftId distributionNftId, 
         | 
| 83 | 
            +
                    ReferralId referralId
         | 
| 84 | 
            +
                ) external;
         | 
| 85 | 
            +
             | 
| 80 86 | 
             
                /// @dev callback from product service when selling a policy for a specific referralId
         | 
| 81 87 | 
             
                function processSale(
         | 
| 82 88 | 
             
                    NftId distributionNftId,
         | 
| 83 89 | 
             
                    ReferralId referralId,
         | 
| 84 | 
            -
                    IPolicy. | 
| 90 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 85 91 | 
             
                ) external;
         | 
| 86 92 |  | 
| 87 93 | 
             
                function referralIsValid(
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            type DamageLevel is uint8;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            // type bindings
         | 
| 7 | 
            +
            using {
         | 
| 8 | 
            +
                DamageLevelLib.eq,
         | 
| 9 | 
            +
                DamageLevelLib.eqz,
         | 
| 10 | 
            +
                DamageLevelLib.toInt
         | 
| 11 | 
            +
            } for DamageLevel global;
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            // solhint-disable-next-line func-name-mixedcase
         | 
| 14 | 
            +
            function DAMAGE_SMALL() pure returns (DamageLevel) {
         | 
| 15 | 
            +
                return DamageLevel.wrap(1);
         | 
| 16 | 
            +
            }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            // solhint-disable-next-line func-name-mixedcase
         | 
| 19 | 
            +
            function DAMAGE_MEDIUM() pure returns (DamageLevel) {
         | 
| 20 | 
            +
                return DamageLevel.wrap(2);
         | 
| 21 | 
            +
            }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            // solhint-disable-next-line func-name-mixedcase
         | 
| 24 | 
            +
            function DAMAGE_LARGE() pure returns (DamageLevel) {
         | 
| 25 | 
            +
                return DamageLevel.wrap(3);
         | 
| 26 | 
            +
            }
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            library DamageLevelLib {
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                error ErrorDamageLeveLibInvalidDamageLevel(uint8 damageLevel);
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                function zero() internal pure returns (DamageLevel) {
         | 
| 33 | 
            +
                    return DamageLevel.wrap(0);
         | 
| 34 | 
            +
                }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                function toDamageLevel(uint8 damage) internal pure returns (DamageLevel) {
         | 
| 37 | 
            +
                    if (damage == 1) {
         | 
| 38 | 
            +
                        return DAMAGE_SMALL();
         | 
| 39 | 
            +
                    } else if (damage == 2) {
         | 
| 40 | 
            +
                        return DAMAGE_MEDIUM();
         | 
| 41 | 
            +
                    } else if (damage == 3) {
         | 
| 42 | 
            +
                        return DAMAGE_LARGE();
         | 
| 43 | 
            +
                    } else {
         | 
| 44 | 
            +
                        revert ErrorDamageLeveLibInvalidDamageLevel(damage);
         | 
| 45 | 
            +
                    }
         | 
| 46 | 
            +
                }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                function toInt(DamageLevel damageLevel) internal pure returns (uint8) {
         | 
| 49 | 
            +
                    return uint8(DamageLevel.unwrap(damageLevel));
         | 
| 50 | 
            +
                }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                function eq(DamageLevel a, DamageLevel b) internal pure returns (bool) {
         | 
| 53 | 
            +
                    return DamageLevel.unwrap(a) == DamageLevel.unwrap(b);
         | 
| 54 | 
            +
                }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                function eqz(DamageLevel a) internal pure returns (bool) {
         | 
| 57 | 
            +
                    return DamageLevel.unwrap(a) == 0;
         | 
| 58 | 
            +
                }
         | 
| 59 | 
            +
            }
         |