@etherisc/gif-next 0.0.2-e5a6af8-639 → 0.0.2-e5bdc7a-061
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 +27 -6
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +55 -133
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +8 -38
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +133 -78
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +78 -46
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +11 -23
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +23 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +38 -147
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +49 -17
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +92 -190
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +2 -2
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +66 -107
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +33 -87
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +155 -141
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +391 -205
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +147 -42
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +46 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +24 -4
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +78 -11
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +85 -72
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +40 -27
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +302 -74
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +61 -25
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +46 -22
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +36 -46
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +22 -100
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +11 -23
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +8 -38
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +84 -60
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +66 -22
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +8 -53
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +49 -17
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +101 -206
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +58 -70
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +19 -57
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +11 -62
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +77 -75
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +8 -77
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +153 -159
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +61 -33
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +66 -31
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +42 -22
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +13 -38
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +84 -76
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +67 -47
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -7
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +38 -19
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +16 -23
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +132 -121
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +70 -42
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +54 -38
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +56 -32
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +13 -38
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +34 -18
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +40 -16
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +24 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +62 -38
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +107 -94
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +32 -16
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +39 -15
- 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 +12 -12
- 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 +8 -38
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +169 -102
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +74 -42
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +402 -6
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +11 -23
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +67 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +11 -23
- 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/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +8 -38
- 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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +29 -59
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +80 -152
- 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 +50 -46
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +36 -20
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +43 -19
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +43 -5
- 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/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +18 -2
- 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 +21 -1
- package/contracts/distribution/BasicDistribution.sol +2 -2
- package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
- package/contracts/distribution/Distribution.sol +5 -6
- package/contracts/distribution/DistributionService.sol +19 -20
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/FirePool.sol +19 -8
- package/contracts/examples/fire/FireProduct.sol +24 -11
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +8 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +34 -2
- package/contracts/examples/unpermissioned/SimpleProduct.sol +15 -21
- package/contracts/instance/BundleSet.sol +38 -34
- package/contracts/instance/IInstance.sol +6 -0
- package/contracts/instance/IInstanceService.sol +7 -5
- package/contracts/instance/Instance.sol +14 -5
- package/contracts/instance/InstanceAdmin.sol +6 -5
- package/contracts/instance/InstanceAuthorizationV3.sol +30 -7
- package/contracts/instance/InstanceReader.sol +85 -1
- package/contracts/instance/InstanceService.sol +32 -19
- package/contracts/instance/RiskSet.sol +119 -0
- package/contracts/instance/base/ObjectSet.sol +24 -25
- package/contracts/instance/module/IComponents.sol +1 -2
- package/contracts/instance/module/IPolicy.sol +2 -1
- package/contracts/instance/module/IRisk.sol +1 -0
- package/contracts/oracle/OracleService.sol +87 -69
- package/contracts/pool/BasicPool.sol +24 -3
- package/contracts/pool/BasicPoolAuthorization.sol +12 -1
- package/contracts/pool/BundleService.sol +37 -94
- package/contracts/pool/IBundleService.sol +2 -23
- package/contracts/pool/IPoolComponent.sol +1 -7
- package/contracts/pool/IPoolService.sol +12 -26
- package/contracts/pool/Pool.sol +112 -102
- package/contracts/pool/PoolService.sol +177 -99
- package/contracts/product/ApplicationService.sol +20 -18
- package/contracts/product/BasicProduct.sol +7 -11
- package/contracts/product/ClaimService.sol +19 -9
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IPolicyService.sol +17 -7
- package/contracts/product/PolicyService.sol +241 -191
- package/contracts/product/PricingService.sol +4 -1
- package/contracts/product/Product.sol +12 -40
- package/contracts/product/RiskService.sol +14 -3
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/Registry.sol +9 -1
- package/contracts/registry/RegistryAdmin.sol +14 -11
- package/contracts/registry/ReleaseRegistry.sol +2 -18
- package/contracts/registry/ServiceAuthorizationV3.sol +12 -31
- package/contracts/shared/Component.sol +35 -83
- package/contracts/shared/ComponentService.sol +105 -34
- package/contracts/shared/ComponentVerifyingService.sol +15 -13
- package/contracts/shared/ContractLib.sol +196 -10
- package/contracts/shared/IComponent.sol +5 -12
- package/contracts/shared/IComponentService.sol +13 -3
- package/contracts/shared/InstanceLinkedComponent.sol +1 -9
- package/contracts/shared/NftOwnable.sol +5 -1
- package/contracts/shared/Registerable.sol +0 -2
- package/contracts/shared/RegistryLinked.sol +6 -12
- package/contracts/shared/TokenHandler.sol +316 -66
- package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
- package/contracts/staking/IStaking.sol +9 -4
- package/contracts/staking/Staking.sol +29 -21
- package/contracts/staking/StakingService.sol +55 -8
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +6 -0
- package/contracts/type/ObjectType.sol +2 -0
- package/contracts/type/RiskId.sol +18 -6
- package/package.json +3 -3
@@ -181,7 +181,7 @@ abstract contract InstanceLinkedComponent is
|
|
181
181
|
info = _getInstanceReader().getComponentInfo(getNftId());
|
182
182
|
|
183
183
|
// check if also registered with instance
|
184
|
-
if (info.
|
184
|
+
if (address(info.tokenHandler) != address(0)) {
|
185
185
|
return info;
|
186
186
|
}
|
187
187
|
}
|
@@ -202,12 +202,4 @@ abstract contract InstanceLinkedComponent is
|
|
202
202
|
{
|
203
203
|
return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
|
204
204
|
}
|
205
|
-
|
206
|
-
|
207
|
-
/// @dev returns the service address for the specified domain
|
208
|
-
/// gets address via lookup from registry using the major version form the linked instance
|
209
|
-
function _getServiceAddress(ObjectType domain) internal view returns (address service) {
|
210
|
-
VersionPart release = _getInstanceLinkedComponentStorage()._instance.getRelease();
|
211
|
-
return getRegistry().getServiceAddress(domain, release);
|
212
|
-
}
|
213
205
|
}
|
@@ -36,10 +36,14 @@ contract NftOwnable is
|
|
36
36
|
}
|
37
37
|
|
38
38
|
modifier onlyNftOfType(NftId nftId, ObjectType expectedObjectType) {
|
39
|
+
_checkNftType(nftId, expectedObjectType);
|
40
|
+
_;
|
41
|
+
}
|
42
|
+
|
43
|
+
function _checkNftType(NftId nftId, ObjectType expectedObjectType) internal view {
|
39
44
|
if(!getRegistry().isObjectType(nftId, expectedObjectType)) {
|
40
45
|
revert ErrorNftOwnableInvalidType(nftId, expectedObjectType);
|
41
46
|
}
|
42
|
-
_;
|
43
47
|
}
|
44
48
|
|
45
49
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
|
-
|
6
4
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
7
5
|
import {NftOwnable} from "../shared/NftOwnable.sol";
|
8
6
|
import {ObjectType} from "../type/ObjectType.sol";
|
@@ -2,6 +2,8 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
|
+
|
6
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
5
7
|
import {IRegistry} from "../registry/IRegistry.sol";
|
6
8
|
import {IRegistryLinked} from "./IRegistryLinked.sol";
|
7
9
|
|
@@ -16,25 +18,17 @@ contract RegistryLinked is
|
|
16
18
|
/// @dev initialization for upgradable contracts
|
17
19
|
// used in _initializeRegisterable
|
18
20
|
function _initializeRegistryLinked(
|
19
|
-
address
|
21
|
+
address registry
|
20
22
|
)
|
21
23
|
internal
|
22
24
|
virtual
|
23
25
|
onlyInitializing()
|
24
26
|
{
|
25
|
-
if (
|
26
|
-
revert ErrorNotRegistry(
|
27
|
+
if (!ContractLib.isRegistry(registry)) {
|
28
|
+
revert ErrorNotRegistry(registry);
|
27
29
|
}
|
28
30
|
|
29
|
-
_registry = IRegistry(
|
30
|
-
|
31
|
-
try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
|
32
|
-
if (!isRegistry) {
|
33
|
-
revert ErrorNotRegistry(registryAddress);
|
34
|
-
}
|
35
|
-
} catch {
|
36
|
-
revert ErrorNotRegistry(registryAddress);
|
37
|
-
}
|
31
|
+
_registry = IRegistry(registry);
|
38
32
|
}
|
39
33
|
|
40
34
|
|
@@ -5,91 +5,201 @@ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManage
|
|
5
5
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
6
|
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
7
7
|
|
8
|
-
import {Amount} from "../type/Amount.sol";
|
8
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
9
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
10
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
11
|
+
import {NftId} from "../type/NftId.sol";
|
12
|
+
import {SERVICE} from "../type/ObjectType.sol";
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
14
|
+
|
15
|
+
contract TokenHandlerBase {
|
16
|
+
|
17
|
+
// _setWallet
|
18
|
+
event LogTokenHandlerWalletAddressChanged(NftId componentNftId, address oldWallet, address newWallet);
|
19
|
+
event LogTokenHandlerWalletTokensTransferred(NftId componentNftId, address oldWallet, address newWallet, Amount amount);
|
20
|
+
|
21
|
+
// _approveTokenHandler
|
22
|
+
event LogTokenHandlerTokenApproved(NftId nftId, address tokenHandler, address token, Amount amount, bool isMaxAmount);
|
23
|
+
|
24
|
+
// _transfer
|
25
|
+
event LogTokenHandlerTokenTransfer(address token, address from, address to, Amount amount);
|
26
|
+
|
27
|
+
// constructor
|
28
|
+
error ErrorTokenHandlerNotRegistry(address registry);
|
29
|
+
error ErrorTokenHandlerComponentNotRegistered(address component);
|
30
|
+
error ErrorTokenHandlerTokenAddressZero();
|
31
|
+
|
32
|
+
// _setWallet
|
33
|
+
error ErrorTokenHandlerNewWalletAddressZero();
|
34
|
+
error ErrorTokenHandlerAddressIsSameAsCurrent();
|
35
|
+
|
36
|
+
// _approveTokenHandler
|
37
|
+
error ErrorTokenHandlerNotWallet(NftId nftId, address tokenHandler, address wallet);
|
38
|
+
|
39
|
+
// _pullAndPullToken
|
40
|
+
error ErrorTokenHandlerWalletsNotDistinct(address from, address to1, address to2);
|
41
|
+
error ErrorTokenHandlerPushAmountsTooLarge(Amount pushAmount, Amount pullAmount);
|
42
|
+
|
43
|
+
// _checkPreconditions
|
15
44
|
error ErrorTokenHandlerBalanceTooLow(address token, address from, uint256 balance, uint256 expectedBalance);
|
16
45
|
error ErrorTokenHandlerAllowanceTooSmall(address token, address from, address spender, uint256 allowance, uint256 expectedAllowance);
|
17
|
-
error
|
18
|
-
|
19
|
-
|
46
|
+
error ErrorTokenHandlerAmountIsZero();
|
47
|
+
|
48
|
+
IRegistry public immutable REGISTRY;
|
49
|
+
IERC20Metadata public immutable TOKEN;
|
50
|
+
address public immutable COMPONENT;
|
51
|
+
NftId public immutable NFT_ID;
|
52
|
+
|
53
|
+
address internal _wallet;
|
54
|
+
|
55
|
+
constructor(
|
56
|
+
address registry,
|
57
|
+
address component,
|
58
|
+
address token
|
59
|
+
)
|
60
|
+
{
|
61
|
+
if (!ContractLib.isRegistry(registry)) {
|
62
|
+
revert ErrorTokenHandlerNotRegistry(registry);
|
63
|
+
}
|
64
|
+
|
65
|
+
if (token == address(0)) {
|
66
|
+
revert ErrorTokenHandlerTokenAddressZero();
|
67
|
+
}
|
68
|
+
|
69
|
+
REGISTRY = IRegistry(registry);
|
70
|
+
COMPONENT = component;
|
71
|
+
NFT_ID = REGISTRY.getNftIdForAddress(component);
|
20
72
|
|
21
|
-
|
73
|
+
if (NFT_ID.eqz()) {
|
74
|
+
revert ErrorTokenHandlerComponentNotRegistered(component);
|
75
|
+
}
|
22
76
|
|
23
|
-
|
24
|
-
_token = IERC20Metadata(token);
|
77
|
+
TOKEN = IERC20Metadata(token);
|
25
78
|
}
|
26
79
|
|
27
|
-
|
28
|
-
|
29
|
-
|
80
|
+
|
81
|
+
/// @dev Returns the wallet linked to this TokenHandler.
|
82
|
+
function getWallet()
|
83
|
+
public
|
30
84
|
view
|
31
|
-
returns (
|
85
|
+
returns (address wallet)
|
32
86
|
{
|
33
|
-
|
87
|
+
if (_wallet == address(0)) {
|
88
|
+
return address(this);
|
89
|
+
}
|
90
|
+
|
91
|
+
return _wallet;
|
34
92
|
}
|
35
|
-
|
36
|
-
|
37
|
-
///
|
38
|
-
|
39
|
-
|
40
|
-
|
93
|
+
|
94
|
+
|
95
|
+
/// @dev Approves token handler to spend up to the specified amount of tokens.
|
96
|
+
/// Sets spending limit to type(uint256).max for AmountLib.max().
|
97
|
+
/// Reverts if wallet is not token handler itself.
|
98
|
+
/// Sets approvel using SareERC20.forceApprove internally.
|
99
|
+
function _approve(
|
100
|
+
IERC20Metadata token,
|
41
101
|
Amount amount
|
42
102
|
)
|
43
|
-
|
44
|
-
restricted()
|
103
|
+
internal
|
45
104
|
{
|
46
|
-
|
105
|
+
// check that wallet is token handler contract itself
|
106
|
+
if(_wallet != address(0)) {
|
107
|
+
revert ErrorTokenHandlerNotWallet(NFT_ID, address(this), _wallet);
|
108
|
+
}
|
109
|
+
|
110
|
+
// update spending limit for AmountLib.max() to type(uint256).max
|
111
|
+
uint256 amountInt = amount.toInt();
|
112
|
+
bool isMaxAmount = false;
|
113
|
+
if (amount == AmountLib.max()) {
|
114
|
+
amountInt = type(uint256).max;
|
115
|
+
isMaxAmount = true;
|
116
|
+
}
|
117
|
+
|
118
|
+
emit LogTokenHandlerTokenApproved(NFT_ID, address(this), address(token), amount, isMaxAmount);
|
119
|
+
|
120
|
+
// execute approval
|
121
|
+
SafeERC20.forceApprove(
|
122
|
+
token,
|
123
|
+
address(this),
|
124
|
+
amountInt);
|
47
125
|
}
|
48
126
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
address from,
|
53
|
-
address to,
|
54
|
-
Amount amount,
|
55
|
-
address to2,
|
56
|
-
Amount amount2,
|
57
|
-
address to3,
|
58
|
-
Amount amount3
|
59
|
-
)
|
60
|
-
external
|
61
|
-
restricted()
|
127
|
+
|
128
|
+
function _setWallet(address newWallet)
|
129
|
+
internal
|
62
130
|
{
|
63
|
-
|
64
|
-
|
131
|
+
address oldWallet = _wallet;
|
132
|
+
if (newWallet == oldWallet) {
|
133
|
+
revert ErrorTokenHandlerAddressIsSameAsCurrent();
|
65
134
|
}
|
66
135
|
|
67
|
-
|
136
|
+
// effects
|
137
|
+
address oldWalletForBalance = getWallet();
|
138
|
+
_wallet = newWallet;
|
68
139
|
|
69
|
-
|
70
|
-
|
140
|
+
emit LogTokenHandlerWalletAddressChanged(NFT_ID, oldWallet, newWallet);
|
141
|
+
|
142
|
+
// interactions
|
143
|
+
Amount balanceAmount = AmountLib.toAmount(
|
144
|
+
TOKEN.balanceOf(oldWalletForBalance));
|
145
|
+
|
146
|
+
if (balanceAmount.gtz()) {
|
147
|
+
// move tokens from old to new wallet
|
148
|
+
emit LogTokenHandlerWalletTokensTransferred(NFT_ID, oldWallet, newWallet, balanceAmount);
|
149
|
+
|
150
|
+
if (oldWallet == address(0)) {
|
151
|
+
// transfer from the component requires an allowance
|
152
|
+
_transfer(address(this), newWallet, balanceAmount, true);
|
153
|
+
} else if (newWallet == address(0)) {
|
154
|
+
_transfer(oldWallet, address(this), balanceAmount, true);
|
155
|
+
} else {
|
156
|
+
_transfer(oldWallet, newWallet, balanceAmount, true);
|
157
|
+
}
|
71
158
|
}
|
72
|
-
|
73
|
-
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
function _pullAndPushToken(
|
163
|
+
address from,
|
164
|
+
Amount pullAmount,
|
165
|
+
address to1,
|
166
|
+
Amount amount1,
|
167
|
+
address to2,
|
168
|
+
Amount amount2
|
169
|
+
)
|
170
|
+
internal
|
171
|
+
{
|
172
|
+
address wallet = getWallet();
|
173
|
+
|
174
|
+
if (wallet == to1 || wallet == to2 || to1 == to2) {
|
175
|
+
revert ErrorTokenHandlerWalletsNotDistinct(wallet, to1, to2);
|
74
176
|
}
|
75
|
-
|
76
|
-
|
177
|
+
|
178
|
+
if (amount1 + amount2 > pullAmount) {
|
179
|
+
revert ErrorTokenHandlerPushAmountsTooLarge(amount1 + amount2, pullAmount);
|
77
180
|
}
|
181
|
+
|
182
|
+
_pullToken(from, pullAmount);
|
183
|
+
|
184
|
+
if (amount1.gtz()) { _pushToken(to1, amount1); }
|
185
|
+
if (amount2.gtz()) { _pushToken(to2, amount2); }
|
78
186
|
}
|
79
187
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
188
|
+
|
189
|
+
function _pullToken(address from, Amount amount)
|
190
|
+
internal
|
191
|
+
{
|
192
|
+
_transfer(from, getWallet(), amount, true);
|
193
|
+
}
|
194
|
+
|
195
|
+
|
196
|
+
function _pushToken(address to, Amount amount)
|
197
|
+
internal
|
89
198
|
{
|
90
|
-
_transfer(
|
199
|
+
_transfer(getWallet(), to, amount, true);
|
91
200
|
}
|
92
201
|
|
202
|
+
|
93
203
|
function _transfer(
|
94
204
|
address from,
|
95
205
|
address to,
|
@@ -104,14 +214,16 @@ contract TokenHandler is AccessManaged {
|
|
104
214
|
}
|
105
215
|
|
106
216
|
// transfer the tokens
|
107
|
-
emit LogTokenHandlerTokenTransfer(address(
|
217
|
+
emit LogTokenHandlerTokenTransfer(address(TOKEN), from, to, amount);
|
218
|
+
|
108
219
|
SafeERC20.safeTransferFrom(
|
109
|
-
|
220
|
+
TOKEN,
|
110
221
|
from,
|
111
222
|
to,
|
112
223
|
amount.toInt());
|
113
224
|
}
|
114
225
|
|
226
|
+
|
115
227
|
function _checkPreconditions(
|
116
228
|
address from,
|
117
229
|
Amount amount
|
@@ -124,16 +236,154 @@ contract TokenHandler is AccessManaged {
|
|
124
236
|
revert ErrorTokenHandlerAmountIsZero();
|
125
237
|
}
|
126
238
|
|
239
|
+
// allowance must be >= amount
|
240
|
+
uint256 allowance = TOKEN.allowance(from, address(this));
|
241
|
+
if (allowance < amount.toInt()) {
|
242
|
+
revert ErrorTokenHandlerAllowanceTooSmall(address(TOKEN), from, address(this), allowance, amount.toInt());
|
243
|
+
}
|
244
|
+
|
127
245
|
// balance must be >= amount
|
128
|
-
uint256 balance =
|
246
|
+
uint256 balance = TOKEN.balanceOf(from);
|
129
247
|
if (balance < amount.toInt()) {
|
130
|
-
revert ErrorTokenHandlerBalanceTooLow(address(
|
248
|
+
revert ErrorTokenHandlerBalanceTooLow(address(TOKEN), from, balance, amount.toInt());
|
131
249
|
}
|
250
|
+
}
|
251
|
+
}
|
132
252
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
253
|
+
|
254
|
+
/// @dev Token specific transfer helper
|
255
|
+
/// a default token contract is provided via contract constructor
|
256
|
+
/// relies internally on oz SafeERC20.safeTransferFrom
|
257
|
+
contract TokenHandler is
|
258
|
+
AccessManaged,
|
259
|
+
TokenHandlerBase
|
260
|
+
{
|
261
|
+
|
262
|
+
// onlyService
|
263
|
+
error ErrorTokenHandlerNotService(address service);
|
264
|
+
|
265
|
+
// TODO delete
|
266
|
+
error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
|
267
|
+
|
268
|
+
modifier onlyService() {
|
269
|
+
if (!REGISTRY.isObjectType(msg.sender, SERVICE())) {
|
270
|
+
revert ErrorTokenHandlerNotService(msg.sender);
|
137
271
|
}
|
272
|
+
_;
|
273
|
+
}
|
274
|
+
|
275
|
+
constructor(
|
276
|
+
address registry,
|
277
|
+
address component,
|
278
|
+
address token,
|
279
|
+
address authority
|
280
|
+
)
|
281
|
+
TokenHandlerBase(registry, component, token)
|
282
|
+
AccessManaged(authority)
|
283
|
+
{ }
|
284
|
+
|
285
|
+
/// @dev sets the wallet address for the component.
|
286
|
+
/// if the current wallet has tokens, these will be transferred.
|
287
|
+
/// if the new wallet address is externally owned, an approval from the
|
288
|
+
/// owner of the external wallet to the tokenhandler of the component that
|
289
|
+
/// covers the current component balance must exist
|
290
|
+
function setWallet(address newWallet)
|
291
|
+
external
|
292
|
+
// restricted() // TODO re-activate
|
293
|
+
onlyService()
|
294
|
+
{
|
295
|
+
_setWallet(newWallet);
|
296
|
+
}
|
297
|
+
|
298
|
+
|
299
|
+
/// @dev Approves token handler to spend up to the specified amount of tokens.
|
300
|
+
/// Sets spending limit to type(uint256).max for AmountLib.max().
|
301
|
+
/// Reverts if component wallet is not component itself.
|
302
|
+
/// Sets approvel using SareERC20.forceApprove internally.
|
303
|
+
function approve(
|
304
|
+
IERC20Metadata token,
|
305
|
+
Amount amount
|
306
|
+
)
|
307
|
+
external
|
308
|
+
// restricted() // TODO re-activate
|
309
|
+
onlyService()
|
310
|
+
{
|
311
|
+
_approve(token, amount);
|
312
|
+
}
|
313
|
+
|
314
|
+
/// @dev Collect tokens from outside of GIF and transfer them to the wallet.
|
315
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
316
|
+
function collectTokens(
|
317
|
+
address from,
|
318
|
+
Amount amount
|
319
|
+
)
|
320
|
+
external
|
321
|
+
// restricted() // TODO re-activate
|
322
|
+
onlyService()
|
323
|
+
{
|
324
|
+
_pullToken(from, amount);
|
325
|
+
}
|
326
|
+
|
327
|
+
|
328
|
+
/// @dev Collect tokens from outside of GIF and transfer them to the wallet.
|
329
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
330
|
+
function pushToken(
|
331
|
+
address from,
|
332
|
+
Amount amount
|
333
|
+
)
|
334
|
+
external
|
335
|
+
// restricted() // TODO re-activate
|
336
|
+
onlyService()
|
337
|
+
{
|
338
|
+
_pushToken(from, amount);
|
339
|
+
}
|
340
|
+
|
341
|
+
|
342
|
+
/// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
|
343
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
344
|
+
function collectTokensToThreeRecipients(
|
345
|
+
address from,
|
346
|
+
address to,
|
347
|
+
Amount amount,
|
348
|
+
address to2,
|
349
|
+
Amount amount2,
|
350
|
+
address to3,
|
351
|
+
Amount amount3
|
352
|
+
)
|
353
|
+
external
|
354
|
+
restricted()
|
355
|
+
onlyService()
|
356
|
+
{
|
357
|
+
if (to == to2 || to == to3 || to2 == to3) {
|
358
|
+
revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
|
359
|
+
}
|
360
|
+
|
361
|
+
_checkPreconditions(from, amount + amount2 + amount3);
|
362
|
+
|
363
|
+
if (amount.gtz()) {
|
364
|
+
_transfer(from, to, amount, false);
|
365
|
+
}
|
366
|
+
if (amount2.gtz()) {
|
367
|
+
_transfer(from, to2, amount2, false);
|
368
|
+
}
|
369
|
+
if (amount3.gtz()) {
|
370
|
+
_transfer(from, to3, amount3, false);
|
371
|
+
}
|
372
|
+
}
|
373
|
+
|
374
|
+
|
375
|
+
/// @dev distribute tokens from a wallet within the scope of gif to an external address.
|
376
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
377
|
+
function distributeTokens(
|
378
|
+
address from,
|
379
|
+
address to,
|
380
|
+
Amount amount
|
381
|
+
)
|
382
|
+
external
|
383
|
+
restricted()
|
384
|
+
onlyService()
|
385
|
+
{
|
386
|
+
// _transfer(from, to, amount, true);
|
387
|
+
_pushToken(to, amount);
|
138
388
|
}
|
139
389
|
}
|
@@ -5,8 +5,16 @@ import {TokenHandler} from "./TokenHandler.sol";
|
|
5
5
|
|
6
6
|
library TokenHandlerDeployerLib {
|
7
7
|
|
8
|
-
function deployTokenHandler(
|
9
|
-
|
8
|
+
function deployTokenHandler(
|
9
|
+
address registry,
|
10
|
+
address component,
|
11
|
+
address token,
|
12
|
+
address authority
|
13
|
+
)
|
14
|
+
public
|
15
|
+
returns (TokenHandler)
|
16
|
+
{
|
17
|
+
return new TokenHandler(registry, component, token, authority);
|
10
18
|
}
|
11
19
|
|
12
20
|
}
|
@@ -30,6 +30,9 @@ interface IStaking is
|
|
30
30
|
error ErrorStakingNotStakingOwner();
|
31
31
|
error ErrorStakingNotNftOwner(NftId nftId);
|
32
32
|
|
33
|
+
// initializeTokenHandler
|
34
|
+
error ErrorStakingNotRegistry(address registry);
|
35
|
+
|
33
36
|
// staking rate
|
34
37
|
error ErrorStakingTokenNotRegistered(uint256 chainId, address token);
|
35
38
|
|
@@ -64,6 +67,8 @@ interface IStaking is
|
|
64
67
|
UFixed rewardRate;
|
65
68
|
}
|
66
69
|
|
70
|
+
function initializeTokenHandler() external;
|
71
|
+
|
67
72
|
// staking rate management
|
68
73
|
|
69
74
|
/// @dev sets the rate that converts 1 token of total value locked into the
|
@@ -155,11 +160,11 @@ interface IStaking is
|
|
155
160
|
|
156
161
|
//--- helper functions --------------------------------------------------//
|
157
162
|
|
158
|
-
/// @dev transfers the specified amount of dips from the from address to the staking wallet.
|
159
|
-
function collectDipAmount(address from, Amount dipAmount) external;
|
163
|
+
// /// @dev transfers the specified amount of dips from the from address to the staking wallet.
|
164
|
+
// function collectDipAmount(address from, Amount dipAmount) external;
|
160
165
|
|
161
|
-
/// @dev transfers the specified amount of dips from the staking wallet to the to addess.
|
162
|
-
function transferDipAmount(address to, Amount dipAmount) external;
|
166
|
+
// /// @dev transfers the specified amount of dips from the staking wallet to the to addess.
|
167
|
+
// function transferDipAmount(address to, Amount dipAmount) external;
|
163
168
|
|
164
169
|
//--- view and pure functions -------------------------------------------//
|
165
170
|
|
@@ -1,6 +1,8 @@
|
|
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
|
+
|
4
6
|
import {IRegistry} from "../registry/IRegistry.sol";
|
5
7
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
6
8
|
import {IStaking} from "./IStaking.sol";
|
@@ -9,8 +11,9 @@ import {IVersionable} from "../upgradeability/IVersionable.sol";
|
|
9
11
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
10
12
|
import {Component} from "../shared/Component.sol";
|
11
13
|
import {IComponent} from "../shared/IComponent.sol";
|
14
|
+
import {IComponentService} from "../shared/IComponentService.sol";
|
12
15
|
import {NftId} from "../type/NftId.sol";
|
13
|
-
import {ObjectType, STAKING} from "../type/ObjectType.sol";
|
16
|
+
import {ObjectType, COMPONENT, STAKING} from "../type/ObjectType.sol";
|
14
17
|
import {Seconds} from "../type/Seconds.sol";
|
15
18
|
import {StakeManagerLib} from "./StakeManagerLib.sol";
|
16
19
|
import {StakingReader} from "./StakingReader.sol";
|
@@ -59,6 +62,21 @@ contract Staking is
|
|
59
62
|
_;
|
60
63
|
}
|
61
64
|
|
65
|
+
function initializeTokenHandler()
|
66
|
+
external
|
67
|
+
{
|
68
|
+
if (msg.sender != address(getRegistry())) {
|
69
|
+
revert ErrorStakingNotRegistry(msg.sender);
|
70
|
+
}
|
71
|
+
|
72
|
+
StakingStorage storage $ = _getStakingStorage();
|
73
|
+
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
74
|
+
address(getRegistry()),
|
75
|
+
address(this),
|
76
|
+
address(getToken()),
|
77
|
+
getRegistry().getAuthority());
|
78
|
+
}
|
79
|
+
|
62
80
|
// set/update staking reader
|
63
81
|
function setStakingReader(StakingReader stakingReader)
|
64
82
|
external
|
@@ -371,25 +389,6 @@ contract Staking is
|
|
371
389
|
}
|
372
390
|
|
373
391
|
|
374
|
-
|
375
|
-
//--- other functions ---------------------------------------------------//
|
376
|
-
|
377
|
-
function collectDipAmount(address from, Amount dipAmount)
|
378
|
-
external
|
379
|
-
restricted() // only staking service
|
380
|
-
{
|
381
|
-
getTokenHandler().collectTokens(from, getWallet(), dipAmount);
|
382
|
-
}
|
383
|
-
|
384
|
-
|
385
|
-
function transferDipAmount(address to, Amount dipAmount)
|
386
|
-
external
|
387
|
-
restricted() // only staking service
|
388
|
-
{
|
389
|
-
getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
|
390
|
-
}
|
391
|
-
|
392
|
-
|
393
392
|
//--- view functions ----------------------------------------------------//
|
394
393
|
|
395
394
|
function getStakingReader() public view returns (StakingReader reader) {
|
@@ -444,6 +443,16 @@ contract Staking is
|
|
444
443
|
}
|
445
444
|
|
446
445
|
|
446
|
+
function _approveTokenHandler(IERC20Metadata token, Amount amount)
|
447
|
+
internal
|
448
|
+
virtual override
|
449
|
+
{
|
450
|
+
IComponentService(_getServiceAddress(COMPONENT())).approveStakingTokenHandler(
|
451
|
+
token,
|
452
|
+
amount);
|
453
|
+
}
|
454
|
+
|
455
|
+
|
447
456
|
function _initialize(
|
448
457
|
address owner,
|
449
458
|
bytes memory data
|
@@ -483,7 +492,6 @@ contract Staking is
|
|
483
492
|
$._store = StakingStore(stakingStoreAddress);
|
484
493
|
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
485
494
|
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
486
|
-
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
|
487
495
|
|
488
496
|
_registerInterface(type(IStaking).interfaceId);
|
489
497
|
}
|