Skip to content

Commit

Permalink
chore: script commands and arbitrary scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
excaliborr committed Aug 1, 2024
1 parent e63941d commit 76aa5a8
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 1 deletion.
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ L1_FACTORY_MAINNET=
L1_ADAPTER_OP=
L2_ADAPTER_OP=

# Custom Chain
BRIDGED_USDC_IMPLEMENTATION=
CUSTOM_L1_MESSENGER=
CHAIN_NAME=
L1_ADAPTER=
ROLE_CALLER=
BURN_CALLER=


# Optimism
Expand Down
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"lint:sol-logic": "solhint -c .solhint.json 'src/**/*.sol' 'script/**/*.sol'",
"lint:sol-tests": "solhint -c .solhint.tests.json 'test/**/*.sol'",
"prepare": "husky install",
"script:deploy": "forge script script/mainnet/deploy/Deploy.s.sol --slow --via-ir",
"script:deploy:broadcast": "forge script script/mainnet/deploy/Deploy.s.sol --broadcast --verify --slow --via-ir",
"script:migrate": "forge script script/mainnet/migration/MigrateToNative.s.sol --slow --via-ir",
"script:migrate:broadcast": "forge script script/mainnet/migration/MigrateToNative.s.sol --broadcast --verify --slow --via-ir",
"test": "forge test -vvv",
"test:fuzz": "echidna test/invariants/fuzz/OpUSDC.t.sol --config test/invariants/fuzz/config.yaml --contract OpUsdcTest",
"test:integration": "forge test --match-contract Integration -vvv",
Expand Down
44 changes: 44 additions & 0 deletions script/mainnet/deploy/Deploy.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {Script} from 'forge-std/Script.sol';
import {console} from 'forge-std/Test.sol';
import {IL1OpUSDCFactory} from 'interfaces/IL1OpUSDCFactory.sol';
import {USDCInitTxs} from 'src/contracts/utils/USDCInitTxs.sol';

contract Deploy is Script {
uint32 public constant MIN_GAS_LIMIT_DEPLOY = 9_000_000;
IL1OpUSDCFactory public immutable L1_FACTORY = IL1OpUSDCFactory(vm.envAddress('L1_FACTORY_MAINNET'));
address public immutable BRIDGED_USDC_IMPLEMENTATION = vm.envAddress('BRIDGED_USDC_IMPLEMENTATION');
address public immutable L1_MESSENGER = vm.envAddress('CUSTOM_L1_MESSENGER');
string public CHAIN_NAME = vm.envString('CHAIN_NAME');

Check warning on line 14 in script/mainnet/deploy/Deploy.s.sol

View workflow job for this annotation

GitHub Actions / Lint Commit Messages

Variable name must be in mixedCase
address public owner = vm.rememberKey(vm.envUint('MAINNET_PK'));

function run() public {
vm.createSelectFork(vm.rpcUrl(vm.envString('MAINNET_RPC')));
vm.startBroadcast(owner);

// NOTE: We have these hardcoded to default values, if used in product you will need to change them
bytes[] memory _usdcInitTxs = new bytes[](3);
_usdcInitTxs[0] = USDCInitTxs.INITIALIZEV2;
_usdcInitTxs[1] = USDCInitTxs.INITIALIZEV2_1;
_usdcInitTxs[2] = USDCInitTxs.INITIALIZEV2_2;

IL1OpUSDCFactory.L2Deployments memory _l2Deployments = IL1OpUSDCFactory.L2Deployments({
l2AdapterOwner: owner,
usdcImplAddr: BRIDGED_USDC_IMPLEMENTATION,
usdcInitTxs: _usdcInitTxs,
minGasLimitDeploy: MIN_GAS_LIMIT_DEPLOY
});

// Deploy the L2 contracts
(address _l1Adapter, address _l2Factory, address _l2Adapter) =
L1_FACTORY.deploy(L1_MESSENGER, owner, CHAIN_NAME, _l2Deployments);
vm.stopBroadcast();

/// NOTE: Hardcode the `L1_ADAPTER_BASE` and `L2_ADAPTER_BASE` addresses inside the `.env` file
console.log('L1 Adapter:', _l1Adapter);
console.log('L2 Factory:', _l2Factory);
console.log('L2 Adapter:', _l2Adapter);
}
}
22 changes: 22 additions & 0 deletions script/mainnet/migration/MigrateToNative.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {Script} from 'forge-std/Script.sol';
import {IL1OpUSDCBridgeAdapter} from 'interfaces/IL1OpUSDCBridgeAdapter.sol';

