Skip to content
Merged
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
13 changes: 10 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,15 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
FNAME_RESOLVER_OWNER_ADDRESS=0x138356f24c7A16BE48978dE277a468F6C16A19a5

# RPC endpoints for OP testnet and mainnet.
L1_MAINNET_RPC_URL=
L2_MAINNET_RPC_URL=
# Tier registry params
TIER_REGISTRY_VAULT_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
TIER_REGISTRY_OWNER_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
TIER_REGISTRY_MIGRATOR_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692

# RPC endpoints
ETH_MAINNET_RPC_URL=
OP_MAINNET_RPC_URL=
BASE_MAINNET_RPC_URL=

# Salts
STORAGE_RENT_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c65360d99ba6ea4e0161f2b96c
Expand All @@ -41,6 +47,7 @@ KEY_REGISTRY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c62af4de6e1f03
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6610c0841333604016684800c
BUNDLER_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6e451fc0a34ec4c008c9a31fa
RECOVERY_PROXY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6110eaaca06f77900dac1cad3
TIER_REGISTRY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6110eaaca06f77900dac1cad3

# Deployer address.
DEPLOYER=0x6D2b70e39C6bc63763098e336323591eb77Cd0C6
Expand Down
13 changes: 10 additions & 3 deletions .env.local
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,23 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
FNAME_RESOLVER_OWNER_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266

# RPC endpoints for OP testnet and mainnet.
L2_MAINNET_RPC_URL=
L1_MAINNET_RPC_URL=
# Tier registry params
TIER_REGISTRY_VAULT_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
TIER_REGISTRY_OWNER_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
TIER_REGISTRY_MIGRATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266

# RPC endpoints
ETH_MAINNET_RPC_URL=
OP_MAINNET_RPC_URL=
BASE_MAINNET_RPC_URL=

STORAGE_RENT_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
ID_REGISTRY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
KEY_REGISTRY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
BUNDLER_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
RECOVERY_PROXY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
TIER_REGISTRY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000

# Deployer address.
# Default address is Anvil test account 1
Expand Down
13 changes: 10 additions & 3 deletions .env.prod
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,15 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
FNAME_RESOLVER_OWNER_ADDRESS=0x138356f24c7A16BE48978dE277a468F6C16A19a5

# RPC endpoints for OP testnet and mainnet.
L1_MAINNET_RPC_URL=
L2_MAINNET_RPC_URL=
# Tier registry params
TIER_REGISTRY_VAULT_ADDRESS=0x0BDcA19c9801bb484285362fD5dd0c94592c874C
TIER_REGISTRY_OWNER_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
TIER_REGISTRY_MIGRATOR_ADDRESS=0x2d93c2f74b2c4697f9ea85d0450148aa45d4d5a2

# RPC endpoints
ETH_MAINNET_RPC_URL=
OP_MAINNET_RPC_URL=
BASE_MAINNET_RPC_URL=

# Salts
STORAGE_RENT_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c65360d99ba6ea4e0161f2b96c
Expand All @@ -41,6 +47,7 @@ KEY_REGISTRY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c62af4de6e1f03
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6610c0841333604016684800c
BUNDLER_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6e451fc0a34ec4c008c9a31fa
RECOVERY_PROXY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6110eaaca06f77900dac1cad3
TIER_REGISTRY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c63425a6dbfc4658e47004603abdf

# Deployer address.
DEPLOYER=0x6D2b70e39C6bc63763098e336323591eb77Cd0C6
Expand Down
13 changes: 10 additions & 3 deletions .env.upgrade
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,15 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
FNAME_RESOLVER_OWNER_ADDRESS=0x138356f24c7A16BE48978dE277a468F6C16A19a5

# RPC endpoints for OP testnet and mainnet.
L1_MAINNET_RPC_URL=
L2_MAINNET_RPC_URL=
# Tier registry params
TIER_REGISTRY_VAULT_ADDRESS=0x0BDcA19c9801bb484285362fD5dd0c94592c874C
TIER_REGISTRY_OWNER_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
TIER_REGISTRY_MIGRATOR_ADDRESS=0x2d93c2f74b2c4697f9ea85d0450148aa45d4d5a2

