@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f47f21f-178
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 +19 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
- 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 +60 -32
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
- 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/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -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 +163 -309
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +91 -277
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -292
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -123
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -92
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -62
- 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 +1538 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2077 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -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 +1471 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -123
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +166 -139
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +459 -131
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +330 -233
- 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 +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- 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 +137 -283
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
- 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 +66 -80
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +79 -265
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -330
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +359 -194
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +145 -97
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +178 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -130
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +99 -313
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +136 -281
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +303 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +310 -118
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +124 -97
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +433 -327
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +199 -309
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +136 -281
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -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 +286 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
- 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 +492 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -75
- 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 +129 -221
- 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 +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +65 -236
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -283
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -120
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +66 -80
- 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 +29 -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/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 +79 -265
- 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 +58 -89
- 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 +47 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
- 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 +106 -91
- 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 +71 -165
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
- 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 +32 -8
- 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 +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/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 +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 +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -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/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/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -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/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -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/authorization/AccessAdmin.sol +64 -59
- package/contracts/authorization/Authorization.sol +111 -40
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +4 -3
- package/contracts/authorization/IAuthorization.sol +13 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ReleaseAccessManager.sol +38 -0
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +2 -1
- package/contracts/distribution/Distribution.sol +7 -17
- package/contracts/distribution/DistributionService.sol +83 -65
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +9 -5
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +418 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/IInstance.sol +10 -30
- package/contracts/instance/IInstanceService.sol +0 -20
- package/contracts/instance/Instance.sol +29 -51
- package/contracts/instance/InstanceAdmin.sol +42 -31
- package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +65 -97
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +10 -10
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +6 -16
- package/contracts/oracle/OracleService.sol +47 -34
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +21 -31
- package/contracts/pool/BasicPoolAuthorization.sol +5 -3
- package/contracts/pool/BundleService.sol +213 -61
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +31 -8
- package/contracts/pool/IPoolComponent.sol +18 -8
- package/contracts/pool/IPoolService.sol +56 -39
- package/contracts/pool/Pool.sol +60 -53
- package/contracts/pool/PoolService.sol +250 -140
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +59 -30
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +7 -6
- package/contracts/product/BasicProductAuthorization.sol +0 -1
- package/contracts/product/ClaimService.sol +313 -118
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -34
- package/contracts/product/IPricingService.sol +10 -10
- package/contracts/product/IProductComponent.sol +23 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +394 -196
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +54 -54
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +125 -71
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +68 -38
- package/contracts/registry/IRegistry.sol +55 -18
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +342 -201
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +35 -46
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +204 -188
- package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
- package/contracts/shared/Component.sol +40 -55
- package/contracts/shared/ComponentService.sol +235 -151
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +23 -14
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +10 -6
- package/contracts/shared/IComponentService.sol +25 -13
- package/contracts/shared/IInstanceLinkedComponent.sol +7 -22
- 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 +11 -0
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +72 -31
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +27 -7
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +19 -9
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +20 -18
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +13 -32
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +11 -29
- package/contracts/staking/StakingServiceManager.sol +2 -2
- 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/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +16 -11
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/RoleId.sol +0 -12
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +4 -0
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- 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/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/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
            import {IAccess} from "../authorization/IAccess.sol";
         | 
| 5 7 | 
             
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 6 8 | 
             
            import {IServiceAuthorization} from "./IServiceAuthorization.sol";
         | 
| @@ -10,30 +12,36 @@ import {TimestampLib} from "../type/Timestamp.sol"; | |
| 10 12 | 
             
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 11 13 |  | 
| 12 14 | 
             
            /// @dev Base contract for release specific service authorization contracts.
         | 
| 13 | 
            -
            contract ServiceAuthorization
         | 
| 14 | 
            -
                  | 
| 15 | 
            +
            contract ServiceAuthorization is 
         | 
| 16 | 
            +
                 IServiceAuthorization
         | 
