Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uniswap v4 Integration #139

Open
wants to merge 22 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
dd89cb7
forge install: v4-periphery
amarinkovic Jul 15, 2024
e761db6
forge install: v4-core
amarinkovic Jul 15, 2024
2fc33bf
feat: add uniswap v4 integration
amarinkovic Jul 15, 2024
8039f2b
chore: bump to cancun and 0.8.24
amarinkovic Jul 18, 2024
7582ba0
test: uniswap test setup [WiP]
amarinkovic Jul 18, 2024
b077c95
fix: uniswap v4 project import
amarinkovic Jul 25, 2024
27c2dd0
test: setup uniswap v4 test [wip]
kevin-fruitful Aug 13, 2024
6810646
test: add currency0 as supported external token
kevin-fruitful Aug 13, 2024
dea8946
feat: Swap Facet [wip]
kevin-fruitful Aug 21, 2024
f2e63b4
chore: update gemforge config
kevin-fruitful Aug 28, 2024
77f9c4b
fix: lib import issues in Swap Facet
kevin-fruitful Aug 28, 2024
ea27ba6
feat: update app storage for swaps [wip]
kevin-fruitful Aug 29, 2024
818ef7c
Merge branch 'dev' into uniswap-v4
amarinkovic Aug 29, 2024
9c45343
chore: bump solc to v0.8.24
amarinkovic Aug 29, 2024
37d2cf7
test: test swap [wip]
kevin-fruitful Aug 30, 2024
cd86b49
ci: simplify env vars setup
amarinkovic Aug 30, 2024
9998490
fix: unlockCallback
kevin-fruitful Sep 9, 2024
0f94156
test: swap [wip]
kevin-fruitful Sep 9, 2024
6ab6f47
test: use precalculated constant for swap sqrtPriceLimitX96
kevin-fruitful Sep 9, 2024
02f4aba
fix: when swapping, burn internal tokens
kevin-fruitful Sep 11, 2024
edf8b53
feat: allow swap function to specify internal token destination
kevin-fruitful Sep 17, 2024
0145d37
Merge branch 'dev' into uniswap-v4
amarinkovic Sep 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
contents: read
security-events: write
env:
SOLC_VERSION: 0.8.20
SOLC_VERSION: 0.8.24
ETH_MAINNET_RPC_URL: ${{ secrets.ETH_MAINNET_RPC_URL }}
ETH_SEPOLIA_RPC_URL: ${{ secrets.ETH_SEPOLIA_RPC_URL }}
BASE_MAINNET_RPC_URL: ${{ secrets.BASE_MAINNET_RPC_URL }}
Expand Down
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
[submodule "lib/solady"]
path = lib/solady
url = https://github.com/Vectorized/solady
[submodule "lib/v4-periphery"]
path = lib/v4-periphery
url = https://github.com/Uniswap/v4-periphery
[submodule "lib/v4-core"]
path = lib/v4-core
url = https://github.com/Uniswap/v4-core
[submodule "lib/diamond-2-hardhat"]
path = lib/diamond-2-hardhat
url = https://github.com/nayms/diamond-2-hardhat
2 changes: 1 addition & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ remappings = ["forge-std/=lib/forge-std/src/"]
libraries = []
cache = true
force = false
evm_version = 'paris'
evm_version = 'cancun'
auto_detect_solc = true
offline = true
optimizer = true
Expand Down
4 changes: 2 additions & 2 deletions gemforge.config.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ module.exports = {
// SPDX License - to be inserted in all generated .sol files
license: "MIT",
// Solidity compiler version - to be inserted in all generated .sol files
version: "0.8.20",
version: "0.8.24",
},
// commands to execute
commands: {
Expand Down Expand Up @@ -58,7 +58,7 @@ module.exports = {
// proxy interface options
proxyInterface: {
// imports to include in the generated IDiamondProxy interface
imports: ["src/shared/FreeStructs.sol"],
imports: ["src/shared/FreeStructs.sol", "lib/v4-core/src/types/BalanceDelta.sol"],
},
},
// diamond configuration
Expand Down
1 change: 1 addition & 0 deletions lib/v4-core
Submodule v4-core added at 87292d
1 change: 1 addition & 0 deletions lib/v4-periphery
Submodule v4-periphery added at 861171
2 changes: 2 additions & 0 deletions remappings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ solady/=lib/solady/src/
solidity-lib/=lib/solidity-lib/contracts/
solidity-stringutils/=lib/solidity-stringutils/
solmate/=lib/solmate/src/
@v4-core/=lib/v4-core
@v4-periphery/=lib/v4-periphery
2 changes: 1 addition & 1 deletion script/AddSupportedExternalToken.s.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import "forge-std/Script.sol";
import { DiamondProxy } from "src/generated/DiamondProxy.sol";
Expand Down
2 changes: 1 addition & 1 deletion script/CreateEntity.s.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import "forge-std/Script.sol";

Expand Down
2 changes: 1 addition & 1 deletion script/deployment/DeployERC20.s.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

/// @notice Quickly deploy a mock ERC20 token, for testing only!

Expand Down
2 changes: 1 addition & 1 deletion src/facets/ACLFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { LibAdmin } from "../libs/LibAdmin.sol";
import { LibACL, LibHelpers } from "../libs/LibACL.sol";
Expand All @@ -24,7 +24,7 @@
*/
function assignRole(bytes32 _objectId, bytes32 _contextId, string memory _role) external {
bytes32 assignerId = LibHelpers._getSenderId();
require(LibACL._canAssign(assignerId, _objectId, _contextId, LibHelpers._stringToBytes32(_role)), "not in assigners group");

Check warning on line 27 in src/facets/ACLFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements

/// @dev First, assigner attempts to unassign the role.
bytes32 roleId = LibACL._getRoleInContext(_objectId, _contextId);
Expand All @@ -45,7 +45,7 @@
function unassignRole(bytes32 _objectId, bytes32 _contextId) external {
bytes32 roleId = LibACL._getRoleInContext(_objectId, _contextId);
bytes32 assignerId = LibHelpers._getSenderId();
require(LibACL._canAssign(assignerId, _objectId, _contextId, roleId), "not in assigners group");

Check warning on line 48 in src/facets/ACLFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements
LibACL._unassignRole(_objectId, _contextId);
}

Expand Down Expand Up @@ -146,7 +146,7 @@
* @param _roleInGroup is member of
*/
function updateRoleGroup(string memory _role, string memory _group, bool _roleInGroup) external assertPrivilege(LibAdmin._getSystemId(), LC.GROUP_SYSTEM_ADMINS) {
require(_group._stringToBytes32() != LC.GROUP_SYSTEM_ADMINS._stringToBytes32(), "system admins group is not modifiable");

Check warning on line 149 in src/facets/ACLFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements
LibACL._updateRoleGroup(_role, _group, _roleInGroup);
}
}
2 changes: 1 addition & 1 deletion src/facets/AdminFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { AppStorage, LibAppStorage } from "../shared/AppStorage.sol";
import { Modifiers } from "../shared/Modifiers.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/EntityFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { Entity, FeeSchedule } from "../shared/AppStorage.sol";
import { Modifiers } from "../shared/Modifiers.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/GovernanceFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { IDiamondCut } from "lib/diamond-2-hardhat/contracts/interfaces/IDiamondCut.sol";
import { Modifiers } from "../shared/Modifiers.sol";
Expand Down Expand Up @@ -43,7 +43,7 @@
AppStorage storage s = LibAppStorage.diamondStorage();

if (s.upgradeScheduled[id] > block.timestamp) {
revert("Upgrade has already been scheduled");

Check warning on line 46 in src/facets/GovernanceFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of revert statements
}
// 0 == upgrade is not scheduled / has been cancelled
// block.timestamp + upgradeExpiration == upgrade is scheduled and expires at this time
Expand All @@ -61,7 +61,7 @@
function updateUpgradeExpiration(uint256 duration) external assertPrivilege(LibAdmin._getSystemId(), LC.GROUP_SYSTEM_ADMINS) {
AppStorage storage s = LibAppStorage.diamondStorage();

require(1 minutes < duration && duration < 1 weeks, "invalid upgrade expiration period");

Check warning on line 64 in src/facets/GovernanceFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements

s.upgradeExpiration = duration;
emit UpdateUpgradeExpiration(duration);
Expand All @@ -75,7 +75,7 @@
function cancelUpgrade(bytes32 id) external assertPrivilege(LibAdmin._getSystemId(), LC.GROUP_SYSTEM_ADMINS) {
AppStorage storage s = LibAppStorage.diamondStorage();

require(s.upgradeScheduled[id] > 0, "invalid upgrade ID");

Check warning on line 78 in src/facets/GovernanceFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements

s.upgradeScheduled[id] = 0;

Expand Down
2 changes: 1 addition & 1 deletion src/facets/MarketFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { Modifiers } from "../shared/Modifiers.sol";
import { MarketInfo } from "../shared/AppStorage.sol";
Expand Down Expand Up @@ -33,9 +33,9 @@
* @param _offerId offer ID
*/
function cancelOffer(uint256 _offerId) external notLocked nonReentrant assertPrivilege(LibObject._getParentFromAddress(msg.sender), LC.GROUP_CANCEL_OFFER) {
require(LibMarket._getOffer(_offerId).state == LC.OFFER_STATE_ACTIVE, "offer not active");

Check warning on line 36 in src/facets/MarketFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements
bytes32 creator = LibMarket._getOffer(_offerId).creator;
require(LibObject._getParent(LibHelpers._getSenderId()) == creator, "only member of entity can cancel");

Check warning on line 38 in src/facets/MarketFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements
LibMarket._cancelOffer(_offerId);
}

Expand Down
2 changes: 1 addition & 1 deletion src/facets/NaymsOwnershipFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { LibDiamond } from "lib/diamond-2-hardhat/contracts/libraries/LibDiamond.sol";
import { IERC173 } from "lib/diamond-2-hardhat/contracts/interfaces/IERC173.sol";
Expand All @@ -14,8 +14,8 @@
bytes32 systemID = LibHelpers._stringToBytes32(LC.SYSTEM_IDENTIFIER);
bytes32 newAcc1Id = LibHelpers._getIdForAddress(_newOwner);

require(!LibACL._isInGroup(newAcc1Id, systemID, LibHelpers._stringToBytes32(LC.GROUP_SYSTEM_ADMINS)), "NEW owner MUST NOT be sys admin");

Check warning on line 17 in src/facets/NaymsOwnershipFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements
require(!LibACL._isInGroup(newAcc1Id, systemID, LibHelpers._stringToBytes32(LC.GROUP_SYSTEM_MANAGERS)), "NEW owner MUST NOT be sys manager");

Check warning on line 18 in src/facets/NaymsOwnershipFacet.sol

View workflow job for this annotation

GitHub Actions / Lint contracts

Use Custom Errors instead of require statements

LibDiamond.setContractOwner(_newOwner);
}
Expand Down
2 changes: 1 addition & 1 deletion src/facets/PhasedDiamondCutFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { DiamondCutFacet } from "lib/diamond-2-hardhat/contracts/facets/DiamondCutFacet.sol";
import { LibDiamond } from "lib/diamond-2-hardhat/contracts/libraries/LibDiamond.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/SimplePolicyFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { Modifiers } from "../shared/Modifiers.sol";
import { SimplePolicyInfo, SimplePolicy, CalculatedFees, Stakeholders } from "../shared/AppStorage.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/StakingFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { LibTokenizedVaultStaking, StakingConfig } from "../libs/LibTokenizedVaultStaking.sol";
import { LibHelpers } from "../libs/LibHelpers.sol";
Expand Down
119 changes: 119 additions & 0 deletions src/facets/SwapFacet.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import { LibAdmin } from "src/libs/LibAdmin.sol";
import { LibObject } from "src/libs/LibObject.sol";
import { LibConstants as LC } from "src/libs/LibConstants.sol";
import { LibTokenizedVault } from "src/libs/LibTokenizedVault.sol";
import { Modifiers } from "src/shared/Modifiers.sol";
import { IPoolManager } from "v4-core/interfaces/IPoolManager.sol";
import { BalanceDelta } from "v4-core/types/BalanceDelta.sol";
import { Currency } from "v4-core/types/Currency.sol";
import { CurrencySettler } from "lib/v4-core/test/utils/CurrencySettler.sol";
import { SwapParams, CallbackData } from "../shared/FreeStructs.sol";
import { StateLibrary } from "v4-core/libraries/StateLibrary.sol";
import { TransientStateLibrary } from "v4-core/libraries/TransientStateLibrary.sol";

/**
* @title Swap
* @notice Facet for working with Swaps
* @dev Swap facet
*/
contract SwapFacet is Modifiers {
using LibObject for address;
using CurrencySettler for Currency;
using TransientStateLibrary for IPoolManager;

function swap(
IPoolManager _manager,
SwapParams memory swapParams,
bytes32 _fromTokenId,
bytes32 _toTokenId,
bytes32 _toEntityId
) external assertPrivilege(LibAdmin._getSystemId(), LC.GROUP_SYSTEM_ADMINS) returns (BalanceDelta delta) {
LibTokenizedVault._internalBurn(msg.sender._getParentFromAddress(), _fromTokenId, uint256(swapParams.params.amountSpecified));

// Swap tokens
delta = abi.decode(
_manager.unlock(abi.encode(CallbackData(msg.sender, swapParams.key, swapParams.params, swapParams.takeClaims, swapParams.settleUsingBurn, swapParams.hookData))),
(BalanceDelta)
);

LibTokenizedVault._internalMint(_toEntityId, _toTokenId, uint256(uint128(delta.amount0())));
}

function unlockCallback(bytes calldata rawData) external returns (bytes memory) {
IPoolManager _manager = IPoolManager(msg.sender);

// Decode the callback data
CallbackData memory data = abi.decode(rawData, (CallbackData));

// Initial balance checks (optional, but recommended for debugging and validation)
(, , int256 deltaBefore0) = _fetchBalances(_manager, data.key.currency0, data.sender, address(this));
(, , int256 deltaBefore1) = _fetchBalances(_manager, data.key.currency1, data.sender, address(this));

require(deltaBefore0 == 0, "deltaBefore0 is not equal to 0");
require(deltaBefore1 == 0, "deltaBefore1 is not equal to 0");

// Execute the swap on Uniswap V4 pool
BalanceDelta delta = _manager.swap(data.key, data.params, data.hookData);

// Post-swap balance checks
(, , int256 deltaAfter0) = _fetchBalances(_manager, data.key.currency0, data.sender, address(this));
(, , int256 deltaAfter1) = _fetchBalances(_manager, data.key.currency1, data.sender, address(this));

if (data.params.zeroForOne) {
if (data.params.amountSpecified < 0) {
// exact input, 0 for 1
require(deltaAfter0 >= data.params.amountSpecified, "deltaAfter0 is not greater than or equal to data.params.amountSpecified");
require(delta.amount0() == deltaAfter0, "delta.amount0() is not equal to deltaAfter0");
require(deltaAfter1 >= 0, "deltaAfter1 is not greater than or equal to 0");
} else {
// exact output, 0 for 1
require(deltaAfter0 <= 0, "deltaAfter0 is not less than or equal to zero");
require(delta.amount1() == deltaAfter1, "delta.amount1() is not equal to deltaAfter1");
require(deltaAfter1 <= data.params.amountSpecified, "deltaAfter1 is not less than or equal to data.params.amountSpecified");
}
} else {
if (data.params.amountSpecified < 0) {
// exact input, 1 for 0
require(deltaAfter1 >= data.params.amountSpecified, "deltaAfter1 is not greater than or equal to data.params.amountSpecified");
require(delta.amount1() == deltaAfter1, "delta.amount1() is not equal to deltaAfter1");
require(deltaAfter0 >= 0, "deltaAfter0 is not greater than or equal to 0");
} else {
// exact output, 1 for 0
require(deltaAfter1 <= 0, "deltaAfter1 is not less than or equal to 0");
require(delta.amount0() == deltaAfter0, "delta.amount0() is not equal to deltaAfter0");
require(deltaAfter0 <= data.params.amountSpecified, "deltaAfter0 is not less than or equal to data.params.amountSpecified");
}
}

// Post-swap balance handling
if (deltaAfter0 < 0) {
data.key.currency0.settle(_manager, data.sender, uint256(-deltaAfter0), data.settleUsingBurn);
}
if (deltaAfter1 < 0) {
data.key.currency1.settle(_manager, data.sender, uint256(-deltaAfter1), data.settleUsingBurn);
}
if (deltaAfter0 > 0) {
data.key.currency0.take(_manager, data.sender, uint256(deltaAfter0), data.takeClaims);
}
if (deltaAfter1 > 0) {
data.key.currency1.take(_manager, data.sender, uint256(deltaAfter1), data.takeClaims);
}

// Return the encoded delta
return abi.encode(delta);
}

function _fetchBalances(
IPoolManager _manager,
Currency currency,
address user,
address deltaHolder
) internal view returns (uint256 userBalance, uint256 poolBalance, int256 delta) {
userBalance = currency.balanceOf(user);
poolBalance = currency.balanceOf(address(_manager));
delta = _manager.currencyDelta(deltaHolder, currency);
}
}
2 changes: 1 addition & 1 deletion src/facets/SystemFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { LibConstants as LC } from "../libs/LibConstants.sol";
import { Modifiers } from "../shared/Modifiers.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/TokenizedVaultFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { Modifiers } from "../shared/Modifiers.sol";
import { LibConstants as LC } from "../libs/LibConstants.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/TokenizedVaultIOFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { Modifiers } from "../shared/Modifiers.sol";
import { LibTokenizedVaultIO } from "../libs/LibTokenizedVaultIO.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/facets/UserFacet.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { Modifiers } from "../shared/Modifiers.sol";
import { LibConstants as LC } from "../libs/LibConstants.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/init/InitDiamond.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { IDiamondCut } from "lib/diamond-2-hardhat/contracts/interfaces/IDiamondCut.sol";
import { IDiamondLoupe } from "lib/diamond-2-hardhat/contracts/interfaces/IDiamondLoupe.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/IERC1271.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)

pragma solidity ^0.8.20;
pragma solidity 0.8.24;

/**
* @dev Interface of the ERC1271 standard signature validation method for
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/IERC165.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

interface IERC165 {
/// @notice Query if a contract implements an interface
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/IERC173.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

/// @title ERC-173 Contract Ownership Standard
/// Note: the ERC-165 identifier for this interface is 0x7f5828d0 is ERC165
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/IERC20.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

/**
* See https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibACL.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { AppStorage, LibAppStorage } from "../shared/AppStorage.sol";
import { LibDiamond } from "lib/diamond-2-hardhat/contracts/libraries/LibDiamond.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibAdmin.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { AppStorage, FunctionLockedStorage, LibAppStorage } from "../shared/AppStorage.sol";
import { Entity, EntityApproval } from "../shared/FreeStructs.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibConstants.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

/**
* @dev Settings keys.
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibEIP712.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { AppStorage, LibAppStorage } from "../shared/AppStorage.sol";

Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibERC20.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

/******************************************************************************\
* Author: Nick Mudge
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibEntity.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { LibAppStorage, AppStorage } from "../shared/AppStorage.sol";
import { Entity } from "../shared/AppStorage.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibFeeRouter.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { AppStorage, LibAppStorage, CalculatedFees, FeeAllocation, FeeSchedule } from "../shared/AppStorage.sol";
import { LibObject } from "./LibObject.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibGovernance.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { IDiamondCut } from "lib/diamond-2-hardhat/contracts/interfaces/IDiamondCut.sol";

Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibHelpers.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { LibConstants as LC } from "./LibConstants.sol";

Expand Down
2 changes: 1 addition & 1 deletion src/libs/LibInitDiamond.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma solidity 0.8.24;

import { AppStorage, FunctionLockedStorage, LibAppStorage } from "../shared/AppStorage.sol";
import { LibConstants as LC } from "./LibConstants.sol";
Expand Down
Loading
Loading