# RPC endpoints
ETH_MAINNET_RPC_URL=
OP_MAINNET_RPC_URL=
BASE_MAINNET_RPC_URL=

# Salts
STORAGE_RENT_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
Expand All @@ -43,6 +49,7 @@ KEY_GATEWAY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c6342229ded5ec3c3b
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
BUNDLER_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c6342e9da01d98917640342e02a5c
RECOVERY_PROXY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c63421958ea987b94fd038a490454
TIER_REGISTRY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c63425a6dbfc4658e47004603abdf

# Deployed contracts
STORAGE_RENT_ADDRESS=0x00000000fcCe7f938e7aE6D3c335bD6a1a7c593D
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ on:

env:
FOUNDRY_PROFILE: ci
L1_MAINNET_RPC_URL: ${{ secrets.L1_MAINNET_RPC_URL }}
L2_MAINNET_RPC_URL: ${{ secrets.L2_MAINNET_RPC_URL }}
ETH_MAINNET_RPC_URL: ${{ secrets.L1_MAINNET_RPC_URL }}
OP_MAINNET_RPC_URL: ${{ secrets.L2_MAINNET_RPC_URL }}
BASE_MAINNET_RPC_URL: ${{ secrets.BASE_MAINNET_RPC_URL }}

jobs:
build-image:
Expand Down
14 changes: 7 additions & 7 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ x-anvil-defaults: &anvil-defaults
<<: *build-defaults
restart: on-failure
healthcheck:
test: ['CMD', '/usr/bin/nc', '-z', 'localhost', '${PORT:-8545}']
test: ["CMD", "/usr/bin/nc", "-z", "localhost", "${PORT:-8545}"]
interval: 1s
timeout: 1s
retries: 3
Expand All @@ -27,15 +27,15 @@ services:
<<: *anvil-defaults
command: |
sh -c '
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$L2_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$OP_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
'
environment:
- L2_MAINNET_RPC_URL
- OP_MAINNET_RPC_URL
volumes:
- l2-anvil-data:/var/lib/anvil
- l2-anvil-cache:/root/.foundry/cache
ports:
- '${PORT:-8545}:${PORT:-8545}'
- "${PORT:-8545}:${PORT:-8545}"

l2-deployer:
<<: *deployer-defaults
Expand Down Expand Up @@ -81,15 +81,15 @@ services:
<<: *anvil-defaults
command: |
sh -c '
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$L1_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$ETH_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
'
environment:
- L1_MAINNET_RPC_URL
- ETH_MAINNET_RPC_URL
volumes:
- l1-anvil-data:/var/lib/anvil
- l1-anvil-cache:/root/.foundry/cache
ports:
- '${PORT:-8546}:${PORT:-8545}'
- "${PORT:-8546}:${PORT:-8545}"

l1-deployer:
<<: *deployer-defaults
Expand Down
5 changes: 3 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@ int_types = "long"
multiline_func_header = "params_first"

[rpc_endpoints]
l2_mainnet = "${L2_MAINNET_RPC_URL}"
l1_mainnet = "${L1_MAINNET_RPC_URL}"
base_mainnet = "${BASE_MAINNET_RPC_URL}"
op_mainnet = "${OP_MAINNET_RPC_URL}"
eth_mainnet = "${ETH_MAINNET_RPC_URL}"
86 changes: 86 additions & 0 deletions script/DeployTierRegistry.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.21;

import {Test} from "forge-std/Test.sol";
import {TierRegistry} from "../src/TierRegistry.sol";
import {console, ImmutableCreate2Deployer} from "./abstract/ImmutableCreate2Deployer.sol";