| 15 17 | 
             
            {
         | 
| 16 | 
            -
                 uint256 public constant  | 
| 18 | 
            +
                 uint256 public constant COMMIT_HASH_LENGTH = 40;
         | 
| 19 | 
            +
                 uint256 public constant GIF_INITIAL_VERSION = 3;
         | 
| 17 20 |  | 
| 18 | 
            -
                  | 
| 21 | 
            +
                 uint256 public immutable VERSION;
         | 
| 22 | 
            +
                 string public COMMIT_HASH;
         | 
| 19 23 |  | 
| 20 24 | 
             
                 ObjectType[] internal _serviceDomains;
         | 
| 21 25 | 
             
                 mapping(ObjectType domain => address service) internal _serviceAddress;
         | 
| 22 26 | 
             
                 mapping(ObjectType domain => ObjectType[] authorizedDomains) internal _authorizedDomains;
         | 
| 23 27 | 
             
                 mapping(ObjectType domain => mapping(ObjectType authorizedDomain => IAccess.FunctionInfo[] functions)) internal _authorizedFunctions;
         | 
| 24 28 |  | 
| 25 | 
            -
                 constructor(string memory commitHash) {
         | 
| 26 | 
            -
                       | 
| 29 | 
            +
                 constructor(string memory commitHash, uint256 version) {
         | 
| 30 | 
            +
                      assert(bytes(commitHash).length == COMMIT_HASH_LENGTH);
         | 
| 31 | 
            +
                      assert(version >= GIF_INITIAL_VERSION);
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                      COMMIT_HASH = commitHash;
         | 
| 34 | 
            +
                      VERSION = version;
         | 
| 27 35 | 
             
                      _setupDomains();
         | 
| 28 36 | 
             
                      _setupDomainAuthorizations();
         | 
| 29 37 | 
             
                 }
         | 
| 30 38 |  | 
| 31 39 | 
             
                 function getCommitHash() external view returns(string memory commitHash) {
         | 
| 32 | 
            -
                      return  | 
| 40 | 
            +
                      return COMMIT_HASH;
         | 
| 33 41 | 
             
                 }
         | 
| 34 42 |  | 
| 35 43 | 
             
                 function getRelease() external view returns(VersionPart release) {
         | 
| 36 | 
            -
                      return VersionPartLib.toVersionPart( | 
| 44 | 
            +
                      return VersionPartLib.toVersionPart(VERSION);
         | 
| 37 45 | 
             
                 }
         | 
| 38 46 |  | 
| 39 47 | 
             
                 function getServiceDomains() external view returns(ObjectType[] memory serviceDomains) {
         | 
| @@ -56,6 +64,15 @@ contract ServiceAuthorization | |
| 56 64 | 
             
                      return _authorizedFunctions[serviceDomain][authorizedDomain];
         | 
| 57 65 | 
             
                 }
         | 
| 58 66 |  | 
| 67 | 
            +
                 // ERC165
         | 
| 68 | 
            +
                 function supportsInterface(bytes4 interfaceId) public pure returns (bool) {
         | 
| 69 | 
            +
                      return (
         | 
| 70 | 
            +
                           interfaceId == type(IServiceAuthorization).interfaceId || 
         | 
| 71 | 
            +
                           interfaceId == type(IERC165).interfaceId
         | 
| 72 | 
            +
                      );
         | 
| 73 | 
            +
                 }
         | 
| 74 | 
            +
             | 
| 75 | 
            +
             | 
| 59 76 | 
             
                 /// @dev Overwrite this function for a specific realease.
         | 
| 60 77 | 
             
                 function _setupDomains() internal virtual {}
         | 
| 61 78 |  | 
| @@ -86,5 +103,4 @@ contract ServiceAuthorization | |
| 86 103 | 
             
                                name: StrLib.toStr(name),
         | 
| 87 104 | 
             
                                createdAt: TimestampLib.blockTimestamp()}));
         | 
| 88 105 | 
             
                 }
         | 
| 89 | 
            -
            }
         | 
| 90 | 
            -
             | 
| 106 | 
            +
            }
         | 
| @@ -2,6 +2,7 @@ | |
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 4 | 
             
            import {Distribution} from "./Distribution.sol";
         | 
| 5 | 
            +
            import {DISTRIBUTOR} from "../type/ObjectType.sol";
         | 
