Conversation
📝 WalkthroughWalkthroughThis PR adds Base testnet (base-sepolia) support to the project infrastructure by introducing environment configuration files for mainnet and testnet, creating deployment configuration for Base Sepolia with contracts and cross-network mappings, and updating the deployment script to recognize Base Sepolia chain ID 84532. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
.env.mainnet.example (1)
61-65: Trim trailing blank lines to keep dotenv lint output clean.This is minor, but removing the extra empty lines at the end avoids recurring linter noise.
✂️ Suggested cleanup
ZKSYNC_GATEWAY_CHAIN_ID=9075 - - - - - -🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.env.mainnet.example around lines 61 - 65, Remove the extra blank lines at the end of the .env file so there are no trailing empty lines; simply trim the file's trailing whitespace/newlines so the last meaningful env entry is the final line, which will stop the dotenv linter from reporting noise..env.testnet.example (1)
53-53: Remove extra blank lines in the template.Optional cleanup to reduce dotenv-linter warnings and keep the example compact.
✂️ Suggested cleanup
BASE_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007 - # ZkSync Envs ZKSYNC_CHAIN_ID=300 ZKSYNC_DIAMOND=0x9A6DE0f62Aa270A8bCB1e2610078650D539B1Ef9 ZKSYNC_GATEWAY_ZK_CHAIN=0xFFDbb7B7F35A8b81618F64d95BCc878297759744 ZKSYNC_L2_LOGS_ROOT_HASH_SLOT=15 ZKSYNC_GATEWAY_CHAIN_ID=32657 - - -Also applies to: 63-65
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.env.testnet.example at line 53, Remove the extra blank lines in the environment template: collapse consecutive empty lines so the file has no unintended multi-line gaps (ensure single blank line separation only where semantically needed), and apply the same cleanup to the other occurrences mentioned; then re-run dotenv-linter or similar to confirm no warnings remain.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@deployments/optimism-sepolia.json`:
- Line 17: The JSON entry for the deployment key "base-sepolia" uses an address
with an incorrect EIP-55 checksum; replace the current value
"0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" with the correctly checksummed
address "0x853c0C8873fB6c2C71777373Ad71BEA04F3755A6" in the "base-sepolia" field
so the file contains the proper EIP-55 formatted address.
- Around line 7-9: The "input-settler-escrow" entry currently set to
0x15eA18EAcD9C35b454CF1456ed1bD05636B46147 should be verified against LI.FI's
published deployment (0x000025c3226C00B2Cdc200005a1600509f4e00C0); confirm
whether the present value is an intentional separate deployment or a mistake,
and if it's wrong replace the value in deployments/optimism-sepolia.json under
the "input-settler-escrow" key with the correct checksummed address from the
authoritative source, ensure the address uses EIP-55 checksum casing, run a
repo-wide search for references to the old address and update any linked
deployment artifacts or tests (and update the commit message to note the address
correction).
---
Nitpick comments:
In @.env.mainnet.example:
- Around line 61-65: Remove the extra blank lines at the end of the .env file so
there are no trailing empty lines; simply trim the file's trailing
whitespace/newlines so the last meaningful env entry is the final line, which
will stop the dotenv linter from reporting noise.
In @.env.testnet.example:
- Line 53: Remove the extra blank lines in the environment template: collapse
consecutive empty lines so the file has no unintended multi-line gaps (ensure
single blank line separation only where semantically needed), and apply the same
cleanup to the other occurrences mentioned; then re-run dotenv-linter or similar
to confirm no warnings remain.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: fdb04276-45e2-4781-bdcf-6ea1bec7ca00
📒 Files selected for processing (9)
.env.mainnet.example.env.testnet.exampledeployments/arbitrum-sepolia.jsondeployments/base-sepolia.jsondeployments/ethereum-sepolia.jsondeployments/linea-sepolia.jsondeployments/optimism-sepolia.jsondeployments/scroll-sepolia.jsonscripts/deployment/DeployBase.s.sol
| "broadcaster-oracle": "0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248", | ||
| "input-settler-escrow": "0x15eA18EAcD9C35b454CF1456ed1bD05636B46147", | ||
| "output-settler-simple": "0x1DCE289d62C2068584C5D0CFb5C1fD538e832847" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Verify new contract addresses for checksum validity, on-chain existence, and duplicates
NEW_ADDRESSES=(
"0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248"
"0x15eA18EAcD9C35b454CF1456ed1bD05636B46147"
"0x1DCE289d62C2068584C5D0CFb5C1fD538e832847"
)
echo "=== Validating EIP-55 Checksums ==="
for addr in "${NEW_ADDRESSES[@]}"; do
python3 -c "
from eth_utils import to_checksum_address
addr = '$addr'
try:
checksum_addr = to_checksum_address(addr.lower())
if addr == checksum_addr:
print(f'✓ {addr} - Valid checksum')
else:
print(f'✗ {addr} - Invalid checksum (expected: {checksum_addr})')
except Exception as e:
print(f'✗ {addr} - Error: {e}')
"
done
echo -e "\n=== Checking On-Chain Deployment on Optimism Sepolia ==="
for addr in "${NEW_ADDRESSES[@]}"; do
echo "Checking $addr..."
code=$(cast code "$addr" --rpc-url https://sepolia.optimism.io 2>&1)
if [[ "$code" == "0x" ]] || [[ -z "$code" ]]; then
echo "✗ No contract code found at $addr"
else
echo "✓ Contract code exists at $addr"
fi
done
echo -e "\n=== Checking for Duplicate Addresses ==="
cat deployments/optimism-sepolia.json | jq -r '.. | strings | select(startswith("0x"))' | sort | uniq -d | while read dup; do
echo "⚠ Duplicate address found: $dup"
doneRepository: openintentsframework/broadcaster
Length of output: 969
🏁 Script executed:
#!/bin/bash
# Attempt EIP-55 checksum validation using Node.js
# Install web3 if needed
npm list web3 &>/dev/null || npm install -g web3 &>/dev/null
node <<'EOF'
const Web3 = require('web3');
const web3 = new Web3();
const addresses = [
"0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248",
"0x15eA18EAcD9C35b454CF1456ed1bD05636B46147",
"0x1DCE289d62C2068584C5D0CFb5C1fD538e832847"
];
console.log("=== EIP-55 Checksum Validation ===");
addresses.forEach(addr => {
try {
const checksummed = web3.utils.toChecksumAddress(addr);
if (addr === checksummed) {
console.log(`✓ ${addr} - Valid checksum`);
} else {
console.log(`✗ ${addr} - Invalid checksum (expected: ${checksummed})`);
}
} catch (e) {
console.log(`✗ ${addr} - Error: ${e.message}`);
}
});
EOFRepository: openintentsframework/broadcaster
Length of output: 910
🌐 Web query:
0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248 Optimism Sepolia broadcaster-oracle EIP-55
💡 Result:
EIP-55 (checksummed) form: 0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248 (mixed-case is the checksum encoding per EIP-55) [1]
Lowercase (non-checksummed) form: 0x0a6edd8a400b6db1bbe0d21ecef07c4fce983248 [1]
I could not find any authoritative public source that labels 0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248 specifically as the “broadcaster-oracle” contract on Optimism Sepolia from the searches performed. You can independently validate whether the capitalization is a correct EIP-55 checksum using an address checksum checker. [2]
Sources: [1] [2]
🌐 Web query:
0x15eA18EAcD9C35b454CF1456ed1bD05636B46147 Optimism Sepolia input-settler-escrow
💡 Result:
On Optimism Sepolia, LI.FI’s documented Input Settler Escrow contract address is:
0x000025c3226C00B2Cdc200005a1600509f4e00C0 [1]
So the address you provided:
0x15eA18EAcD9C35b454CF1456ed1bD05636B46147
does not match LI.FI’s published Input Settler Escrow deployment for Optimism Sepolia (LI.FI states these contracts are deployed to the same addresses across the listed testnets, including Optimism Sepolia) [1].
Source
- LI.FI Intents docs – “System Overview” (Smart Contracts section lists “Input Settler Escrow” and notes same-address deployments on testnets including Optimism Sepolia) [1]
🌐 Web query:
0x1DCE289d62C2068584C5D0CFb5C1fD538e832847 Optimism Sepolia output-settler-simple
💡 Result:
0x1DCE289d62C2068584C5D0CFb5C1fD538e832847 is an OP Sepolia (chainId 11155420) contract address (often labeled output-settler-simple / OutputSettlerSimple in intent-based settlement systems). OP Sepolia’s explorers are Etherscan and Blockscout. [2], [3]
In the LI.FI Intents architecture, OutputSettlerSimple is the (currently) primary “output settler” contract responsible for output-side settlement and supports multiple order types (limit + Dutch variants, including exclusive versions). [1]
Sources: [1] [2] [3]
Verify the input-settler-escrow address—published documentation indicates a different deployment.
The address 0x15eA18EAcD9C35b454CF1456ed1bD05636B46147 does not match LI.FI's documented Input Settler Escrow contract on Optimism Sepolia, which is deployed at 0x000025c3226C00B2Cdc200005a1600509f4e00C0. Confirm whether the address in this file is intentionally different (e.g., a separate deployment) or if the wrong address was added. The other two addresses (broadcaster-oracle and output-settler-simple) are correctly deployed and checksummed.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@deployments/optimism-sepolia.json` around lines 7 - 9, The
"input-settler-escrow" entry currently set to
0x15eA18EAcD9C35b454CF1456ed1bD05636B46147 should be verified against LI.FI's
published deployment (0x000025c3226C00B2Cdc200005a1600509f4e00C0); confirm
whether the present value is an intentional separate deployment or a mistake,
and if it's wrong replace the value in deployments/optimism-sepolia.json under
the "input-settler-escrow" key with the correct checksummed address from the
authoritative source, ensure the address uses EIP-55 checksum casing, run a
repo-wide search for references to the old address and update any linked
deployment artifacts or tests (and update the commit message to note the address
correction).
| "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", | ||
| "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4" | ||
| "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4", | ||
| "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Verify base-sepolia copy address for checksum validity and on-chain existence
BASE_SEPOLIA_ADDR="0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
echo "=== Validating EIP-55 Checksum ==="
python3 -c "
from eth_utils import to_checksum_address
addr = '$BASE_SEPOLIA_ADDR'
try:
checksum_addr = to_checksum_address(addr.lower())
if addr == checksum_addr:
print(f'✓ {addr} - Valid checksum')
else:
print(f'✗ {addr} - Invalid checksum (expected: {checksum_addr})')
except Exception as e:
print(f'✗ {addr} - Error: {e}')
"
echo -e "\n=== Checking On-Chain Deployment on Base Sepolia ==="
echo "Checking $BASE_SEPOLIA_ADDR..."
code=$(cast code "$BASE_SEPOLIA_ADDR" --rpc-url https://sepolia.base.org 2>&1)
if [[ "$code" == "0x" ]] || [[ -z "$code" ]]; then
echo "✗ No contract code found at $BASE_SEPOLIA_ADDR"
else
echo "✓ Contract code exists at $BASE_SEPOLIA_ADDR"
fiRepository: openintentsframework/broadcaster
Length of output: 428
🏁 Script executed:
#!/bin/bash
# Verify checksum using web3.py which is more commonly available
BASE_SEPOLIA_ADDR="0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
echo "=== Validating EIP-55 Checksum ==="
python3 <<EOF
from web3 import Web3
addr = "$BASE_SEPOLIA_ADDR"
try:
checksum_addr = Web3.to_checksum_address(addr.lower())
if addr == checksum_addr:
print(f'✓ {addr} - Valid EIP-55 checksum')
else:
print(f'✗ {addr} - Invalid checksum')
print(f' Expected: {checksum_addr}')
except Exception as e:
print(f'Error: {e}')
# Fallback: manual verification using keccak
import hashlib
addr_clean = addr.lower().replace('0x', '')
hash_obj = hashlib.sha3_256(addr_clean.encode()).digest()
hash_str = hash_obj.hex()
result = '0x'
for i, char in enumerate(addr_clean):
if char in '0123456789':
result += char
else:
hash_value = int(hash_str[i], 16)
result += char.upper() if hash_value >= 8 else char
if result.lower() == addr.lower():
print(f'✓ {addr} - Valid EIP-55 checksum (manual verification)')
else:
print(f'✗ {addr} - Invalid checksum (manual verification)')
print(f' Expected: {result}')
EOFRepository: openintentsframework/broadcaster
Length of output: 244
🏁 Script executed:
#!/bin/bash
# Verify checksum using pure Python with hashlib
BASE_SEPOLIA_ADDR="0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
python3 <<'EOF'
import hashlib
addr = "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
# Remove 0x prefix
addr_clean = addr[2:].lower()
# Compute Keccak-256 hash of the address
keccak_hash = hashlib.sha3_256(addr_clean.encode()).hexdigest()
# Build checksum address
checksum_addr = '0x'
for i, char in enumerate(addr_clean):
if char in '0123456789':
checksum_addr += char
else:
# If hash nibble >= 8, uppercase the letter
hash_value = int(keccak_hash[i], 16)
checksum_addr += char.upper() if hash_value >= 8 else char
print(f"Address to verify: {addr}")
print(f"Expected checksum: {checksum_addr}")
print(f"Match: {addr == checksum_addr}")
if addr == checksum_addr:
print("✓ Valid EIP-55 checksum")
else:
print("✗ Invalid checksum")
EOFRepository: openintentsframework/broadcaster
Length of output: 231
Update base-sepolia copy address with correct EIP-55 checksum.
The address 0x853C0c8873FB6c2c71777373AD71BEa04f3755A6 exists on Base Sepolia but has an invalid EIP-55 checksum. Use the correctly checksummed address: 0x853c0C8873fB6c2C71777373Ad71BEA04F3755A6
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@deployments/optimism-sepolia.json` at line 17, The JSON entry for the
deployment key "base-sepolia" uses an address with an incorrect EIP-55 checksum;
replace the current value "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" with the
correctly checksummed address "0x853c0C8873fB6c2C71777373Ad71BEA04F3755A6" in
the "base-sepolia" field so the file contains the proper EIP-55 formatted
address.
Summary by CodeRabbit
New Features
Chores