Skip to content

Commit

Permalink
chore: move data service framework, rework file structure
Browse files Browse the repository at this point in the history
Signed-off-by: Tomás Migone <tomas@edgeandnode.com>
  • Loading branch information
tmigone committed May 20, 2024
1 parent 06d8308 commit 7aa3798
Show file tree
Hide file tree
Showing 54 changed files with 127 additions and 189 deletions.
10 changes: 0 additions & 10 deletions packages/horizon/contracts/SimpleTest.sol

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IDataService } from "./IDataService.sol";
import { IDataService } from "../interfaces/IDataService.sol";

import { GraphDirectory } from "./GraphDirectory.sol";
import { DataServiceV1Storage } from "./DataServiceStorage.sol";
import { GraphDirectory } from "./GraphDirectory.sol";
import { ProvisionManager } from "./utilities/ProvisionManager.sol";

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
pragma solidity 0.8.24;

import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol";
import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol";
import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol";
import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol";
// import { IGraphTokenGateway } from "@graphprotocol/contracts/contracts/gateway/IGraphTokenGateway.sol";
import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ pragma solidity ^0.8.24;
import { IDataServiceFees } from "./IDataServiceFees.sol";
import { IGraphPayments } from "../../interfaces/IGraphPayments.sol";

import { ProvisionTracker } from "../libraries/ProvisionTracker.sol";

import { DataService } from "../DataService.sol";
import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol";

import { ProvisionTracker } from "../libraries/ProvisionTracker.sol";

abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees {
using ProvisionTracker for mapping(address => uint256);

Expand Down Expand Up @@ -66,7 +66,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat
uint256 _tokens,
uint256 _unlockTimestamp
) internal {
feesProvisionTracker[_feeType].lock(GRAPH_STAKING, _serviceProvider, _tokens);
feesProvisionTracker[_feeType].lock(GRAPH_STAKING, _serviceProvider, _tokens, delegationRatio);

StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider];
bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ abstract contract DataServiceFeesV1Storage {
mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => IDataServiceFees.StakeClaimsList list))
public claimsLists;

uint32 public delegationRatio;

/// @dev Gap to allow adding variables in future upgrades
uint256[50] private __gap;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { IDataServiceRescuable } from "./IDataServiceRescuable.sol";

import { DataService } from "../DataService.sol";

import { Denominations } from "../libraries/Denominations.sol";
import { Denominations } from "../../libraries/Denominations.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IDataService } from "../IDataService.sol";
import { IDataService } from "../../interfaces/IDataService.sol";
import { IGraphPayments } from "../../interfaces/IGraphPayments.sol";

interface IDataServiceFees is IDataService {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IDataService } from "../IDataService.sol";
import { IDataService } from "../../interfaces/IDataService.sol";

interface IDataServicePausable is IDataService {
function pause() external;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IDataService } from "../IDataService.sol";
import { IDataService } from "../../interfaces/IDataService.sol";

interface IDataServiceRescuable is IDataService {
function rescueGRT(address to, uint256 amount) external;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol";
import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol";

library ProvisionGetter {
using ProvisionGetter for IHorizonStaking.Provision;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol";
import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol";

library ProvisionTracker {
error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired);
Expand All @@ -10,12 +10,13 @@ library ProvisionTracker {
mapping(address => uint256) storage self,
IHorizonStaking graphStaking,
address serviceProvider,
uint256 tokens
uint256 tokens,
uint32 delegationRatio
) internal {
if (tokens == 0) return;

uint256 tokensRequired = self[serviceProvider] + tokens;
uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this));
uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio);
if (tokensRequired > tokensAvailable) {
revert ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired);
}
Expand All @@ -34,9 +35,10 @@ library ProvisionTracker {
function getTokensFree(
mapping(address => uint256) storage self,
IHorizonStaking graphStaking,
address serviceProvider
address serviceProvider,
uint32 delegationRatio
) internal view returns (uint256) {
uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this));
uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio);
if (tokensAvailable >= self[serviceProvider]) return tokensAvailable - self[serviceProvider];
else return 0;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol";
import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol";

import { ProvisionGetter } from "../libraries/ProvisionGetter.sol";
import { UintRange } from "../../libraries/UintRange.sol";

import { GraphDirectory } from "../GraphDirectory.sol";
import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol";

import { ProvisionGetter } from "../libraries/ProvisionGetter.sol";
import { UintRange } from "../libraries/UintRange.sol";

abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage {
using ProvisionGetter for IHorizonStaking;
using UintRange for uint256;
Expand Down Expand Up @@ -50,7 +50,7 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage

function _checkAndAcceptProvision(address _serviceProvider) internal virtual {
_checkProvisionParameters(_serviceProvider);
GRAPH_STAKING.acceptProvision(_serviceProvider);
GRAPH_STAKING.acceptProvisionParameters(_serviceProvider);
}

// -- Provision Parameters: setters --
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { IGraphPayments } from "../interfaces/IGraphPayments.sol";
import { IGraphPayments } from "./IGraphPayments.sol";

/**
* @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.24;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IGraphToken is IERC20 {
// -- Mint and Burn --
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.24;

import { IGraphToken } from "../IGraphToken.sol";
import { IGraphToken } from "../interfaces/IGraphToken.sol";

/**
* @title TokenUtils library
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.24;

import { ITAPVerifier } from "./interfaces/ITAPVerifier.sol";
import { ITAPVerifier } from "../../interfaces/ITAPVerifier.sol";

import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
pragma solidity 0.8.24;

import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol";
import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol";
import { IGraphToken } from "../interfaces/IGraphToken.sol";

import { IHorizonStakingBase } from "./IHorizonStakingBase.sol";
import { TokenUtils } from "./utils/TokenUtils.sol";
import { MathUtils } from "./utils/MathUtils.sol";
import { Managed } from "./Managed.sol";
import { IGraphToken } from "./IGraphToken.sol";
import { TokenUtils } from "../libraries/TokenUtils.sol";
import { MathUtils } from "../libraries/MathUtils.sol";

import { Managed } from "./utilities/Managed.sol";
import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol";

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

pragma solidity 0.8.24;

import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.sol";
import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol";
import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol";
import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol";
import { MathUtils } from "./utils/MathUtils.sol";
import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol";

import { MathUtils } from "../libraries/MathUtils.sol";

import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.sol";

/**
* @title L2Staking contract
Expand All @@ -28,9 +30,8 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki

constructor(
address _controller,
address _subgraphDataServiceAddress,
address _exponentialRebates
) StakingBackwardsCompatibility(_controller, _subgraphDataServiceAddress, _exponentialRebates) {}
address _subgraphDataServiceAddress
) StakingBackwardsCompatibility(_controller, _subgraphDataServiceAddress) {}

/**
* @notice Receive ETH into the Staking contract: this will always revert
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

pragma solidity 0.8.24;

import { Managed } from "./Managed.sol";
import { IStakingBackwardsCompatibility } from "./IStakingBackwardsCompatibility.sol";
import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol";
import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol";
import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol";

import { Managed } from "./utilities/Managed.sol";

/**
* @title HorizonStakingV1Storage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@

pragma solidity 0.8.24;

import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol";
import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol";
import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol";
import { IGraphToken } from "../interfaces/IGraphToken.sol";
import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol";

import { TokenUtils } from "../libraries/TokenUtils.sol";
import { MathUtils } from "../libraries/MathUtils.sol";
import { ExponentialRebates } from "./libraries/ExponentialRebates.sol";

import { Multicall } from "@graphprotocol/contracts/contracts/base/Multicall.sol";
import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol";
import { TokenUtils } from "./utils/TokenUtils.sol";
import { IGraphToken } from "./IGraphToken.sol";
import { Managed } from "./utilities/Managed.sol";
import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol";
import { MathUtils } from "./utils/MathUtils.sol";
import { Managed } from "./Managed.sol";
import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol";
import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol";
import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol";
import { ExponentialRebates } from "./utils/ExponentialRebates.sol";
import { IStakingBackwardsCompatibility } from "./IStakingBackwardsCompatibility.sol";

/**
* @title Base Staking contract
Expand All @@ -38,15 +38,8 @@ abstract contract StakingBackwardsCompatibility is

address public immutable SUBGRAPH_DATA_SERVICE_ADDRESS;

address public immutable EXPONENTIAL_REBATES_ADDRESS;

constructor(
address _controller,
address _subgraphDataServiceAddress,
address _exponentialRebatesAddress
) Managed(_controller) {
constructor(address _controller, address _subgraphDataServiceAddress) Managed(_controller) {
SUBGRAPH_DATA_SERVICE_ADDRESS = _subgraphDataServiceAddress;
EXPONENTIAL_REBATES_ADDRESS = _exponentialRebatesAddress;
}

/**
Expand Down Expand Up @@ -128,7 +121,7 @@ abstract contract StakingBackwardsCompatibility is
// No rebates if indexer has no stake or if lambda is zero
uint256 newRebates = (alloc.tokens == 0 || __DEPRECATED_lambdaNumerator == 0)
? 0
: ExponentialRebates(EXPONENTIAL_REBATES_ADDRESS).exponentialRebates(
: ExponentialRebates.exponentialRebates(
alloc.collectedFees,
alloc.tokens,
__DEPRECATED_alphaNumerator,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

pragma solidity 0.8.24;

import { LibFixedMath } from "./LibFixedMath.sol";
import { LibFixedMath } from "../../libraries/LibFixedMath.sol";

/**
* @title ExponentialRebates contract
* @notice A library to compute query fee rebates using an exponential formula
* @dev This is only used for backwards compatibility in HorizonStaking, and should
* be removed after the transition period.
*/
contract ExponentialRebates {
library ExponentialRebates {
/// @dev Maximum value of the exponent for which to compute the exponential before clamping to zero.
uint32 private constant MAX_EXPONENT = 15;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
pragma solidity 0.8.24;

import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol";
import { IManaged } from "./IManaged.sol";
import { GraphDirectory } from "./GraphDirectory.sol";
import { IManaged } from "../../interfaces/IManaged.sol";

import { GraphDirectory } from "../../GraphDirectory.sol";

/**
* @title Graph Managed contract
Expand Down
28 changes: 0 additions & 28 deletions packages/horizon/scripts/deploy.ts

This file was deleted.

Loading

0 comments on commit 7aa3798

Please sign in to comment.