| 5 6 | 
             
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         | 
| 6 7 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 7 8 | 
             
            import {ReferralId} from "../type/Referral.sol";
         | 
| @@ -81,6 +82,7 @@ contract BasicDistribution is | |
| 81 82 | 
             
                    external
         | 
| 82 83 | 
             
                    virtual
         | 
| 83 84 | 
             
                    onlyOwner()
         | 
| 85 | 
            +
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 84 86 | 
             
                    restricted()
         | 
| 85 87 | 
             
                {
         | 
| 86 88 | 
             
                    _updateDistributorType(distributorNftId, distributorType, data);
         | 
| @@ -132,7 +134,6 @@ contract BasicDistribution is | |
| 132 134 | 
             
                        initialOwner, 
         | 
| 133 135 | 
             
                        name, 
         | 
| 134 136 | 
             
                        token, 
         | 
| 135 | 
            -
                        "", // registry data
         | 
| 136 137 | 
             
                        ""); // component specifc data
         | 
| 137 138 | 
             
                }
         | 
| 138 139 | 
             
            }
         | 
| @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 4 | 
             
            import {Amount} from "../type/Amount.sol";
         | 
| 5 | 
            -
            import {COMPONENT, DISTRIBUTION} from "../type/ObjectType.sol";
         | 
| 5 | 
            +
            import {COMPONENT, DISTRIBUTION, DISTRIBUTOR} from "../type/ObjectType.sol";
         | 
| 6 6 | 
             
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         | 
| 7 7 | 
             
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 8 8 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| @@ -36,15 +36,6 @@ abstract contract Distribution is | |
| 36 36 | 
             
                    _;
         | 
| 37 37 | 
             
                }
         | 
| 38 38 |  | 
| 39 | 
            -
                function register()
         | 
| 40 | 
            -
                    external
         | 
| 41 | 
            -
                    virtual
         | 
| 42 | 
            -
                    onlyOwner()
         | 
| 43 | 
            -
                {
         | 
| 44 | 
            -
                    _getDistributionStorage()._componentService.registerDistribution();
         | 
| 45 | 
            -
                    _approveTokenHandler(type(uint256).max);
         | 
| 46 | 
            -
                }
         | 
| 47 | 
            -
             | 
| 48 39 |  | 
| 49 40 | 
             
                function isDistributor(address candidate)
         | 
| 50 41 | 
             
                    public
         | 
| @@ -128,6 +119,7 @@ abstract contract Distribution is | |
| 128 119 | 
             
                    virtual
         | 
| 129 120 | 
             
                    restricted()
         | 
| 130 121 | 
             
                    onlyDistributor()
         | 
| 122 | 
            +
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 131 123 | 
             
                    onlyNftOwner(distributorNftId)
         | 
| 132 124 | 
             
                    returns (Amount withdrawnAmount) 
         | 
| 133 125 | 
             
                {
         | 
| @@ -136,12 +128,11 @@ abstract contract Distribution is | |
| 136 128 |  | 
| 137 129 | 
             
                function _initializeDistribution(
         | 
| 138 130 | 
             
                    address registry,
         | 
| 139 | 
            -
                    NftId  | 
| 131 | 
            +
                    NftId productNftId,
         | 
| 140 132 | 
             
                    IAuthorization authorization, 
         | 
| 141 133 | 
             
                    address initialOwner,
         | 
| 142 134 | 
             
                    string memory name,
         | 
| 143 135 | 
             
                    address token,
         | 
| 144 | 
            -
                    bytes memory registryData, // writeonly data that will saved in the object info record of the registry
         | 
| 145 136 | 
             
                    bytes memory componentData // component specifidc data 
         | 
| 146 137 | 
             
                )
         | 
| 147 138 | 
             
                    internal
         | 
| @@ -150,21 +141,20 @@ abstract contract Distribution is | |
| 150 141 | 
             
                {
         | 
| 151 142 | 
             
                    _initializeInstanceLinkedComponent(
         | 
| 152 143 | 
             
                        registry, 
         | 
| 153 | 
            -
                         | 
| 144 | 
            +
                        productNftId, 
         | 
| 154 145 | 
             
                        name, 
         | 
| 155 146 | 
             
                        token, 
         | 
| 156 147 | 
             
                        DISTRIBUTION(), 
         | 
| 157 148 | 
             
                        authorization,
         | 
| 158 149 | 
             
                        true, 
         | 
| 159 150 | 
             
                        initialOwner, 
         | 
| 160 | 
            -
                        registryData, 
         | 
| 161 151 | 
             
                        componentData);
         | 
| 162 152 |  | 
| 163 153 | 
             
                    DistributionStorage storage $ = _getDistributionStorage();
         | 
| 164 154 | 
             
                    $._distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION())); 
         | 
