@etherisc/gif-next 0.0.2-b3a8633-027 → 0.0.2-b3e9a44-364
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 +32 -51
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +0 -19
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +101 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +59 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +244 -217
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +109 -101
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +59 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +136 -31
- 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 +1507 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1978 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -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 +1427 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1187 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1561 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1996 -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 +16 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +16 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +26 -99
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +96 -99
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +55 -146
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +77 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +244 -228
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/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 +75 -235
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- 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 +46 -37
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +16 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +43 -219
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +53 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +76 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +95 -280
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +463 -150
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +170 -86
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +245 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -94
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +376 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +85 -276
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +525 -350
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +114 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +52 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +73 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +63 -248
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +279 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +120 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +21 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +163 -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 +59 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +63 -63
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +18 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +421 -320
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +120 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +136 -259
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +97 -117
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +63 -248
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +604 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +698 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +22 -3
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +297 -19
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +16 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +401 -104
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +121 -134
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +39 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +68 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +45 -16
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
- 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 +16 -211
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +263 -161
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +121 -95
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +21 -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 +16 -26
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +169 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +35 -37
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/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 +16 -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 +16 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +35 -222
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/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 +24 -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 +21 -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 +43 -27
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +16 -21
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +101 -262
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +93 -88
- 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 +47 -159
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +72 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -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 +61 -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 +7 -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 +2 -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 +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -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 +25 -23
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +0 -1
- package/contracts/distribution/BasicDistribution.sol +6 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +25 -12
- package/contracts/distribution/DistributionService.sol +114 -54
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +18 -2
- 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 +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -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 +7 -30
- package/contracts/instance/Instance.sol +10 -35
- package/contracts/instance/InstanceAdmin.sol +29 -7
- package/contracts/instance/InstanceAuthorizationV3.sol +5 -3
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +63 -41
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +12 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -8
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +17 -7
- package/contracts/oracle/OracleService.sol +41 -33
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +19 -18
- package/contracts/pool/BasicPoolAuthorization.sol +11 -2
- package/contracts/pool/BundleService.sol +208 -31
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +42 -5
- package/contracts/pool/IPoolComponent.sol +24 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +81 -35
- package/contracts/pool/PoolService.sol +231 -104
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +50 -29
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +3 -32
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +251 -86
- 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 -32
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +18 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +404 -193
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +47 -47
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +93 -51
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +51 -19
- package/contracts/registry/IRegistry.sol +53 -12
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +320 -172
- package/contracts/registry/RegistryAdmin.sol +49 -32
- package/contracts/registry/RegistryService.sol +55 -48
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseRegistry.sol +25 -67
- package/contracts/registry/ServiceAuthorizationV3.sol +6 -8
- package/contracts/shared/Component.sol +24 -44
- package/contracts/shared/ComponentService.sol +88 -28
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +4 -4
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +26 -6
- package/contracts/shared/NftOwnable.sol +23 -7
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +16 -11
- 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 +16 -28
- 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 +27 -5
- 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/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +1 -0
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +33 -10
- package/contracts/upgradeability/ProxyManager.sol +67 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- 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/registry/GlobalRegistry.sol/GlobalRegistry.dbg.json +0 -4
- package/artifacts/contracts/registry/GlobalRegistry.sol/GlobalRegistry.json +0 -1503
- package/artifacts/contracts/registry/GlobalRegistryAdmin.sol/GlobalRegistryAdmin.dbg.json +0 -4
- package/artifacts/contracts/registry/GlobalRegistryAdmin.sol/GlobalRegistryAdmin.json +0 -1881
- package/artifacts/contracts/registry/IGlobalRegistry.sol/IGlobalRegistry.dbg.json +0 -4
- package/artifacts/contracts/registry/IGlobalRegistry.sol/IGlobalRegistry.json +0 -974
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/MainnetId.sol/MainnetContract.dbg.json +0 -4
- package/artifacts/contracts/shared/MainnetId.sol/MainnetContract.json +0 -34
- package/artifacts/contracts/shared/MainnetId.sol/MainnetId.dbg.json +0 -4
- package/artifacts/contracts/shared/MainnetId.sol/MainnetId.json +0 -24
- package/artifacts/contracts/shared/MainnetId.sol/SidenetContract.dbg.json +0 -4
- package/artifacts/contracts/shared/MainnetId.sol/SidenetContract.json +0 -34
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/registry/GlobalRegistry.sol +0 -95
- package/contracts/registry/GlobalRegistryAdmin.sol +0 -38
- package/contracts/registry/IGlobalRegistry.sol +0 -17
- package/contracts/shared/InitializableCustom.sol +0 -177
- package/contracts/shared/MainnetId.sol +0 -29
@@ -4,30 +4,27 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
5
5
|
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
6
6
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
7
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
8
|
+
import {IComponentService} from "./IComponentService.sol";
|
9
|
+
import {IInstance} from "../instance/IInstance.sol";
|
7
10
|
import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
|
11
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
12
|
+
import {InstanceStore} from "../instance/InstanceStore.sol";
|
13
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
14
|
+
import {IPoolComponent} from "../pool/IPoolComponent.sol";
|
15
|
+
import {IProductComponent} from "../product/IProductComponent.sol";
|
8
16
|
import {IRegistry} from "../registry/IRegistry.sol";
|
9
17
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
10
|
-
import {
|
11
|
-
import {IAccess} from "../instance/module/IAccess.sol";
|
18
|
+
import {KEEP_STATE} from "../type/StateId.sol";
|
12
19
|
import {NftId} from "../type/NftId.sol";
|
13
20
|
import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
|
14
21
|
import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
|
15
|
-
import {
|
16
|
-
import {IComponents} from "../instance/module/IComponents.sol";
|
17
|
-
import {IComponentService} from "./IComponentService.sol";
|
18
|
-
import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
|
19
|
-
import {IInstanceService} from "../instance/IInstanceService.sol";
|
20
|
-
import {IPoolComponent} from "../pool/IPoolComponent.sol";
|
21
|
-
import {IProductComponent} from "../product/IProductComponent.sol";
|
22
|
-
import {InstanceReader} from "../instance/InstanceReader.sol";
|
23
|
-
import {InstanceStore} from "../instance/InstanceStore.sol";
|
24
|
-
import {TokenHandler} from "./TokenHandler.sol";
|
22
|
+
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
25
23
|
|
26
24
|
contract ComponentService is
|
27
25
|
ComponentVerifyingService,
|
28
26
|
IComponentService
|
29
27
|
{
|
30
|
-
|
31
28
|
error ErrorComponentServiceAlreadyRegistered(address component);
|
32
29
|
error ErrorComponentServiceNotComponent(address component);
|
33
30
|
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
@@ -51,17 +48,17 @@ contract ComponentService is
|
|
51
48
|
virtual override
|
52
49
|
initializer()
|
53
50
|
{
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
51
|
+
(
|
52
|
+
address registryAddress,
|
53
|
+
address authority
|
54
|
+
) = abi.decode(data, (address, address));
|
58
55
|
|
59
|
-
|
56
|
+
_initializeService(registryAddress, authority, owner);
|
60
57
|
|
61
58
|
_registryService = IRegistryService(_getServiceAddress(REGISTRY()));
|
62
59
|
_instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
|
63
60
|
|
64
|
-
|
61
|
+
_registerInterface(type(IComponentService).interfaceId);
|
65
62
|
}
|
66
63
|
|
67
64
|
//-------- component ----------------------------------------------------//
|
@@ -94,6 +91,37 @@ contract ComponentService is
|
|
94
91
|
// TODO implement
|
95
92
|
function unlock() external virtual {}
|
96
93
|
|
94
|
+
function withdrawFees(Amount amount)
|
95
|
+
external
|
96
|
+
virtual
|
97
|
+
returns (Amount withdrawnAmount)
|
98
|
+
{
|
99
|
+
(NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
100
|
+
IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
|
101
|
+
address componentWallet = info.wallet;
|
102
|
+
|
103
|
+
// determine withdrawn amount
|
104
|
+
withdrawnAmount = amount;
|
105
|
+
if (withdrawnAmount.gte(AmountLib.max())) {
|
106
|
+
withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
|
107
|
+
} else if (withdrawnAmount.eqz()) {
|
108
|
+
revert ErrorComponentServiceWithdrawAmountIsZero();
|
109
|
+
} else {
|
110
|
+
Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
|
111
|
+
if (withdrawnAmount.gt(withdrawLimit)) {
|
112
|
+
revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
// decrease fee counters by withdrawnAmount
|
117
|
+
_changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
|
118
|
+
|
119
|
+
// transfer amount to component owner
|
120
|
+
address componentOwner = getRegistry().ownerOf(componentNftId);
|
121
|
+
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
|
122
|
+
info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
|
123
|
+
}
|
124
|
+
|
97
125
|
|
98
126
|
//-------- product ------------------------------------------------------//
|
99
127
|
|
@@ -112,7 +140,7 @@ contract ComponentService is
|
|
112
140
|
contractAddress,
|
113
141
|
PRODUCT(),
|
114
142
|
PRODUCT_OWNER_ROLE());
|
115
|
-
|
143
|
+
|
116
144
|
// create product info
|
117
145
|
IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
|
118
146
|
instanceStore.createProduct(productNftId, productInfo);
|
@@ -255,6 +283,36 @@ contract ComponentService is
|
|
255
283
|
_changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
|
256
284
|
}
|
257
285
|
|
286
|
+
//-------- distributor -------------------------------------------------------//
|
287
|
+
|
288
|
+
function increaseDistributorBalance(
|
289
|
+
InstanceStore instanceStore,
|
290
|
+
NftId distributorNftId,
|
291
|
+
Amount amount,
|
292
|
+
Amount feeAmount
|
293
|
+
)
|
294
|
+
external
|
295
|
+
virtual
|
296
|
+
// TODO re-enable once role granting is stable and fixed
|
297
|
+
// restricted()
|
298
|
+
{
|
299
|
+
_changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
|
300
|
+
}
|
301
|
+
|
302
|
+
function decreaseDistributorBalance(
|
303
|
+
InstanceStore instanceStore,
|
304
|
+
NftId distributorNftId,
|
305
|
+
Amount amount,
|
306
|
+
Amount feeAmount
|
307
|
+
)
|
308
|
+
external
|
309
|
+
virtual
|
310
|
+
// TODO re-enable once role granting is stable and fixed
|
311
|
+
// restricted()
|
312
|
+
{
|
313
|
+
_changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
|
314
|
+
}
|
315
|
+
|
258
316
|
//-------- oracle -------------------------------------------------------//
|
259
317
|
|
260
318
|
function registerOracle()
|
@@ -453,22 +511,24 @@ contract ComponentService is
|
|
453
511
|
|
454
512
|
component.linkToRegisteredNftId();
|
455
513
|
|
456
|
-
// setup initial component authorization
|
457
|
-
_instanceService.initializeAuthorization(
|
458
|
-
instance.getNftId(),
|
459
|
-
component);
|
460
|
-
|
461
514
|
// save amended component info with instance
|
462
515
|
instanceReader = instance.getInstanceReader();
|
463
516
|
instanceStore = instance.getInstanceStore();
|
464
517
|
|
465
|
-
IComponents.ComponentInfo memory componentInfo = component.
|
466
|
-
componentInfo.tokenHandler =
|
518
|
+
IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
|
519
|
+
componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
520
|
+
address(componentInfo.token),
|
521
|
+
address(instance.getInstanceAdmin().authority()));
|
467
522
|
|
468
523
|
instanceStore.createComponent(
|
469
524
|
component.getNftId(),
|
470
525
|
componentInfo);
|
471
526
|
|
527
|
+
// setup initial component authorization
|
528
|
+
_instanceService.initializeAuthorization(
|
529
|
+
instance.getNftId(),
|
530
|
+
component);
|
531
|
+
|
472
532
|
// TODO add logging
|
473
533
|
}
|
474
534
|
|
@@ -562,7 +622,7 @@ contract ComponentService is
|
|
562
622
|
}
|
563
623
|
|
564
624
|
// check component has not already been registered
|
565
|
-
if (getRegistry().
|
625
|
+
if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
|
566
626
|
revert ErrorComponentServiceAlreadyRegistered(componentAddress);
|
567
627
|
}
|
568
628
|
|
@@ -11,15 +11,18 @@ contract ComponentServiceManager is ProxyManager {
|
|
11
11
|
|
12
12
|
/// @dev initializes proxy manager with service implementation
|
13
13
|
constructor(
|
14
|
-
address
|
14
|
+
address authority,
|
15
|
+
address registry,
|
16
|
+
bytes32 salt
|
15
17
|
)
|
16
|
-
ProxyManager(registryAddress)
|
17
18
|
{
|
18
19
|
ComponentService svc = new ComponentService();
|
19
|
-
bytes memory data = abi.encode(
|
20
|
-
IVersionable versionable =
|
20
|
+
bytes memory data = abi.encode(registry, authority);
|
21
|
+
IVersionable versionable = initialize(
|
22
|
+
registry,
|
21
23
|
address(svc),
|
22
|
-
data
|
24
|
+
data,
|
25
|
+
salt);
|
23
26
|
|
24
27
|
_componentService = ComponentService(address(versionable));
|
25
28
|
}
|
@@ -32,7 +32,7 @@ abstract contract ComponentVerifyingService is
|
|
32
32
|
IInstance instance
|
33
33
|
)
|
34
34
|
{
|
35
|
-
componentNftId = getRegistry().
|
35
|
+
componentNftId = getRegistry().getNftIdForAddress(msg.sender);
|
36
36
|
(componentInfo, instance) = _getAndVerifyComponentInfo(
|
37
37
|
componentNftId,
|
38
38
|
expectedType,
|
@@ -111,7 +111,6 @@ abstract contract ComponentVerifyingService is
|
|
111
111
|
/// @dev returns an IInstance contract reference for the specified instance nft id
|
112
112
|
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
113
113
|
return IInstance(
|
114
|
-
getRegistry().
|
115
|
-
instanceNftId).objectAddress);
|
114
|
+
getRegistry().getObjectAddress(instanceNftId));
|
116
115
|
}
|
117
116
|
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
|
5
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
6
|
+
|
7
|
+
import {IPolicyHolder} from "./IPolicyHolder.sol";
|
8
|
+
|
9
|
+
library ContractLib {
|
10
|
+
|
11
|
+
function isPolicyHolder(address target) external view returns (bool) {
|
12
|
+
return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
|
13
|
+
}
|
14
|
+
|
15
|
+
function isAccessManaged(address target) external view returns (bool) {
|
16
|
+
if (!isContract(target)) {
|
17
|
+
return false;
|
18
|
+
}
|
19
|
+
|
20
|
+
(bool success, ) = target.staticcall(
|
21
|
+
abi.encodeWithSelector(
|
22
|
+
IAccessManaged.authority.selector));
|
23
|
+
|
24
|
+
return success;
|
25
|
+
}
|
26
|
+
|
27
|
+
function isContract(address target) public view returns (bool) {
|
28
|
+
uint256 size;
|
29
|
+
assembly {
|
30
|
+
size := extcodesize(target)
|
31
|
+
}
|
32
|
+
return size > 0;
|
33
|
+
}
|
34
|
+
|
35
|
+
function supportsInterface(address target, bytes4 interfaceId) external view returns (bool) {
|
36
|
+
return ERC165Checker.supportsInterface(target, interfaceId);
|
37
|
+
}
|
38
|
+
}
|
@@ -23,7 +23,6 @@ interface IComponent is
|
|
23
23
|
error ErrorComponentNameLengthZero();
|
24
24
|
error ErrorComponentWalletAddressZero();
|
25
25
|
error ErrorComponentWalletAddressIsSameAsCurrent();
|
26
|
-
error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
|
27
26
|
error ErrorComponentWalletNotComponent();
|
28
27
|
|
29
28
|
event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
|
@@ -35,10 +34,11 @@ interface IComponent is
|
|
35
34
|
/// only component owner (nft holder) is authorizes to call this function
|
36
35
|
function approveTokenHandler(Amount spendingLimitAmount) external;
|
37
36
|
|
38
|
-
/// @dev sets the wallet address for the component
|
39
|
-
/// if the current wallet has tokens, these will be transferred
|
37
|
+
/// @dev sets the wallet address for the component.
|
38
|
+
/// if the current wallet has tokens, these will be transferred.
|
40
39
|
/// if the new wallet address is externally owned, an approval from the
|
41
|
-
/// owner of the external wallet
|
40
|
+
/// owner of the external wallet to the tokenhandler of the component that
|
41
|
+
/// covers the current component balance must exist
|
42
42
|
function setWallet(address walletAddress) external;
|
43
43
|
|
44
44
|
/// @dev returns the name of this component
|
@@ -1,21 +1,12 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
5
|
-
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
4
|
|
7
5
|
import {Amount} from "../type/Amount.sol";
|
8
6
|
import {Fee} from "../type/Fee.sol";
|
9
|
-
import {IComponents} from "../instance/module/IComponents.sol";
|
10
|
-
import {IInstance} from "../instance/IInstance.sol";
|
11
|
-
import {IInstanceService} from "../instance/IInstanceService.sol";
|
12
7
|
import {InstanceStore} from "../instance/InstanceStore.sol";
|
13
|
-
import {IProductService} from "../product/IProductService.sol";
|
14
|
-
import {IRegisterable} from "../shared/IRegisterable.sol";
|
15
8
|
import {IService} from "../shared/IService.sol";
|
16
9
|
import {NftId} from "../type/NftId.sol";
|
17
|
-
import {ObjectType} from "../type/ObjectType.sol";
|
18
|
-
import {TokenHandler} from "../shared/TokenHandler.sol";
|
19
10
|
import {UFixed} from "../type/UFixed.sol";
|
20
11
|
|
21
12
|
/// @dev component base class
|
@@ -27,7 +18,12 @@ interface IComponentService is
|
|
27
18
|
error ErrorComponentServiceWalletAddressZero();
|
28
19
|
error ErrorComponentServiceWalletAddressIsSameAsCurrent();
|
29
20
|
|
21
|
+
error ErrorComponentServiceWithdrawAmountIsZero();
|
22
|
+
error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
|
23
|
+
error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
|
24
|
+
|
30
25
|
event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
|
26
|
+
event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
|
31
27
|
event LogComponentServiceProductFeesUpdated(NftId productNftId);
|
32
28
|
event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
|
33
29
|
event LogComponentServicePoolFeesUpdated(NftId poolNftId);
|
@@ -51,6 +47,11 @@ interface IComponentService is
|
|
51
47
|
/// @dev unlocks the component associated with the caller
|
52
48
|
function unlock() external;
|
53
49
|
|
50
|
+
/// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
|
51
|
+
/// @param withdrawAmount the amount to withdraw
|
52
|
+
/// @return withdrawnAmount the amount that was actually withdrawn
|
53
|
+
function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
|
54
|
+
|
54
55
|
//-------- product ------------------------------------------------------//
|
55
56
|
|
56
57
|
/// @dev registers the sending component as a product component
|
@@ -77,6 +78,10 @@ interface IComponentService is
|
|
77
78
|
function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
|
78
79
|
function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
|
79
80
|
|
81
|
+
//-------- distributor --------------------------------------------------//
|
82
|
+
function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
|
83
|
+
function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
|
84
|
+
|
80
85
|
//-------- oracle -------------------------------------------------------//
|
81
86
|
|
82
87
|
/// @dev registers the sending component as an oracle component
|
@@ -99,4 +104,5 @@ interface IComponentService is
|
|
99
104
|
//-------- bundle -------------------------------------------------------//
|
100
105
|
function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
|
101
106
|
function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
|
107
|
+
|
102
108
|
}
|
@@ -4,23 +4,17 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
5
5
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
6
|
|
7
|
+
import {Amount} from "../type/Amount.sol";
|
7
8
|
import {IComponent} from "../shared/IComponent.sol";
|
8
9
|
import {IAuthorization} from "../authorization/IAuthorization.sol";
|
9
|
-
import {IComponents} from "../instance/module/IComponents.sol";
|
10
10
|
import {IInstance} from "../instance/IInstance.sol";
|
11
|
-
import {IInstanceService} from "../instance/IInstanceService.sol";
|
12
|
-
import {IProductService} from "../product/IProductService.sol";
|
13
|
-
import {IRegisterable} from "../shared/IRegisterable.sol";
|
14
11
|
import {NftId} from "../type/NftId.sol";
|
15
|
-
import {ObjectType} from "../type/ObjectType.sol";
|
16
|
-
import {TokenHandler} from "../shared/TokenHandler.sol";
|
17
12
|
|
18
13
|
/// @dev component base class
|
19
14
|
/// component examples are product, distribution, pool and oracle
|
20
15
|
interface IInstanceLinkedComponent is
|
21
16
|
IComponent
|
22
17
|
{
|
23
|
-
error ErrorComponentNotProductService(address caller);
|
24
18
|
error ErrorComponentNotInstance(NftId instanceNftId);
|
25
19
|
error ErrorComponentProductNftAlreadySet();
|
26
20
|
|
@@ -37,14 +31,19 @@ interface IInstanceLinkedComponent is
|
|
37
31
|
/// only component owner (nft holder) is authorizes to call this function
|
38
32
|
function unlock() external;
|
39
33
|
|
34
|
+
/// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
|
35
|
+
/// @param amount the amount to withdraw
|
36
|
+
/// @return withdrawnAmount the amount that was actually withdrawn
|
37
|
+
function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
|
38
|
+
|
40
39
|
/// @dev defines the instance to which this component is linked to
|
41
40
|
function getInstance() external view returns (IInstance instance);
|
42
41
|
|
42
|
+
/// @dev returns the initial component authorization specification.
|
43
|
+
function getAuthorization() external view returns (IAuthorization authorization);
|
44
|
+
|
43
45
|
/// @dev defines the product to which this component is linked to
|
44
46
|
/// this is only relevant for pool and distribution components
|
45
47
|
function getProductNftId() external view returns (NftId productNftId);
|
46
48
|
|
47
|
-
/// @dev returns the initial component authorization specification.
|
48
|
-
function getAuthorization() external view returns (IAuthorization authorization);
|
49
|
-
|
50
49
|
}
|
@@ -5,6 +5,7 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
5
5
|
|
6
6
|
import {IRegistryLinked} from "./IRegistryLinked.sol";
|
7
7
|
import {NftId} from "../type/NftId.sol";
|
8
|
+
import {ObjectType} from "../type/ObjectType.sol";
|
8
9
|
|
9
10
|
interface INftOwnable is
|
10
11
|
IERC165,
|
@@ -12,6 +13,7 @@ interface INftOwnable is
|
|
12
13
|
{
|
13
14
|
error ErrorNftOwnableInitialOwnerZero();
|
14
15
|
error ErrorNftOwnableNotOwner(address account);
|
16
|
+
error ErrorNftOwnableInvalidType(NftId nftId, ObjectType expectedObjectType);
|
15
17
|
|
16
18
|
error ErrorNftOwnableAlreadyLinked(NftId nftId);
|
17
19
|
error ErrorNftOwnableContractNotRegistered(address contractAddress);
|
@@ -9,37 +9,27 @@ import {ClaimId} from "../type/ClaimId.sol";
|
|
9
9
|
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
10
10
|
import {NftId} from "../type/NftId.sol";
|
11
11
|
import {PayoutId} from "../type/PayoutId.sol";
|
12
|
+
import {Timestamp} from "../type/Timestamp.sol";
|
12
13
|
|
13
|
-
/// @dev
|
14
|
-
///
|
14
|
+
/// @dev Generic interface for contracts that need to hold policies and receive payouts.
|
15
|
+
/// The framework notifies policy holder contracts for policy creation/expiry, claim confirmation and payout execution
|
15
16
|
interface IPolicyHolder is
|
16
17
|
IERC165,
|
17
18
|
IERC721Receiver,
|
18
19
|
IRegistryLinked
|
19
20
|
{
|
20
21
|
|
21
|
-
/// @dev
|
22
|
-
///
|
23
|
-
function policyActivated(NftId policyNftId) external;
|
22
|
+
/// @dev Callback function that will be called after successful policy activation.
|
23
|
+
/// Active policies may open claims under the activated policy.
|
24
|
+
function policyActivated(NftId policyNftId, Timestamp activatedAt) external;
|
24
25
|
|
25
|
-
/// @dev
|
26
|
-
/// expired policies
|
27
|
-
|
28
|
-
function policyExpired(NftId policyNftId) external;
|
26
|
+
/// @dev Callback function to indicate the specified policy has expired.
|
27
|
+
/// expired policies no longer accept new claims.
|
28
|
+
function policyExpired(NftId policyNftId, Timestamp expiredAt) external;
|
29
29
|
|
30
|
-
/// @dev
|
31
|
-
/// the contract implements its use case specific handling for such requests.
|
32
|
-
/// eg. creation of a pending payout, a corresponding claim against one of the policies held by the IPolicyHolder
|
33
|
-
function requestPayout(NftId requestingPolicyNftId, Amount requestedPayoutAmount) external;
|
34
|
-
|
35
|
-
/// @dev callback function to notify the confirmation of the specified claim
|
36
|
-
/// active policies may open claims under the activated policy
|
30
|
+
/// @dev Callback function to notify the confirmation of the specified claim.
|
37
31
|
function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
|
38
32
|
|
39
|
-
/// @dev
|
40
|
-
function payoutExecuted(NftId policyNftId, PayoutId payoutId,
|
41
|
-
|
42
|
-
/// @dev determines policy and claim specific beneficiary address
|
43
|
-
/// returned address will override GIF default where the policy nft holder is treated as beneficiary
|
44
|
-
function getBeneficiary(NftId policyNftId, PayoutId payoutId) external view returns (address beneficiary);
|
33
|
+
/// @dev Callback function to notify the successful payout.
|
34
|
+
function payoutExecuted(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary) external;
|
45
35
|
}
|
@@ -4,20 +4,20 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
6
6
|
|
7
|
-
contract
|
7
|
+
contract InitializableERC165 is
|
8
8
|
Initializable,
|
9
9
|
IERC165
|
10
10
|
{
|
11
11
|
mapping(bytes4 => bool) private _isSupported;
|
12
12
|
|
13
13
|
// @dev initializes with support for ERC165
|
14
|
-
function
|
14
|
+
function _initializeERC165() internal onlyInitializing() {
|
15
15
|
_isSupported[type(IERC165).interfaceId] = true;
|
16
16
|
}
|
17
17
|
|
18
18
|
// @dev register support for provided interfaceId
|
19
19
|
// includes initialization for ERC165_ID if not yet done
|
20
|
-
function
|
20
|
+
function _registerInterface(bytes4 interfaceId) internal onlyInitializing() {
|
21
21
|
_isSupported[interfaceId] = true;
|
22
22
|
}
|
23
23
|
|
@@ -6,6 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
|
|
6
6
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
7
7
|
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
8
8
|
|
9
|
+
import {Amount} from "../type/Amount.sol";
|
9
10
|
import {Component} from "./Component.sol";
|
10
11
|
import {IComponentService} from "./IComponentService.sol";
|
11
12
|
import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
|
@@ -36,6 +37,7 @@ abstract contract InstanceLinkedComponent is
|
|
36
37
|
IInstance _instance; // instance for this component
|
37
38
|
InstanceReader _instanceReader; // instance reader for this component
|
38
39
|
IAuthorization _initialAuthorization;
|
40
|
+
IComponentService _componentService;
|
39
41
|
}
|
40
42
|
|
41
43
|
function lock() external onlyOwner {
|
@@ -58,6 +60,17 @@ abstract contract InstanceLinkedComponent is
|
|
58
60
|
return _getInstanceLinkedComponentStorage()._initialAuthorization;
|
59
61
|
}
|
60
62
|
|
63
|
+
/// @inheritdoc IInstanceLinkedComponent
|
64
|
+
function withdrawFees(Amount amount)
|
65
|
+
external
|
66
|
+
virtual
|
67
|
+
onlyOwner()
|
68
|
+
restricted()
|
69
|
+
returns (Amount withdrawnAmount)
|
70
|
+
{
|
71
|
+
return _withdrawFees(amount);
|
72
|
+
}
|
73
|
+
|
61
74
|
function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
|
62
75
|
assembly {
|
63
76
|
$.slot := INSTANCE_LINKED_COMPONENT_LOCATION_V1
|
@@ -83,14 +96,13 @@ abstract contract InstanceLinkedComponent is
|
|
83
96
|
// set and check linked instance
|
84
97
|
InstanceLinkedComponentStorage storage $ = _getInstanceLinkedComponentStorage();
|
85
98
|
$._instance = IInstance(
|
86
|
-
IRegistry(registry).
|
87
|
-
instanceNftId).objectAddress);
|
99
|
+
IRegistry(registry).getObjectAddress(instanceNftId));
|
88
100
|
|
89
101
|
if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
|
90
102
|
revert ErrorComponentNotInstance(instanceNftId);
|
91
103
|
}
|
92
104
|
|
93
|
-
|
105
|
+
_initializeComponent(
|
94
106
|
$._instance.authority(),
|
95
107
|
registry,
|
96
108
|
instanceNftId,
|
@@ -105,9 +117,10 @@ abstract contract InstanceLinkedComponent is
|
|
105
117
|
// set component state
|
106
118
|
$._instanceReader = $._instance.getInstanceReader();
|
107
119
|
$._initialAuthorization = authorization;
|
120
|
+
$._componentService = IComponentService(_getServiceAddress(COMPONENT()));
|
108
121
|
|
109
|
-
|
110
|
-
|
122
|
+
_registerInterface(type(IAccessManaged).interfaceId);
|
123
|
+
_registerInterface(type(IInstanceLinkedComponent).interfaceId);
|
111
124
|
}
|
112
125
|
|
113
126
|
/// @dev for instance linked components the wallet address stored in the instance store.
|
@@ -118,7 +131,7 @@ abstract contract InstanceLinkedComponent is
|
|
118
131
|
|
119
132
|
|
120
133
|
function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
|
121
|
-
NftId componentNftId = getRegistry().
|
134
|
+
NftId componentNftId = getRegistry().getNftIdForAddress(address(this));
|
122
135
|
|
123
136
|
// if registered, attempt to return component info via instance reader
|
124
137
|
if (componentNftId.gtz()) {
|
@@ -141,6 +154,13 @@ abstract contract InstanceLinkedComponent is
|
|
141
154
|
return _getInstanceLinkedComponentStorage()._instanceReader;
|
142
155
|
}
|
143
156
|
|
157
|
+
function _withdrawFees(Amount amount)
|
158
|
+
internal
|
159
|
+
returns (Amount withdrawnAmount)
|
160
|
+
{
|
161
|
+
return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
|
162
|
+
}
|
163
|
+
|
144
164
|
|
145
165
|
/// @dev returns the service address for the specified domain
|
146
166
|
/// gets address via lookup from registry using the major version form the linked instance
|
@@ -1,13 +1,14 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {InitializableERC165} from "./InitializableERC165.sol";
|
5
5
|
import {INftOwnable} from "./INftOwnable.sol";
|
6
6
|
import {NftId} from "../type/NftId.sol";
|
7
|
+
import {ObjectType} from "../type/ObjectType.sol";
|
7
8
|
import {RegistryLinked} from "./RegistryLinked.sol";
|
8
9
|
|
9
10
|
contract NftOwnable is
|
10
|
-
|
11
|
+
InitializableERC165,
|
11
12
|
RegistryLinked,
|
12
13
|
INftOwnable
|
13
14
|
{
|
@@ -27,19 +28,33 @@ contract NftOwnable is
|
|
27
28
|
_;
|
28
29
|
}
|
29
30
|
|
31
|
+
modifier onlyNftOwner(NftId nftId) {
|
32
|
+
if(!getRegistry().isOwnerOf(nftId, msg.sender)) {
|
33
|
+
revert ErrorNftOwnableNotOwner(msg.sender);
|
34
|
+
}
|
35
|
+
_;
|
36
|
+
}
|
37
|
+
|
38
|
+
modifier onlyNftOfType(NftId nftId, ObjectType expectedObjectType) {
|
39
|
+
if(!getRegistry().isObjectType(nftId, expectedObjectType)) {
|
40
|
+
revert ErrorNftOwnableInvalidType(nftId, expectedObjectType);
|
41
|
+
}
|
42
|
+
_;
|
43
|
+
}
|
44
|
+
|
30
45
|
|
31
46
|
/// @dev initialization for upgradable contracts
|
32
47
|
// used in _initializeRegisterable
|
33
|
-
function
|
48
|
+
function _initializeNftOwnable(
|
34
49
|
address initialOwner,
|
35
50
|
address registryAddress
|
36
51
|
)
|
37
|
-
|
52
|
+
internal
|
38
53
|
virtual
|
39
54
|
onlyInitializing()
|
40
55
|
{
|
41
|
-
|
42
|
-
|
56
|
+
_initializeRegistryLinked(registryAddress);
|
57
|
+
_initializeERC165();
|
43
58
|
|
44
59
|
if(initialOwner == address(0)) {
|
45
60
|
revert ErrorNftOwnableInitialOwnerZero();
|
@@ -93,13 +108,14 @@ contract NftOwnable is
|
|
93
108
|
revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
|
94
109
|
}
|
95
110
|
|
96
|
-
$._nftId = getRegistry().
|
111
|
+
$._nftId = getRegistry().getNftIdForAddress(nftOwnableAddress);
|
97
112
|
|
98
113
|
return $._nftId;
|
99
114
|
}
|
100
115
|
|
101
116
|
|
102
117
|
function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
|
118
|
+
// solhint-disable-next-line no-inline-assembly
|
103
119
|
assembly {
|
104
120
|
$.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
|
105
121
|
}
|