Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,6 @@
[submodule "lib/openzeppelin-contracts"]
path = lib/openzeppelin-contracts
url = https://github.com/Openzeppelin/openzeppelin-contracts
[submodule "src/pkgs/ERC20-eth"]
path = src/pkgs/ERC20-eth
url = https://github.com/Uniswap/ERC20-eth
2 changes: 2 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ additional_compiler_profiles = [
{ name = "v3-periphery-default", optimizer_runs = 1000000, evm_version = "istanbul", via_ir = false },
{ name = "permit2", optimizer_runs = 1000000, via_ir = true },
{ name = "uniswapx", optimizer_runs = 1000000, via_ir = false },
{ name = "ERC20-eth", optimizer_runs = 200, via_ir = false, version = "^0.8.29" },
]

compilation_restrictions = [
Expand Down Expand Up @@ -72,6 +73,7 @@ compilation_restrictions = [
{ paths = "src/briefcase/protocols/v4-periphery/libraries/Locker.sol", evm_version = "cancun" },
{ paths = "src/briefcase/protocols/swap-router-contracts/libraries/**", version = "<0.8.0" },
{ paths = "src/briefcase/protocols/v3-periphery/libraries/**", version = "<0.8.0" },
{ paths = "src/pkgs/ERC20-eth/src/ERC20ETH.sol", version = "0.8.29", optimizer_runs = 200 },
]

[fmt]
Expand Down
6 changes: 5 additions & 1 deletion remappings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ permit2=src/pkgs/permit2
@uniswap/lib=lib/solidity-lib
@uniswap/v2-core=src/pkgs/v2-core
@uniswap/v3-core=src/pkgs/v3-core
@uniswap/v4-core=src/pkgs/v4-core
@uniswap/v4-core=src/pkgs/v4-core
ERC20-eth/=src/pkgs/ERC20-eth/
src/pkgs/ERC20-eth:solady=src/pkgs/ERC20-eth/lib/solady/src
src/pkgs/ERC20-eth:solmate=src/pkgs/ERC20-eth/lib/solmate/src
src/pkgs/ERC20-eth:forge-std=src/pkgs/ERC20-eth/lib/forge-std/src
12 changes: 12 additions & 0 deletions script/deploy/Deploy-all.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import {StateViewDeployer} from '../../src/briefcase/deployers/v4-periphery/Stat
import {V4QuoterDeployer} from '../../src/briefcase/deployers/v4-periphery/V4QuoterDeployer.sol';
import {WETHHookDeployer} from '../../src/briefcase/deployers/v4-periphery/WETHHookDeployer.sol';
import {WstETHHookDeployer} from '../../src/briefcase/deployers/v4-periphery/WstETHHookDeployer.sol';
import {ERC20ETHDeployer} from '../../src/briefcase/deployers/ERC20-eth/ERC20ETHDeployer.sol';

import {Script, console2 as console, stdJson} from 'forge-std/Script.sol';
import {VmSafe} from 'forge-std/Vm.sol';
Expand Down Expand Up @@ -80,6 +81,8 @@ contract Deploy is Script {

deployUtilsContracts();

deployERC20ETH();

vm.stopBroadcast();

if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast) && config.readBool('.rename')) {
Expand Down Expand Up @@ -390,6 +393,15 @@ contract Deploy is Script {
}
}

function deployERC20ETH() private {
if (!config.readBoolOr('.protocols.ERC20-eth.deploy', false)) return;
bool deployERC20ETH_ = config.readBoolOr('.protocols.ERC20-eth.contracts.ERC20ETH.deploy', false);
if (deployERC20ETH_) {
console.log('deploying ERC20ETH');
ERC20ETHDeployer.deploy();
}
}