| 165 155 | 
             
                    $._componentService = IComponentService(_getServiceAddress(COMPONENT())); 
         | 
| 166 156 |  | 
| 167 | 
            -
                     | 
| 157 | 
            +
                    _registerInterface(type(IDistributionComponent).interfaceId);
         | 
| 168 158 | 
             
                }
         | 
| 169 159 |  | 
| 170 160 | 
             
                /// @dev Sets the distribution fees to the provided values.
         | 
| @@ -279,9 +269,9 @@ abstract contract Distribution is | |
| 279 269 | 
             
                    return _getDistributionStorage()._distributionService.withdrawCommission(distributorNftId, amount);
         | 
| 280 270 | 
             
                }
         | 
| 281 271 |  | 
| 282 | 
            -
                function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
         | 
| 272 | 
            +
                function _nftTransferFrom(address from, address to, uint256 tokenId, address operator) internal virtual override {
         | 
| 283 273 | 
             
                    // keep track of distributor nft owner
         | 
| 284 | 
            -
                    emit LogDistributorUpdated(to,  | 
| 274 | 
            +
                    emit LogDistributorUpdated(to, operator);
         | 
| 285 275 | 
             
                    DistributionStorage storage $ = _getDistributionStorage();
         | 
| 286 276 | 
             
                    $._distributorNftId[from] = NftIdLib.zero();
         | 
| 287 277 | 
             
                    $._distributorNftId[to] = NftIdLib.toNftId(tokenId);
         | 
| @@ -1,8 +1,6 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 7 5 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 8 6 | 
             
            import {IComponentService} from "../shared/IComponentService.sol";
         | 
| @@ -14,12 +12,11 @@ import {IPolicy} from "../instance/module/IPolicy.sol"; | |
| 14 12 |  | 
| 15 13 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 16 14 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 17 | 
            -
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 18 15 | 
             
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 19 16 | 
             
            import {ObjectType, COMPONENT, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, REGISTRY} from "../type/ObjectType.sol";
         | 
| 20 17 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 21 18 | 
             
            import {IDistributionService} from "./IDistributionService.sol";
         | 
| 22 | 
            -
            import {UFixed | 
| 19 | 
            +
            import {UFixed} from "../type/UFixed.sol";
         | 
| 23 20 | 
             
            import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
         | 
| 24 21 | 
             
            import {ReferralId, ReferralLib} from "../type/Referral.sol";
         | 
| 25 22 | 
             
            import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
         | 
| @@ -40,21 +37,21 @@ contract DistributionService is | |
| 40 37 | 
             
                    bytes memory data
         | 
| 41 38 | 
             
                )
         | 
| 42 39 | 
             
                    internal
         | 
| 43 | 
            -
                    initializer
         | 
| 44 40 | 
             
                    virtual override
         | 
| 41 | 
            +
                    initializer()
         | 
| 45 42 | 
             
                {
         | 
| 46 | 
            -
                     | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
                     | 
| 50 | 
            -
             | 
| 51 | 
            -
                     | 
| 43 | 
            +
                    (
         | 
| 44 | 
            +
                        address registryAddress,
         | 
| 45 | 
            +
                        address authority
         | 
| 46 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 52 49 |  | 
| 53 50 | 
             
                    _componentService = IComponentService(_getServiceAddress(COMPONENT()));
         | 
| 54 51 | 
             
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 55 52 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 56 53 |  | 
| 57 | 
            -
                     | 
| 54 | 
            +
                    _registerInterface(type(IDistributionService).interfaceId);
         | 
| 58 55 | 
             
                }
         | 
| 59 56 |  | 
| 60 57 |  | 
| @@ -76,7 +73,7 @@ contract DistributionService is | |
| 76 73 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 77 74 |  | 
| 78 75 | 
             
                    {
         | 
| 79 | 
            -
                        NftId productNftId = _getProductNftId( | 
| 76 | 
            +
                        NftId productNftId = _getProductNftId(distributionNftId);
         | 
| 80 77 | 
             
                        IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
         | 
| 81 78 |  | 
| 82 79 | 
             
                        UFixed variableDistributionFees = productInfo.distributionFee.fractionalFee;
         | 
| @@ -166,6 +163,7 @@ contract DistributionService is | |
| 166 163 | 
             
                )
         | 
| 167 164 | 
             
                    external
         | 
| 168 165 | 
             
                    virtual
         | 
| 166 | 
            +
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 169 167 | 
             
                    returns (ReferralId referralId)
         | 
| 170 168 | 
             
                {
         | 
| 171 169 | 
             
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| @@ -177,66 +175,91 @@ contract DistributionService is | |
| 177 175 | 
             
                        revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
         | 
| 178 176 | 
             
                    }
         | 
| 179 177 |  | 
| 180 | 
            -
                     | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 178 | 
            +
                    {
         | 
| 179 | 
            +
                        InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 180 | 
            +
                        DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
         | 
| 181 | 
            +
                        IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
         | 
| 183 182 |  | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 183 | 
            +
                        if (distributorTypeData.maxReferralCount < maxReferrals) {
         | 
| 184 | 
            +
                            revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
         | 
| 185 | 
            +
                        }
         | 
| 186 | 
            +
                        if (distributorTypeData.minDiscountPercentage > discountPercentage) {
         | 
| 187 | 
            +
                            revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
         | 
| 188 | 
            +
                        }
         | 
| 189 | 
            +
                        if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
         | 
| 190 | 
            +
                            revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
         | 
| 191 | 
            +
                        }
         | 
| 192 | 
            +
                        if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
         | 
| 193 | 
            +
                            revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
         | 
| 194 | 
            +
                        }
         | 
| 195 195 | 
             
                    }
         | 
| 196 196 |  | 
| 197 | 
            -
                     | 
| 198 | 
            -
             | 
| 199 | 
            -
                         | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 205 | 
            -
             | 
| 206 | 
            -
             | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 197 | 
            +
                    {
         | 
| 198 | 
            +
                        referralId = ReferralLib.toReferralId(distributionNftId, code);
         | 
| 199 | 
            +
                        IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
         | 
| 200 | 
            +
                            distributorNftId,
         | 
| 201 | 
            +
                            code,
         | 
| 202 | 
            +
                            discountPercentage,
         | 
| 203 | 
            +
                            maxReferrals,
         | 
| 204 | 
            +
                            0, // used referrals
         | 
| 205 | 
            +
                            expiryAt,
         | 
| 206 | 
            +
                            data
         | 
| 207 | 
            +
                        );
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                        instance.getInstanceStore().createReferral(referralId, info);
         | 
| 210 | 
            +
                    }
         | 
| 210 211 | 
             
                }
         | 
