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
17 changes: 0 additions & 17 deletions mainnet/2025-10-07-base-bridge-deployment/Makefile

This file was deleted.

8 changes: 0 additions & 8 deletions mainnet/2025-10-07-base-bridge-deployment/addresses.json

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
OP_COMMIT=ad12b8da0785da6938ebdb9c477c0f55d6ae834d
BASE_CONTRACTS_COMMIT=132ba0f33cb455ffff783924588df8864767bd9c

SENDER=0xfb42764d7038afa33c19f362b7b6d13226891e60
11 changes: 11 additions & 0 deletions mainnet/2025-11-25-base-bridge-deployment/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
include ../../Makefile
include ../.env
include .env

.PHONY: deps
deps:
forge install --no-git github.com/base/bridge@042f653868a85f6a25ed6b08494f3fa558d18976

.PHONY: deploy
deploy:
forge script DeployBridge --rpc-url $(L2_RPC_URL) --sender $(SENDER) -vvvv
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@ Deploys the Base side of [Base Bridge](https://github.com/base/bridge). This sho
1. Install dependencies

```bash
cd mainnet/2025-10-07-base-bridge-deployment
cd mainnet/2025-11-25-base-bridge-deployment
make deps
```

2. Connect and unlock Ledger

3. Deploy bridge
2. Deploy bridge

```bash
make deploy
Expand Down
8 changes: 8 additions & 0 deletions mainnet/2025-11-25-base-bridge-deployment/addresses.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Bridge": "0x3eff766C76a1be2Ce1aCF2B69c78bCae257D5188",
"BridgeValidator": "0xAF24c1c24Ff3BF1e6D882518120fC25442d6794B",
"CrossChainERC20Factory": "0xDD56781d0509650f8C2981231B6C917f2d5d7dF2",
"Twin": "0xb326c02150bb0De265Bb0eCeDA53531ab0163bf6",
"RelayerOrchestrator": "0x8Cfa6F29930E6310B6074baB0052c14a709B4741",
"WrappedSol": "0x311935Cd80B76769bF2ecC9D8Ab7635b2139cf82"
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"salt": "0x928e88ac3b7e376abdda9d42289e3e39d878c78869402e3dc1fb002aaa0cc852",
"initialOwner": "0x9C4a57Feb77e294Fd7BF5EBE9AB01CAA0a90A110",
"partnerValidators": "",
"partnerValidators": "0x50Ea62F44f44C17d48390cc9fd235dac8E5e127a",
"baseValidators": [
"0xa0f80e237be74a580ccaed06236075c17f1fec69",
"0xe018748703F74b806399dd1ECe608453578DDE79"
],
"baseSignatureThreshold": 2,
"partnerValidatorThreshold": 3,
"remoteBridge": "",
"remoteBridge": "0xf32983e871bc87d15a994f95f5f5054d98498c80cf09b3bafa91cb9507143b36",
"guardians": ["0x14536667Cd30e52C0b458BaACcB9faDA7046E056"]
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {Bridge} from "bridge/Bridge.sol";
import {BridgeValidator} from "bridge/BridgeValidator.sol";
import {CrossChainERC20} from "bridge/CrossChainERC20.sol";
import {CrossChainERC20Factory} from "bridge/CrossChainERC20Factory.sol";
import {TokenLib} from "bridge/libraries/TokenLib.sol";
import {Twin} from "bridge/Twin.sol";

struct Cfg {
Expand Down Expand Up @@ -153,7 +154,7 @@ contract DeployBridge is Script {
require(LibString.eq(CrossChainERC20(sol).name(), "Solana"), "PC18: incorrect SOL name");
require(LibString.eq(CrossChainERC20(sol).symbol(), "SOL"), "PC19: incorrect SOL symbol");
require(
CrossChainERC20(sol).remoteToken() == CrossChainERC20Factory(factory).SOL_PUBKEY(),
CrossChainERC20(sol).remoteToken() == Pubkey.unwrap(TokenLib.NATIVE_SOL_PUBKEY),
"PC20: incorrect SOL remote token"
);
require(CrossChainERC20(sol).decimals() == 9, "PC21: incorrect SOL decimals");
Expand All @@ -178,13 +179,15 @@ contract DeployBridge is Script {
address bridgeValidatorImpl =
address(new BridgeValidator({bridgeAddress: bridge, partnerValidators: cfg.partnerValidators}));

return ERC1967Factory(cfg.erc1967Factory).deployAndCall({
implementation: bridgeValidatorImpl,
admin: cfg.initialOwner,
data: abi.encodeCall(
BridgeValidator.initialize, (cfg.baseValidators, cfg.baseSignatureThreshold, cfg.partnerValidatorThreshold)
)
});
return ERC1967Factory(cfg.erc1967Factory)
.deployAndCall({
implementation: bridgeValidatorImpl,
admin: cfg.initialOwner,
data: abi.encodeCall(
BridgeValidator.initialize,
(cfg.baseValidators, cfg.baseSignatureThreshold, cfg.partnerValidatorThreshold)
)
});
}

function _deployBridge(address twinBeacon, address crossChainErc20Factory, address bridgeValidator)
Expand All @@ -198,29 +201,27 @@ contract DeployBridge is Script {
bridgeValidator: bridgeValidator
});

return ERC1967Factory(cfg.erc1967Factory).deployDeterministicAndCall({
implementation: address(bridgeImpl),
admin: cfg.initialOwner,
salt: _salt(),
data: abi.encodeCall(Bridge.initialize, (cfg.initialOwner, cfg.guardians))
});
return ERC1967Factory(cfg.erc1967Factory)
.deployDeterministicAndCall({
implementation: address(bridgeImpl),
admin: cfg.initialOwner,
salt: _salt(),
data: abi.encodeCall(Bridge.initialize, (cfg.initialOwner, cfg.guardians))
});
}

function _deployRelayerOrchestrator(address bridge, address bridgeValidator) private returns (address) {
address relayerOrchestratorImpl =
address(new RelayerOrchestrator({bridge: bridge, bridgeValidator: bridgeValidator}));

return ERC1967Factory(cfg.erc1967Factory).deploy({
implementation: relayerOrchestratorImpl,
admin: cfg.initialOwner
});
return
ERC1967Factory(cfg.erc1967Factory)
.deploy({implementation: relayerOrchestratorImpl, admin: cfg.initialOwner});
}

function _serializeAddress(string memory key, address value) private {
vm.writeJson({
json: LibString.toHexStringChecksummed(value),
path: "addresses.json",
valueKey: string.concat(".", key)
json: LibString.toHexStringChecksummed(value), path: "addresses.json", valueKey: string.concat(".", key)
});
}

Expand Down