contract MigrateToNative is Script {
uint32 public constant MIN_GAS_LIMIT_RECEIVE_L2 = 100_000;
uint32 public constant MIN_GAS_LIMIT_SET_BURN_AMOUNT_L2 = 100_000;
IL1OpUSDCBridgeAdapter public immutable L1_ADAPTER = IL1OpUSDCBridgeAdapter(vm.envAddress('L1_ADAPTER'));

address public owner = vm.rememberKey(vm.envUint('MAINNET_OWNER_PK'));
address public roleCaller = vm.envAddress('ROLE_CALLER');
address public burnCaller = vm.envAddress('BURN_CALLER');

function run() public {
vm.createSelectFork(vm.rpcUrl(vm.envString('MAINNET_RPC')));
vm.startBroadcast(owner);
L1_ADAPTER.migrateToNative(roleCaller, burnCaller, MIN_GAS_LIMIT_RECEIVE_L2, MIN_GAS_LIMIT_SET_BURN_AMOUNT_L2);
vm.stopBroadcast();
}
}
27 changes: 27 additions & 0 deletions script/testnet/deploy/Bridge.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {Script} from 'forge-std/Script.sol';
import {console} from 'forge-std/Test.sol';

Check warning on line 5 in script/testnet/deploy/Bridge.s.sol

View workflow job for this annotation

GitHub Actions / Lint Commit Messages

Variable "console" is unused
import {IL1OpUSDCFactory} from 'interfaces/IL1OpUSDCFactory.sol';

Check warning on line 6 in script/testnet/deploy/Bridge.s.sol

View workflow job for this annotation

GitHub Actions / Lint Commit Messages

Variable "IL1OpUSDCFactory" is unused

import {IOpUSDCBridgeAdapter} from 'interfaces/IOpUSDCBridgeAdapter.sol';
import {IUSDC} from 'interfaces/external/IUSDC.sol';
import {USDCInitTxs} from 'src/contracts/utils/USDCInitTxs.sol';

Check warning on line 10 in script/testnet/deploy/Bridge.s.sol

View workflow job for this annotation

GitHub Actions / Lint Commit Messages

Variable "USDCInitTxs" is unused

contract Bridge is Script {
address public constant L1_MESSENGER = 0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef;
uint32 public constant MIN_GAS_LIMIT_DEPLOY = 9_000_000;
string public constant CHAIN_NAME = 'Optimism Sepolia';
IOpUSDCBridgeAdapter public immutable ADAPTER = IOpUSDCBridgeAdapter(0xF6277eD38fB97e0383927dc04fDEE397cd94124e);
IUSDC public immutable USDC = IUSDC(0xF3dD0c89cf78C46A4150238e8A50285e1f4b5407);

address public owner = vm.rememberKey(vm.envUint('SEPOLIA_PK'));

function run() public {
vm.startBroadcast(owner);
uint256 _balanceOf = USDC.balanceOf(owner);
ADAPTER.sendMessage(owner, _balanceOf, 200_000);
vm.stopBroadcast();
}
}
2 changes: 1 addition & 1 deletion script/testnet/deploy/L1FactoryDeployAndSetup.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {console} from 'forge-std/Test.sol';
import {IL1OpUSDCFactory} from 'interfaces/IL1OpUSDCFactory.sol';

contract L1FactoryDeployAndSetup is Script {
address public constant USDC = 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238;
address public constant USDC = 0xF3dD0c89cf78C46A4150238e8A50285e1f4b5407;
address public deployer = vm.rememberKey(vm.envUint('SEPOLIA_PK'));

function run() public {
Expand Down

0 comments on commit 76aa5a8

Please sign in to comment.