contract DeployTierRegistry is ImmutableCreate2Deployer, Test {
address public constant BASE_USDC = address(0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913);
uint256 public constant MIN_DAYS = 30;
uint256 public constant MAX_DAYS = 365;
uint256 public constant PRICE_PER_DAY = 328768;

struct Salts {
bytes32 tierRegistry;
}

struct DeploymentParams {
address deployer;
address vault;
address owner;
address migrator;
Salts salts;
}

struct Addresses {
address tierRegistry;
}

struct Contracts {
TierRegistry tierRegistry;
}

function run() public {
runSetup(runDeploy(loadDeploymentParams()));
}

function runDeploy(
DeploymentParams memory params
) public returns (Contracts memory) {
return runDeploy(params, true);
}

function runDeploy(DeploymentParams memory params, bool broadcast) public returns (Contracts memory) {
Addresses memory addrs;
addrs.tierRegistry = register(
"TierRegistry",
params.salts.tierRegistry,
type(TierRegistry).creationCode,
abi.encode(params.migrator, params.deployer)
);
deploy(broadcast);

return Contracts({tierRegistry: TierRegistry(addrs.tierRegistry)});
}

function runSetup(Contracts memory contracts, DeploymentParams memory params, bool broadcast) public {
if (deploymentChanged()) {
console.log("Running setup");

if (broadcast) vm.startBroadcast();
contracts.tierRegistry.setTier(1, BASE_USDC, MIN_DAYS, MAX_DAYS, PRICE_PER_DAY, params.vault);
contracts.tierRegistry.transferOwnership(params.owner);
if (broadcast) vm.stopBroadcast();
} else {
console.log("No changes, skipping setup");
}
}

function runSetup(
Contracts memory contracts
) public {
DeploymentParams memory params = loadDeploymentParams();
runSetup(contracts, params, true);
}

function loadDeploymentParams() internal returns (DeploymentParams memory) {
return DeploymentParams({
deployer: vm.envAddress("DEPLOYER"),
vault: vm.envAddress("TIER_REGISTRY_VAULT_ADDRESS"),
owner: vm.envAddress("TIER_REGISTRY_OWNER_ADDRESS"),
migrator: vm.envAddress("TIER_REGISTRY_MIGRATOR_ADDRESS"),
salts: Salts({tierRegistry: vm.envOr("TIER_REGISTRY_CREATE2_SALT", bytes32(0))})
});
}
}
2 changes: 1 addition & 1 deletion src/TierRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity 0.8.29;

import {Migration} from "./abstract/Migration.sol";
import "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {SafeERC20, IERC20} from "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

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

Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/ITierRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity 0.8.29;

import {IMigration} from "./abstract/IMigration.sol";
import "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {IERC20} from "openzeppelin/contracts/token/ERC20/IERC20.sol";

/**
* @title ITierRegistry
Expand Down
2 changes: 1 addition & 1 deletion test/Deploy/AuthKeys.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ contract AuthKeysTest is Test {
address internal migrator = relayer;

function setUp() public {
vm.createSelectFork("l2_mainnet", 134877573);
vm.createSelectFork("op_mainnet", 134877573);

(alice, alicePk) = makeAddrAndKey("alice");
(bob, bobPk) = makeAddrAndKey("bob");
Expand Down
2 changes: 1 addition & 1 deletion test/Deploy/DeployL1.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ contract DeployL1Test is DeployL1, FnameResolverTestSuite {
address internal alice = makeAddr("alice");

function setUp() public override {
vm.createSelectFork("l1_mainnet");
vm.createSelectFork("eth_mainnet");

(signer, signerPk) = makeAddrAndKey("signer");

Expand Down
2 changes: 1 addition & 1 deletion test/Deploy/DeployL2.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ contract DeployL2Test is DeployL2, Test {
address internal deployer = address(0x6D2b70e39C6bc63763098e336323591eb77Cd0C6);

function setUp() public {
vm.createSelectFork("l2_mainnet", 108869038);
vm.createSelectFork("op_mainnet", 108869038);

(alice, alicePk) = makeAddrAndKey("alice");
(bob, bobPk) = makeAddrAndKey("bob");
Expand Down
Loading
Loading