| 211 212 |  | 
| 213 | 
            +
                /// @inheritdoc IDistributionService
         | 
| 214 | 
            +
                function processReferral(
         | 
| 215 | 
            +
                    NftId distributionNftId, 
         | 
| 216 | 
            +
                    ReferralId referralId
         | 
| 217 | 
            +
                ) 
         | 
| 218 | 
            +
                    external
         | 
| 219 | 
            +
                    virtual
         | 
| 220 | 
            +
                    restricted()
         | 
| 221 | 
            +
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 222 | 
            +
                {
         | 
| 223 | 
            +
                    if (referralIsValid(distributionNftId, referralId)) {
         | 
| 224 | 
            +
                        IRegistry registry = getRegistry();
         | 
| 225 | 
            +
                        IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 226 | 
            +
                        IInstance instance = _getInstanceForComponent(registry, distributionInfo);
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                        // update book keeping for referral info
         | 
| 229 | 
            +
                        IDistribution.ReferralInfo memory referralInfo = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 230 | 
            +
                        referralInfo.usedReferrals += 1;
         | 
| 231 | 
            +
                        instance.getInstanceStore().updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 232 | 
            +
                    }
         | 
| 233 | 
            +
                }
         | 
| 212 234 |  | 
| 213 235 | 
             
                function processSale(
         | 
| 214 236 | 
             
                    NftId distributionNftId, // assume always of distribution type
         | 
| 215 237 | 
             
                    ReferralId referralId,
         | 
| 216 | 
            -
                    IPolicy. | 
| 238 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 217 239 | 
             
                )
         | 
