@etherisc/gif-next 0.0.2-e8ea5fe-337 → 0.0.2-e91c6be-472
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 +28 -7
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +162 -327
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +102 -243
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +180 -198
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +131 -107
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +92 -81
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +52 -0
- 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 +1429 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1430 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +31 -86
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +72 -123
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +165 -138
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +286 -83
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +96 -245
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +197 -116
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +121 -286
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +87 -76
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +97 -238
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +107 -159
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +99 -83
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +115 -256
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +203 -208
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +135 -107
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +72 -15
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +107 -107
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +272 -185
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +115 -267
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +420 -366
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +128 -88
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +87 -144
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +96 -80
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +156 -251
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +202 -200
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +136 -104
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +64 -8
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +147 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +146 -89
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +267 -167
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +127 -91
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +170 -219
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +111 -91
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +154 -249
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +81 -138
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +93 -77
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -33
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +515 -94
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +76 -213
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +426 -263
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -110
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +111 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -51
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +87 -76
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +97 -238
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +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 +84 -87
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +152 -311
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +112 -97
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
- 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/Amount.sol/AmountLib.json +32 -8
- 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 +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +64 -59
- package/contracts/authorization/Authorization.sol +111 -39
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +4 -3
- package/contracts/authorization/IAuthorization.sol +13 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ReleaseAccessManager.sol +38 -0
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +4 -3
- package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
- package/contracts/distribution/Distribution.sol +12 -23
- package/contracts/distribution/DistributionService.sol +78 -60
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +86 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +431 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
- package/contracts/instance/IInstance.sol +4 -1
- package/contracts/instance/IInstanceService.sol +2 -23
- package/contracts/instance/Instance.sol +22 -19
- package/contracts/instance/InstanceAdmin.sol +23 -31
- package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
- package/contracts/instance/InstanceReader.sol +83 -18
- package/contracts/instance/InstanceService.sol +35 -88
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/module/IComponents.sol +10 -6
- package/contracts/instance/module/IPolicy.sol +4 -3
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +5 -16
- package/contracts/oracle/OracleService.sol +56 -43
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +33 -24
- package/contracts/pool/BasicPoolAuthorization.sol +12 -2
- package/contracts/pool/BundleService.sol +96 -49
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +11 -5
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +42 -30
- package/contracts/pool/Pool.sol +142 -123
- package/contracts/pool/PoolService.sol +254 -143
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +20 -9
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +8 -12
- package/contracts/product/BasicProductAuthorization.sol +0 -1
- package/contracts/product/ClaimService.sol +235 -108
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IClaimService.sol +3 -2
- package/contracts/product/IPolicyService.sol +13 -4
- package/contracts/product/IPricingService.sol +9 -9
- package/contracts/product/IProductComponent.sol +23 -3
- package/contracts/product/PolicyService.sol +169 -47
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +12 -13
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +77 -70
- package/contracts/product/RiskService.sol +4 -5
- package/contracts/product/RiskServiceManager.sol +4 -4
- package/contracts/registry/ChainNft.sol +68 -38
- package/contracts/registry/IRegistry.sol +56 -17
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +349 -200
- package/contracts/registry/RegistryAdmin.sol +146 -58
- package/contracts/registry/RegistryService.sol +35 -46
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +204 -204
- package/contracts/registry/ServiceAuthorizationV3.sol +24 -20
- package/contracts/shared/Component.sol +62 -101
- package/contracts/shared/ComponentService.sol +291 -153
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +27 -16
- package/contracts/shared/ContractLib.sol +54 -0
- package/contracts/shared/IComponent.sol +10 -13
- package/contracts/shared/IComponentService.sol +38 -16
- package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +11 -0
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +70 -37
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +26 -6
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +19 -11
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +20 -18
- package/contracts/shared/TokenHandler.sol +324 -66
- package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
- package/contracts/staking/IStaking.sol +9 -4
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/Staking.sol +34 -27
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +71 -25
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +1 -0
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +16 -2
- package/contracts/type/RoleId.sol +0 -12
- package/contracts/type/StateId.sol +14 -1
- package/contracts/type/UFixed.sol +4 -0
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +4 -3
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/shared/InitializableCustom.sol +0 -177
@@ -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
|
+
}
|
20
68
|
|
21
|
-
|
69
|
+
REGISTRY = IRegistry(registry);
|
70
|
+
COMPONENT = component;
|
71
|
+
NFT_ID = REGISTRY.getNftIdForAddress(component);
|
22
72
|
|
23
|
-
|
24
|
-
|
73
|
+
if (NFT_ID.eqz()) {
|
74
|
+
revert ErrorTokenHandlerComponentNotRegistered(component);
|
75
|
+
}
|
76
|
+
|
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
|
-
address from,
|
84
|
-
address to,
|
85
|
-
Amount amount
|
86
|
-
)
|
87
|
-
external
|
88
|
-
restricted()
|
188
|
+
|
189
|
+
function _pullToken(address from, Amount amount)
|
190
|
+
internal
|
89
191
|
{
|
90
|
-
_transfer(from,
|
192
|
+
_transfer(from, getWallet(), amount, true);
|
91
193
|
}
|
92
194
|
|
195
|
+
|
196
|
+
function _pushToken(address to, Amount amount)
|
197
|
+
internal
|
198
|
+
{
|
199
|
+
_transfer(getWallet(), to, amount, true);
|
200
|
+
}
|
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,162 @@ 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
|
+
|
266
|
+
error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
|
267
|
+
|
268
|
+
// TODO cleanup
|
269
|
+
// IRegistry public immutable REGISTRY;
|
270
|
+
// IERC20Metadata public immutable TOKEN;
|
271
|
+
// address public immutable COMPONENT;
|
272
|
+
// NftId public immutable NFT_ID;
|
273
|
+
|
274
|
+
// address private _wallet;
|
275
|
+
|
276
|
+
modifier onlyService() {
|
277
|
+
if (!REGISTRY.isObjectType(msg.sender, SERVICE())) {
|
278
|
+
revert ErrorTokenHandlerNotService(msg.sender);
|
279
|
+
}
|
280
|
+
_;
|
281
|
+
}
|
282
|
+
|
283
|
+
constructor(
|
284
|
+
address registry,
|
285
|
+
address component,
|
286
|
+
address token,
|
287
|
+
address authority
|
288
|
+
)
|
289
|
+
TokenHandlerBase(registry, component, token)
|
290
|
+
AccessManaged(authority)
|
291
|
+
{ }
|
292
|
+
|
293
|
+
/// @dev sets the wallet address for the component.
|
294
|
+
/// if the current wallet has tokens, these will be transferred.
|
295
|
+
/// if the new wallet address is externally owned, an approval from the
|
296
|
+
/// owner of the external wallet to the tokenhandler of the component that
|
297
|
+
/// covers the current component balance must exist
|
298
|
+
function setWallet(address newWallet)
|
299
|
+
external
|
300
|
+
// restricted() // TODO re-activate
|
301
|
+
onlyService()
|
302
|
+
{
|
303
|
+
_setWallet(newWallet);
|
304
|
+
}
|
305
|
+
|
306
|
+
|
307
|
+
/// @dev Approves token handler to spend up to the specified amount of tokens.
|
308
|
+
/// Sets spending limit to type(uint256).max for AmountLib.max().
|
309
|
+
/// Reverts if component wallet is not component itself.
|
310
|
+
/// Sets approvel using SareERC20.forceApprove internally.
|
311
|
+
function approve(
|
312
|
+
IERC20Metadata token,
|
313
|
+
Amount amount
|
314
|
+
)
|
315
|
+
external
|
316
|
+
// restricted() // TODO re-activate
|
317
|
+
onlyService()
|
318
|
+
{
|
319
|
+
_approve(token, amount);
|
320
|
+
}
|
321
|
+
|
322
|
+
/// @dev Collect tokens from outside of GIF and transfer them to the wallet.
|
323
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
324
|
+
function collectTokens(
|
325
|
+
address from,
|
326
|
+
Amount amount
|
327
|
+
)
|
328
|
+
external
|
329
|
+
// restricted() // TODO re-activate
|
330
|
+
onlyService()
|
331
|
+
{
|
332
|
+
_pullToken(from, amount);
|
333
|
+
}
|
334
|
+
|
335
|
+
|
336
|
+
/// @dev Collect tokens from outside of GIF and transfer them to the wallet.
|
337
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
338
|
+
function pushToken(
|
339
|
+
address from,
|
340
|
+
Amount amount
|
341
|
+
)
|
342
|
+
external
|
343
|
+
// restricted() // TODO re-activate
|
344
|
+
onlyService()
|
345
|
+
{
|
346
|
+
_pushToken(from, amount);
|
347
|
+
}
|
348
|
+
|
349
|
+
|
350
|
+
/// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
|
351
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
352
|
+
function collectTokensToThreeRecipients(
|
353
|
+
address from,
|
354
|
+
address to,
|
355
|
+
Amount amount,
|
356
|
+
address to2,
|
357
|
+
Amount amount2,
|
358
|
+
address to3,
|
359
|
+
Amount amount3
|
360
|
+
)
|
361
|
+
external
|
362
|
+
restricted()
|
363
|
+
onlyService()
|
364
|
+
{
|
365
|
+
if (to == to2 || to == to3 || to2 == to3) {
|
366
|
+
revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
|
367
|
+
}
|
368
|
+
|
369
|
+
_checkPreconditions(from, amount + amount2 + amount3);
|
370
|
+
|
371
|
+
if (amount.gtz()) {
|
372
|
+
_transfer(from, to, amount, false);
|
373
|
+
}
|
374
|
+
if (amount2.gtz()) {
|
375
|
+
_transfer(from, to2, amount2, false);
|
376
|
+
}
|
377
|
+
if (amount3.gtz()) {
|
378
|
+
_transfer(from, to3, amount3, false);
|
137
379
|
}
|
138
380
|
}
|
381
|
+
|
382
|
+
|
383
|
+
/// @dev distribute tokens from a wallet within the scope of gif to an external address.
|
384
|
+
/// This method also checks balance and allowance and makes sure the amount is greater than zero.
|
385
|
+
function distributeTokens(
|
386
|
+
address from,
|
387
|
+
address to,
|
388
|
+
Amount amount
|
389
|
+
)
|
390
|
+
external
|
391
|
+
restricted()
|
392
|
+
onlyService()
|
393
|
+
{
|
394
|
+
// _transfer(from, to, amount, true);
|
395
|
+
_pushToken(to, amount);
|
396
|
+
}
|
139
397
|
}
|
@@ -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
|
|
@@ -7,9 +7,7 @@ import {Amount} from "../type/Amount.sol";
|
|
7
7
|
import {IService} from "../shared/IService.sol";
|
8
8
|
import {IStaking} from "./IStaking.sol";
|
9
9
|
import {NftId} from "../type/NftId.sol";
|
10
|
-
import {ObjectType} from "../type/ObjectType.sol";
|
11
10
|
import {Seconds} from "../type/Seconds.sol";
|
12
|
-
import {Timestamp} from "../type/Timestamp.sol";
|
13
11
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
14
12
|
import {UFixed} from "../type/UFixed.sol";
|
15
13
|
|
@@ -33,7 +31,6 @@ interface IStakingService is IService
|
|
33
31
|
event LogStakingServiceRewardsClaimed(NftId stakeNftId, address stakeOwner, Amount rewardsClaimedAmount);
|
34
32
|
|
35
33
|
// modifiers
|
36
|
-
error ErrorStakingServiceNotNftOwner(NftId nftId, address expectedOwner, address owner);
|
37
34
|
error ErrorStakingServiceNotStaking(address stakingAddress);
|
38
35
|
error ErrorStakingServiceNotSupportingIStaking(address stakingAddress);
|
39
36
|
|
@@ -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";
|
@@ -30,7 +33,6 @@ contract Staking is
|
|
30
33
|
IStaking
|
31
34
|
{
|
32
35
|
string public constant CONTRACT_NAME = "Staking";
|
33
|
-
uint8 private constant GIF_MAJOR_VERSION = 3;
|
34
36
|
|
35
37
|
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Staking.sol")) - 1)) & ~bytes32(uint256(0xff));
|
36
38
|
bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
|
@@ -60,6 +62,21 @@ contract Staking is
|
|
60
62
|
_;
|
61
63
|
}
|
62
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
|
+
|
63
80
|
// set/update staking reader
|
64
81
|
function setStakingReader(StakingReader stakingReader)
|
65
82
|
external
|
@@ -372,25 +389,6 @@ contract Staking is
|
|
372
389
|
}
|
373
390
|
|
374
391
|
|
375
|
-
|
376
|
-
//--- other functions ---------------------------------------------------//
|
377
|
-
|
378
|
-
function collectDipAmount(address from, Amount dipAmount)
|
379
|
-
external
|
380
|
-
restricted() // only staking service
|
381
|
-
{
|
382
|
-
getTokenHandler().collectTokens(from, getWallet(), dipAmount);
|
383
|
-
}
|
384
|
-
|
385
|
-
|
386
|
-
function transferDipAmount(address to, Amount dipAmount)
|
387
|
-
external
|
388
|
-
restricted() // only staking service
|
389
|
-
{
|
390
|
-
getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
|
391
|
-
}
|
392
|
-
|
393
|
-
|
394
392
|
//--- view functions ----------------------------------------------------//
|
395
393
|
|
396
394
|
function getStakingReader() public view returns (StakingReader reader) {
|
@@ -416,7 +414,7 @@ contract Staking is
|
|
416
414
|
virtual override (IVersionable, Versionable)
|
417
415
|
returns(Version)
|
418
416
|
{
|
419
|
-
return VersionLib.toVersion(
|
417
|
+
return VersionLib.toVersion(GIF_RELEASE,0,0);
|
420
418
|
}
|
421
419
|
|
422
420
|
//--- internal functions ------------------------------------------------//
|
@@ -445,13 +443,23 @@ contract Staking is
|
|
445
443
|
}
|
446
444
|
|
447
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
|
+
|
448
456
|
function _initialize(
|
449
457
|
address owner,
|
450
458
|
bytes memory data
|
451
459
|
)
|
452
460
|
internal
|
453
461
|
virtual override
|
454
|
-
initializer
|
462
|
+
initializer()
|
455
463
|
{
|
456
464
|
(
|
457
465
|
address registryAddress,
|
@@ -466,10 +474,10 @@ contract Staking is
|
|
466
474
|
TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
467
475
|
address dipTokenAddress = tokenRegistry.getDipTokenAddress();
|
468
476
|
|
469
|
-
|
477
|
+
_initializeComponent(
|
470
478
|
authority,
|
471
479
|
registryAddress,
|
472
|
-
registry.getNftId(),
|
480
|
+
registry.getNftId(), // parent nft id
|
473
481
|
CONTRACT_NAME,
|
474
482
|
dipTokenAddress,
|
475
483
|
STAKING(),
|
@@ -484,9 +492,8 @@ contract Staking is
|
|
484
492
|
$._store = StakingStore(stakingStoreAddress);
|
485
493
|
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
486
494
|
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
487
|
-
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
|
488
495
|
|
489
|
-
|
496
|
+
_registerInterface(type(IStaking).interfaceId);
|
490
497
|
}
|
491
498
|
|
492
499
|
|
@@ -18,9 +18,9 @@ contract StakingManager is
|
|
18
18
|
address registry,
|
19
19
|
address tokenRegistry,
|
20
20
|
address stakingStore,
|
21
|
-
address initialOwner
|
21
|
+
address initialOwner,
|
22
|
+
bytes32 salt
|
22
23
|
)
|
23
|
-
ProxyManager(registry)
|
24
24
|
{
|
25
25
|
Staking stakingImplementation = new Staking();
|
26
26
|
|
@@ -30,10 +30,12 @@ contract StakingManager is
|
|
30
30
|
tokenRegistry,
|
31
31
|
stakingStore,
|
32
32
|
initialOwner);
|
33
|
-
|
34
|
-
IVersionable versionable =
|
35
|
-
|
36
|
-
|
33
|
+
|
34
|
+
IVersionable versionable = initialize(
|
35
|
+
registry,
|
36
|
+
_initialImplementation,
|
37
|
+
_initializationData,
|
38
|
+
salt);
|
37
39
|
|
38
40
|
_staking = Staking(address(versionable));
|
39
41
|
}
|