Skip to content

Commit

Permalink
Merge pull request #436 from Uniswap/dev
Browse files Browse the repository at this point in the history
Merge dev into main
  • Loading branch information
hensha256 authored Jan 14, 2025
2 parents ae89418 + 395165e commit 1aba8b9
Show file tree
Hide file tree
Showing 166 changed files with 6,526 additions and 14,433 deletions.
13 changes: 11 additions & 2 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,20 @@ jobs:
with:
cache: yarn
node-version: 18
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies and compile contracts
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: stable

- name: Install dependencies
run: |
yarn install --immutable --immutable-cache
yarn compile
git submodule update --init --recursive
- name: Compile
run: yarn compile

- name: Release
env:
Expand Down
9 changes: 6 additions & 3 deletions .github/workflows/forge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@ jobs:
# Must Insall node modules for forge to reference in remappings
- uses: actions/setup-node@v1
with:
node-version: 16.x
node-version: 18.x
registry-url: https://registry.npmjs.org

- name: Install Yarn
run: npm install -g yarn

- id: yarn-cache
run: echo "::set-output name=dir::$(yarn cache dir)"

Expand All @@ -43,7 +46,7 @@ jobs:
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
version: stable

- name: Run Forge build
run: |
Expand All @@ -53,7 +56,7 @@ jobs:

- name: Run Forge tests
run: |
forge test -vvv
forge test --isolate -vvv
id: test
env:
FORK_URL: https://mainnet.infura.io/v3/${{ secrets.INFURA_API_KEY }}
9 changes: 6 additions & 3 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,19 @@ jobs:
- name: Set up node
uses: actions/setup-node@v1
with:
node-version: 16.x
node-version: 18.x
registry-url: https://registry.npmjs.org

- name: Install Yarn
run: npm install -g yarn

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
version: stable

- name: Run Forge build
run: |
Expand All @@ -37,4 +40,4 @@ jobs:
id: build

- name: Run linter
run: yarn run prettier
run: yarn run lint:check
12 changes: 10 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@ jobs:

- uses: actions/setup-node@v1
with:
node-version: 16.x
node-version: 18.x
registry-url: https://registry.npmjs.org

- name: Install Yarn
run: npm install -g yarn

- id: yarn-cache
run: echo "::set-output name=dir::$(yarn cache dir)"

Expand All @@ -34,11 +37,16 @@ jobs:
- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: stable

# This is required separately from yarn test because it generates the typechain definitions
- name: Compile
run: yarn compile

- name: Run Integration tests
run: yarn test
run: yarn test:hardhat
env:
INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Compiler files
cache/
cache_hardhat/
out/