| 218 240 | 
             
                    external
         | 
| 219 241 | 
             
                    virtual
         | 
| 220 | 
            -
                    restricted
         | 
| 242 | 
            +
                    restricted()
         | 
| 243 | 
            +
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 221 244 | 
             
                {
         | 
| 222 | 
            -
                     | 
| 245 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 246 | 
            +
                    IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 247 | 
            +
                    IInstance instance = _getInstanceForComponent(registry, distributionInfo);
         | 
| 223 248 | 
             
                    InstanceReader reader = instance.getInstanceReader();
         | 
| 224 249 | 
             
                    InstanceStore store = instance.getInstanceStore();
         | 
| 225 250 |  | 
| 226 251 | 
             
                    // get distribution owner fee amount
         | 
| 227 | 
            -
                    Amount distributionOwnerFee =  | 
| 252 | 
            +
                    Amount distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
         | 
| 228 253 |  | 
| 229 254 | 
             
                    // update referral/distributor info if applicable
         | 
| 230 255 | 
             
                    if (referralIsValid(distributionNftId, referralId)) {
         | 
| 231 256 |  | 
| 232 257 | 
             
                        // increase distribution balance by commission amount and distribution owner fee
         | 
| 233 | 
            -
                        Amount commissionAmount =  | 
| 258 | 
            +
                        Amount commissionAmount = premium.commissionAmount;
         | 
| 234 259 | 
             
                        _componentService.increaseDistributionBalance(store, distributionNftId, commissionAmount, distributionOwnerFee);
         | 
| 235 260 |  | 
| 236 261 | 
             
                        // update book keeping for referral info
         | 
| 237 262 | 
             
                        IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
         | 
| 238 | 
            -
                        referralInfo.usedReferrals += 1;
         | 
| 239 | 
            -
                        store.updateReferral(referralId, referralInfo, KEEP_STATE());
         | 
| 240 263 |  | 
| 241 264 | 
             
                        _componentService.increaseDistributorBalance(store, referralInfo.distributorNftId, AmountLib.zero(), commissionAmount);
         | 
| 242 265 |  | 
| @@ -255,6 +278,7 @@ contract DistributionService is | |
| 255 278 | 
             
                    public 
         | 
| 256 279 | 
             
                    virtual
         | 
| 257 280 | 
             
                    // TODO: restricted() (once #462 is done)
         | 
| 281 | 
            +
                    onlyNftOfType(distributorNftId, DISTRIBUTOR())
         | 
| 258 282 | 
             
                    returns (Amount withdrawnAmount) 
         | 
| 259 283 | 
             
                {
         | 
| 260 284 | 
             
                    (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| @@ -275,17 +299,6 @@ contract DistributionService is | |
| 275 299 | 
             
                        }
         | 
| 276 300 | 
             
                    }
         | 
| 277 301 |  | 
| 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 302 | 
             
                    // decrease fee counters by withdrawnAmount and update distributor info
         | 
| 290 303 | 
             
                    {
         | 
| 291 304 | 
             
                        InstanceStore store = instance.getInstanceStore();
         | 
| @@ -298,19 +311,24 @@ contract DistributionService is | |
| 298 311 | 
             
                    // transfer amount to distributor
         | 
| 299 312 | 
             
                    {
         | 
| 300 313 | 
             
                        address distributor = getRegistry().ownerOf(distributorNftId);
         | 
| 301 | 
            -
                         | 
| 302 | 
            -
                        distributionInfo.tokenHandler. | 
| 303 | 
            -
             | 
| 304 | 
            -
                        emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(token), withdrawnAmount);
         | 
| 314 | 
            +
                        emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(distributionInfo.token), withdrawnAmount);
         | 
| 315 | 
            +
                        distributionInfo.tokenHandler.distributeTokens(distributionWallet, distributor, withdrawnAmount);
         | 
| 305 316 | 
             
                    }
         | 
| 306 317 | 
             
                }
         | 