function deployUniversalRouter() private {
if (!config.readBoolOr('.protocols.universal-router.deploy', false)) return;

Expand Down
10 changes: 10 additions & 0 deletions script/deploy/tasks/task_template.json
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,16 @@
}
}
}
},
"ERC20-eth": {
"name": "ERC20 ETH",
"deploy": true,
"contracts": {
"ERC20ETH": {
"deploy": true,
"address": null
}
}
}
},
"dependencies": {
Expand Down
31 changes: 31 additions & 0 deletions src/briefcase/deployers/ERC20-eth/ERC20ETHDeployer.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-License-Identifier: MIT
pragma solidity >= 0.8.0;

library ERC20ETHDeployer {
function deploy() internal returns (address erc20ETH) {
bytes memory args = abi.encode();
bytes memory initcode_ = abi.encodePacked(originalInitcode(), args);
bytes32 salt = 0x0000000000000000000000000000000000000000ab7ce6e7e994b50181ca4e2e;
assembly {
erc20ETH := create2(0, add(initcode_, 32), mload(initcode_), salt)
}
}

/// @dev this is the init code that we used to mine the vanity address
/// Unfortunately forge doesn't let you disable the optimizer for just this project
function originalInitcode() internal pure returns (bytes memory) {
return
hex'6080604052348015600e575f5ffd5b50610ee68061001c5f395ff3fe6080604052600436106100aa575f3560e01c806370a082311161006357806370a08231146101d55780637ecebe001461021157806395d89b411461024d578063a9059cbb14610277578063d505accf146102b3578063dd62ed3e146102db576100b1565b806306fdde03146100b5578063095ea7b3146100df57806318160ddd1461011b57806323b872dd14610145578063313ce567146101815780633644e515146101ab576100b1565b366100b157005b5f5ffd5b3480156100c0575f5ffd5b506100c9610317565b6040516100d69190610a7d565b60405180910390f35b3480156100ea575f5ffd5b5061010560048036038101906101009190610b2e565b610354565b6040516101129190610b86565b60405180910390f35b348015610126575f5ffd5b5061012f6103df565b60405161013c9190610bae565b60405180910390f35b348015610150575f5ffd5b5061016b60048036038101906101669190610bc7565b6103e6565b6040516101789190610b86565b60405180910390f35b34801561018c575f5ffd5b50610195610408565b6040516101a29190610c32565b60405180910390f35b3480156101b6575f5ffd5b506101bf610410565b6040516101cc9190610c63565b60405180910390f35b3480156101e0575f5ffd5b506101fb60048036038101906101f69190610c7c565b61048c565b6040516102089190610bae565b60405180910390f35b34801561021c575f5ffd5b5061023760048036038101906102329190610c7c565b6104bf565b6040516102449190610bae565b60405180910390f35b348015610258575f5ffd5b506102616104d8565b60405161026e9190610a7d565b60405180910390f35b348015610282575f5ffd5b5061029d60048036038101906102989190610b2e565b610515565b6040516102aa9190610b86565b60405180910390f35b3480156102be575f5ffd5b506102d960048036038101906102d49190610cfb565b61052b565b005b3480156102e6575f5ffd5b5061030160048036038101906102fc9190610d98565b6106ee565b60405161030e9190610bae565b60405180910390f35b60606040518060400160405280600981526020017f4552433230204554480000000000000000000000000000000000000000000000815250905090565b5f61035d610785565b15610390578119156e22d473030f116ddee9f6b43ac78ba38460601b60601c181761038f57633f68539a5f526004601cfd5b5b82602052637f5e9f20600c52335f52816034600c2055815f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa36001905092915050565b5f5f905090565b5f6103f284338461078d565b6103fd84848461081e565b600190509392505050565b5f6012905090565b5f5f61041a6109e0565b90505f5f1b81036104375761042d610317565b8051906020012090505b5f6104406109e4565b90506040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815282602082015281604082015246606082015230608082015260a08120935050505090565b5f6040517ff79e1d0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6338377508600c52815f526020600c20549050919050565b60606040518060400160405280600381526020017f4554480000000000000000000000000000000000000000000000000000000000815250905090565b5f61052133848461081e565b6001905092915050565b610533610785565b15610566578419156e22d473030f116ddee9f6b43ac78ba38760601b60601c181761056557633f68539a5f526004601cfd5b5b5f61056f6109e0565b90505f5f1b810361058c57610582610317565b8051906020012090505b5f6105956109e4565b9050854211156105ac57631a15a3cc5f526004601cfd5b6040518960601b60601c99508860601b60601c985065383775081901600e52895f526020600c2080547f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835284602084015283604084015246606084015230608084015260a08320602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528b60208401528a60408401528960608401528060808401528860a084015260c08320604e526042602c205f528760ff16602052866040528560605260208060805f60015afa8c3d51146106945763ddafbaef5f526004601cfd5b80820183558b637f5e9f2060a01b176040528a6034602c20558b8d7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602060608801a3836040525f60605250505050505050505050505050565b5f6106f7610785565b15610767576e22d473030f116ddee9f6b43ac78ba373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610766577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061077f565b5b81602052637f5e9f20600c52825f526034600c205490505b92915050565b5f6001905090565b610795610785565b156107de576e22d473030f116ddee9f6b43ac78ba373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315610819575b81602052637f5e9f20600c52825f526034600c2080548019156108165780831115610810576313be252b5f526004601cfd5b82810382555b50505b505050565b8273ffffffffffffffffffffffffffffffffffffffff1663789ff7018430846040518463ffffffff1660e01b815260040161085b93929190610de5565b6020604051808303815f875af1158015610877573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089b9190610e44565b50804710156108d6576040517ffedc6d5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516108fb90610e9c565b5f6040518083038185875af1925050503d805f8114610935576040519150601f19603f3d011682016040523d82523d5f602084013e61093a565b606091505b5050905080610975576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109d29190610bae565b60405180910390a350505050565b5f90565b5f7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc65f1b905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610a4f82610a0d565b610a598185610a17565b9350610a69818560208601610a27565b610a7281610a35565b840191505092915050565b5f6020820190508181035f830152610a958184610a45565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610aca82610aa1565b9050919050565b610ada81610ac0565b8114610ae4575f5ffd5b50565b5f81359050610af581610ad1565b92915050565b5f819050919050565b610b0d81610afb565b8114610b17575f5ffd5b50565b5f81359050610b2881610b04565b92915050565b5f5f60408385031215610b4457610b43610a9d565b5b5f610b5185828601610ae7565b9250506020610b6285828601610b1a565b9150509250929050565b5f8115159050919050565b610b8081610b6c565b82525050565b5f602082019050610b995f830184610b77565b92915050565b610ba881610afb565b82525050565b5f602082019050610bc15f830184610b9f565b92915050565b5f5f5f60608486031215610bde57610bdd610a9d565b5b5f610beb86828701610ae7565b9350506020610bfc86828701610ae7565b9250506040610c0d86828701610b1a565b9150509250925092565b5f60ff82169050919050565b610c2c81610c17565b82525050565b5f602082019050610c455f830184610c23565b92915050565b5f819050919050565b610c5d81610c4b565b82525050565b5f602082019050610c765f830184610c54565b92915050565b5f60208284031215610c9157610c90610a9d565b5b5f610c9e84828501610ae7565b91505092915050565b610cb081610c17565b8114610cba575f5ffd5b50565b5f81359050610ccb81610ca7565b92915050565b610cda81610c4b565b8114610ce4575f5ffd5b50565b5f81359050610cf581610cd1565b92915050565b5f5f5f5f5f5f5f60e0888a031215610d1657610d15610a9d565b5b5f610d238a828b01610ae7565b9750506020610d348a828b01610ae7565b9650506040610d458a828b01610b1a565b9550506060610d568a828b01610b1a565b9450506080610d678a828b01610cbd565b93505060a0610d788a828b01610ce7565b92505060c0610d898a828b01610ce7565b91505092959891949750929550565b5f5f60408385031215610dae57610dad610a9d565b5b5f610dbb85828601610ae7565b9250506020610dcc85828601610ae7565b9150509250929050565b610ddf81610ac0565b82525050565b5f606082019050610df85f830186610dd6565b610e056020830185610dd6565b610e126040830184610b9f565b949350505050565b610e2381610b6c565b8114610e2d575f5ffd5b50565b5f81519050610e3e81610e1a565b92915050565b5f60208284031215610e5957610e58610a9d565b5b5f610e6684828501610e30565b91505092915050565b5f81905092915050565b50565b5f610e875f83610e6f565b9150610e9282610e79565b5f82019050919050565b5f610ea682610e7c565b915081905091905056fea264697066735822122041eca6bb3e66e19f83ce868fe32a4033d6f4f711f409bf7bbcb2ed662161ec8464736f6c634300081d0033';
}

/**
* @dev autogenerated - run `./script/util/create_briefcase.sh` to generate current initcode
*
* @notice This initcode is generated from the following contract:
* - Source Contract: src/pkgs/ERC20-eth/src/ERC20ETH.sol
*/
function initcode() internal pure returns (bytes memory) {
return
hex'6080604052348015600e575f5ffd5b506109118061001c5f395ff3fe6080604052600436106100a8575f3560e01c806370a082311161006257806370a08231146101765780637ecebe001461019557806395d89b41146101c6578063a9059cbb146101f1578063d505accf14610210578063dd62ed3e14610231575f5ffd5b806306fdde03146100b3578063095ea7b3146100dd57806318160ddd1461010c57806323b872dd14610128578063313ce567146101475780633644e51514610162575f5ffd5b366100af57005b5f5ffd5b3480156100be575f5ffd5b506100c7610250565b6040516100d49190610775565b60405180910390f35b3480156100e8575f5ffd5b506100fc6100f73660046107c5565b610273565b60405190151581526020016100d4565b348015610117575f5ffd5b505f5b6040519081526020016100d4565b348015610133575f5ffd5b506100fc6101423660046107ed565b6102f3565b348015610152575f5ffd5b50604051601281526020016100d4565b34801561016d575f5ffd5b5061011a610314565b348015610181575f5ffd5b5061011a610190366004610827565b610390565b3480156101a0575f5ffd5b5061011a6101af366004610827565b6338377508600c9081525f91909152602090205490565b3480156101d1575f5ffd5b5060408051808201909152600381526208aa8960eb1b60208201526100c7565b3480156101fc575f5ffd5b506100fc61020b3660046107c5565b6103aa565b34801561021b575f5ffd5b5061022f61022a366004610847565b6103bf565b005b34801561023c575f5ffd5b5061011a61024b3660046108b4565b610573565b60408051808201909152600981526808aa4866460408aa8960bb1b602082015290565b5f6001600160a01b0383166e22d473030f116ddee9f6b43ac78ba318821915176102a457633f68539a5f526004601cfd5b82602052637f5e9f20600c52335f52816034600c2055815f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa35060015b92915050565b5f6102ff8433846105b7565b61030a84848461061b565b5060019392505050565b5f8061031e610250565b805190602001209050604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815260208101929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc69082015246606082015230608082015260a09020919050565b5f60405163f79e1d0d60e01b815260040160405180910390fd5b5f6103b633848461061b565b50600192915050565b6001600160a01b0386166e22d473030f116ddee9f6b43ac78ba318851915176103ef57633f68539a5f526004601cfd5b5f6103f8610250565b8051906020012090507fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64286101561043757631a15a3cc5f526004601cfd5b6040518960601b60601c99508860601b60601c985065383775081901600e52895f526020600c2080547f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835284602084015283604084015246606084015230608084015260a08320602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528b60208401528a60408401528960608401528060808401528860a084015260c08320604e526042602c205f528760ff16602052866040528560605260208060805f60015afa8c3d511461051f5763ddafbaef5f526004601cfd5b0190556303faf4f960a51b89176040526034602c20889055888a7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602060608501a360405250505f60605250505050505050565b5f6e22d473030f116ddee9f6b43ac78ba2196001600160a01b0383160161059c57505f196102ed565b50602052637f5e9f20600c9081525f91909152603490205490565b6e22d473030f116ddee9f6b43ac78ba2196001600160a01b038316016105dc57505050565b81602052637f5e9f20600c52825f526034600c208054801915610614578083111561060e576313be252b5f526004601cfd5b82810382555b5050505050565b60405163789ff70160e01b81526001600160a01b03841660048201819052306024830152604482018390529063789ff701906064016020604051808303815f875af115801561066c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069091906108e5565b50804710156106b257604051631fdb8dab60e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146106fb576040519150601f19603f3d011682016040523d82523d5f602084013e610700565b606091505b5050905080610722576040516312171d8360e31b815260040160405180910390fd5b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161076791815260200190565b60405180910390a350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146107c0575f5ffd5b919050565b5f5f604083850312156107d6575f5ffd5b6107df836107aa565b946020939093013593505050565b5f5f5f606084860312156107ff575f5ffd5b610808846107aa565b9250610816602085016107aa565b929592945050506040919091013590565b5f60208284031215610837575f5ffd5b610840826107aa565b9392505050565b5f5f5f5f5f5f5f60e0888a03121561085d575f5ffd5b610866886107aa565b9650610874602089016107aa565b95506040880135945060608801359350608088013560ff81168114610897575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156108c5575f5ffd5b6108ce836107aa565b91506108dc602084016107aa565b90509250929050565b5f602082840312156108f5575f5ffd5b81518015158114610840575f5ffdfea164736f6c634300081d000a';
}
}
7 changes: 7 additions & 0 deletions src/briefcase/protocols/ERC20-eth/interfaces/IERC7914.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.6.2;

interface IERC7914 {
function transferFromNative(address from, address recipient, uint256 amount) external returns (bool);
function approveNative(address spender, uint256 amount) external returns (bool);
}
1 change: 1 addition & 0 deletions src/pkgs/ERC20-eth
Submodule ERC20-eth added at 455edd
Loading