# Ignores development broadcast logs
Expand Down
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@
[submodule "lib/permit2"]
path = lib/permit2
url = https://github.com/Uniswap/permit2
[submodule "lib/v3-periphery"]
path = lib/v3-periphery
url = https://github.com/uniswap/v3-periphery
[submodule "lib/v4-periphery"]
path = lib/v4-periphery
url = https://github.com/Uniswap/v4-periphery
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ out
openzeppelin-contracts
permit2
solmate
cache_hardhat
44 changes: 3 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,49 +84,12 @@ Each command is a `bytes1` containing the following 8 bits:
├──────┼───────────────────────────────┤
│ 0x0d │ PERMIT2_TRANSFER_FROM_BATCH │
├──────┼───────────────────────────────┤
│ 0x0e │ ------- │
├──────┼───────────────────────────────┤
│ 0x0f │ ------- │
├──────┼───────────────────────────────┤
│ 0x10 │ SEAPORT_V1_5 │
├──────┼───────────────────────────────┤
│ 0x11 │ LOOKS_RARE_721 │
├──────┼───────────────────────────────┤
│ 0x12 │ NFTX │
├──────┼───────────────────────────────┤
│ 0x13 │ CRYPTOPUNKS │
├──────┼───────────────────────────────┤
│ 0x14 │ LOOKS_RARE_1155 │
├──────┼───────────────────────────────┤
│ 0x15 │ OWNER_CHECK_721 │
├──────┼───────────────────────────────┤
│ 0x16 │ OWNER_CHECK_1155 │
├──────┼───────────────────────────────┤
│ 0x17 │ SWEEP_ERC721 │
├──────┼───────────────────────────────┤
│ 0x18 │ X2Y2_721 │
├──────┼───────────────────────────────┤
│ 0x19 │ SUDOSWAP │
├──────┼───────────────────────────────┤
│ 0x1a │ NFT20 │
├──────┼───────────────────────────────┤
│ 0x1b │ X2Y2_1155 │
├──────┼───────────────────────────────┤
│ 0x1c │ FOUNDATION │
├──────┼───────────────────────────────┤
│ 0x1d │ SWEEP_ERC1155 │
├──────┼───────────────────────────────┤
│ 0x1e │ ELEMENT_MARKET │
├──────┼───────────────────────────────┤
│ 0x1f │ ------- │
├──────┼───────────────────────────────┤
│ 0x20 │ SEAPORT_V1_4 │
│ 0x0e-│ ------- │
│ 0x20 │ │
├──────┼───────────────────────────────┤
│ 0x21 │ EXECUTE_SUB_PLAN │
├──────┼───────────────────────────────┤
│ 0x22 │ APPROVE_ERC20 │
├──────┼───────────────────────────────┤
│ 0x23-│ ------- │
│ 0x22-│ ------- │
│ 0x3f │ │
└──────┴───────────────────────────────┘
```
Expand Down Expand Up @@ -180,7 +143,6 @@ INFURA_API_KEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

```console
yarn install
yarn symlink
yarn compile
yarn test
```
Expand Down
Binary file not shown.
Binary file added audit/DRAFT_Spearbit_audit_UR.pdf
Binary file not shown.
Binary file not shown.
55 changes: 19 additions & 36 deletions contracts/UniversalRouter.sol
Original file line number Diff line number Diff line change
@@ -1,46 +1,36 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.17;
pragma solidity ^0.8.24;

// Command implementations
import {Dispatcher} from './base/Dispatcher.sol';
import {RewardsCollector} from './base/RewardsCollector.sol';
import {RouterParameters} from './base/RouterImmutables.sol';
import {RouterParameters} from './types/RouterParameters.sol';
import {PaymentsImmutables, PaymentsParameters} from './modules/PaymentsImmutables.sol';
import {NFTImmutables, NFTParameters} from './modules/NFTImmutables.sol';
import {UniswapImmutables, UniswapParameters} from './modules/uniswap/UniswapImmutables.sol';
import {V4SwapRouter} from './modules/uniswap/v4/V4SwapRouter.sol';
import {Commands} from './libraries/Commands.sol';
import {IUniversalRouter} from './interfaces/IUniversalRouter.sol';
import {MigratorImmutables, MigratorParameters} from './modules/MigratorImmutables.sol';

contract UniversalRouter is IUniversalRouter, Dispatcher, RewardsCollector {
modifier checkDeadline(uint256 deadline) {
if (block.timestamp > deadline) revert TransactionDeadlinePassed();
_;
}

contract UniversalRouter is IUniversalRouter, Dispatcher {
constructor(RouterParameters memory params)
UniswapImmutables(
UniswapParameters(params.v2Factory, params.v3Factory, params.pairInitCodeHash, params.poolInitCodeHash)
)
PaymentsImmutables(PaymentsParameters(params.permit2, params.weth9, params.openseaConduit, params.sudoswap))
NFTImmutables(
NFTParameters(
params.seaportV1_5,
params.seaportV1_4,
params.nftxZap,
params.x2y2,
params.foundation,
params.sudoswap,
params.elementMarket,
params.nft20Zap,
params.cryptopunks,
params.looksRareV2,
params.routerRewardsDistributor,
params.looksRareRewardsDistributor,
params.looksRareToken
)
)
V4SwapRouter(params.v4PoolManager)
PaymentsImmutables(PaymentsParameters(params.permit2, params.weth9))
MigratorImmutables(MigratorParameters(params.v3NFTPositionManager, params.v4PositionManager))
{}

modifier checkDeadline(uint256 deadline) {
if (block.timestamp > deadline) revert TransactionDeadlinePassed();
_;
}

/// @notice To receive ETH from WETH
receive() external payable {
if (msg.sender != address(WETH9) && msg.sender != address(poolManager)) revert InvalidEthSender();
}

/// @inheritdoc IUniversalRouter
function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline)
external
Expand All @@ -58,7 +48,7 @@ contract UniversalRouter is IUniversalRouter, Dispatcher, RewardsCollector {
if (inputs.length != numCommands) revert LengthMismatch();

// loop through all given commands, execute them and pass along outputs as defined
for (uint256 commandIndex = 0; commandIndex < numCommands;) {
for (uint256 commandIndex = 0; commandIndex < numCommands; commandIndex++) {
bytes1 command = commands[commandIndex];

bytes calldata input = inputs[commandIndex];
Expand All @@ -68,17 +58,10 @@ contract UniversalRouter is IUniversalRouter, Dispatcher, RewardsCollector {
if (!success && successRequired(command)) {
revert ExecutionFailed({commandIndex: commandIndex, message: output});
}

unchecked {
commandIndex++;
}
}
}

function successRequired(bytes1 command) internal pure returns (bool) {
return command & Commands.FLAG_ALLOW_REVERT == 0;
}

/// @notice To receive ETH from WETH and NFT protocols
receive() external payable {}
}
32 changes: 0 additions & 32 deletions contracts/base/Callbacks.sol

This file was deleted.

Loading

0 comments on commit 1aba8b9

Please sign in to comment.