| 307 318 |  | 
| 308 | 
            -
                function referralIsValid(NftId distributionNftId, ReferralId referralId)  | 
| 319 | 
            +
                function referralIsValid(NftId distributionNftId, ReferralId referralId) 
         | 
| 320 | 
            +
                    public 
         | 
| 321 | 
            +
                    view 
         | 
| 322 | 
            +
                    onlyNftOfType(distributionNftId, DISTRIBUTION())
         | 
| 323 | 
            +
                    returns (bool isValid) 
         | 
| 324 | 
            +
                {
         | 
| 309 325 | 
             
                    if (distributionNftId.eqz() || referralId.eqz()) {
         | 
| 310 326 | 
             
                        return false;
         | 
| 311 327 | 
             
                    }
         | 
| 312 328 |  | 
| 313 | 
            -
                     | 
| 329 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 330 | 
            +
                    IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
         | 
| 331 | 
            +
                    IInstance instance = _getInstanceForComponent(registry, distributionInfo);
         | 
| 314 332 | 
             
                    IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
         | 
| 315 333 |  | 
| 316 334 | 
             
                    if (info.distributorNftId.eqz()) {
         | 
| @@ -327,7 +345,7 @@ contract DistributionService is | |
| 327 345 | 
             
                    returns(IInstance instance)
         | 
| 328 346 | 
             
                {
         | 
| 329 347 | 
             
                    NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
         | 
| 330 | 
            -
                    address instanceAddress = getRegistry(). | 
| 348 | 
            +
                    address instanceAddress = getRegistry().getObjectAddress(instanceNftId);
         | 
| 331 349 | 
             
                    return IInstance(instanceAddress);
         | 
| 332 350 | 
             
                }
         | 
| 333 351 |  | 
| @@ -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(registry, authority);
         | 
| 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,7 +3,6 @@ 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";
         | 
| @@ -28,9 +27,7 @@ interface IDistributionService is IService { | |
| 28 27 | 
             
                error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
         | 
| 29 28 |  | 
| 30 29 | 
             
                error ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(Amount amount, Amount limit);
         | 
| 31 | 
            -
                 | 
| 32 | 
            -
                error ErrorDistributionServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
         | 
| 33 | 
            -
             | 
| 30 | 
            +
                
         | 
| 34 31 | 
             
                error ErrorDistributionServiceVariableFeesTooHight(uint256 maxDiscountPercentage, uint256 limit);
         | 
| 35 32 | 
             
                error ErrorDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
         | 
| 36 33 |  | 
| @@ -77,11 +74,18 @@ interface IDistributionService is IService { | |
| 77 74 | 
             
                    external
         | 
| 78 75 | 
             
                    returns (ReferralId referralId);
         | 
| 79 76 |  | 
| 77 | 
            +
                /// @dev callback from product service when a referral is used. 
         | 
| 78 | 
            +
                /// Calling this will increment the referral usage counter. 
         | 
| 79 | 
            +
                function processReferral(
         | 
| 80 | 
            +
                    NftId distributionNftId, 
         | 
| 81 | 
            +
                    ReferralId referralId
         | 
| 82 | 
            +
                ) external;
         | 
| 83 | 
            +
             | 
| 80 84 | 
             
                /// @dev callback from product service when selling a policy for a specific referralId
         | 
| 81 85 | 
             
                function processSale(
         | 
| 82 86 | 
             
                    NftId distributionNftId,
         | 
| 83 87 | 
             
                    ReferralId referralId,
         | 
| 84 | 
            -
                    IPolicy. | 
| 88 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 85 89 | 
             
                ) external;
         | 
| 86 90 |  | 
| 87 91 | 
             
                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 | 
            +
            }
         | 
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {Amount, AmountLib} from "../../type/Amount.sol";
         | 
| 5 | 
            +
            import {BasicPool} from "../../pool/BasicPool.sol";
         | 
| 6 | 
            +
            import {BasicPoolAuthorization} from "../../pool/BasicPoolAuthorization.sol";
         | 
| 7 | 
            +
            import {Fee} from "../../type/Fee.sol";
         | 
| 8 | 
            +
            import {IAuthorization} from "../../authorization/IAuthorization.sol";
         | 
| 9 | 
            +
            import {NftId} from "../../type/NftId.sol";
         | 
| 10 | 
            +
            import {Seconds} from "../../type/Timestamp.sol";
         | 
| 11 | 
            +
            import {UFixed} from "../../type/UFixed.sol";
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            contract FirePool is
         | 
| 14 | 
            +
                BasicPool
         | 
| 15 | 
            +
            {
         | 
| 16 | 
            +
                
         | 
| 17 | 
            +
                constructor(
         | 
| 18 | 
            +
                    address registry,
         | 
| 19 | 
            +
                    NftId instanceNftId,
         | 
| 20 | 
            +
                    string memory componentName,
         | 
| 21 | 
            +
                    address token,
         | 
| 22 | 
            +
                    IAuthorization authorization
         | 
| 23 | 
            +
                ) 
         | 
| 24 | 
            +
                {
         | 
| 25 | 
            +
                    address initialOwner = msg.sender;
         | 
| 26 | 
            +
                    _intialize(
         | 
| 27 | 
            +
                        registry,
         | 
| 28 | 
            +
                        instanceNftId,
         | 
| 29 | 
            +
                        componentName,
         | 
| 30 | 
            +
                        token,
         | 
| 31 | 
            +
                        authorization,
         | 
| 32 | 
            +
                        initialOwner);
         | 
| 33 | 
            +
                }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                function _intialize(
         | 
| 36 | 
            +
                    address registry,
         | 
| 37 | 
            +
                    NftId instanceNftId,
         | 
| 38 | 
            +
                    string memory componentName,
         | 
| 39 | 
            +
                    address token,
         | 
| 40 | 
            +
                    IAuthorization authorization,
         | 
| 41 | 
            +
                    address initialOwner
         | 
| 42 | 
            +
                )
         | 
| 43 | 
            +
                    internal
         | 
| 44 | 
            +
                    initializer
         | 
| 45 | 
            +
                {
         | 
| 46 | 
            +
                    _initializeBasicPool(
         | 
| 47 | 
            +
                        registry,
         | 
| 48 | 
            +
                        instanceNftId,
         | 
| 49 | 
            +
                        authorization,
         | 
| 50 | 
            +
                        token,
         | 
| 51 | 
            +
                        componentName,
         | 
| 52 | 
            +
                        initialOwner);
         | 
| 53 | 
            +
                }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                function createBundle(
         | 
| 56 | 
            +
                    Fee memory fee,
         | 
| 57 | 
            +
                    Amount initialAmount,
         | 
| 58 | 
            +
                    Seconds lifetime
         | 
| 59 | 
            +
                )
         | 
| 60 | 
            +
                    external
         | 
| 61 | 
            +
                    virtual 
         | 
| 62 | 
            +
                    restricted()
         | 
| 63 | 
            +
                    returns(NftId bundleNftId, Amount netStakedAmount)
         | 
| 64 | 
            +
                {
         | 
| 65 | 
            +
                    address owner = msg.sender;
         | 
| 66 | 
            +
                    bundleNftId = _createBundle(
         | 
| 67 | 
            +
                        owner,
         | 
| 68 | 
            +
                        fee,
         | 
| 69 | 
            +
                        lifetime,
         | 
| 70 | 
            +
                        "" // filter
         | 
| 71 | 
            +
                    );
         | 
| 72 | 
            +
                    netStakedAmount = _stake(bundleNftId, initialAmount);
         | 
| 73 | 
            +
                }
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            }
         |