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
65 changes: 65 additions & 0 deletions .env.mainnet.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
ARBITRUM_RPC_URL=
ETHEREUM_RPC_URL=
ZKSYNC_RPC_URL=
OPTIMISM_RPC_URL=
LINEA_RPC_URL=
SCROLL_RPC_URL=
BASE_RPC_URL=

OWNER=
DEPLOYER_PRIVATE_KEY=

#### Verification
VERIFIER=etherscan
ETHERSCAN_API_KEY=


#### Chains

ETHEREUM_CHAIN_ID=1

# Arbitrum Envs
ARBITRUM_CHAIN_ID=42161
ARBITRUM_OUTBOX=0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840
ARBITRUM_ROOTS_SLOT=3

#Linea Envs
LINEA_CHAIN_ID=59144
LINEA_ROLLUP=0xd19d4B5d358258f05D7B411E21A1460D11B0876F
LINEA_STATE_ROOT_HASHES_SLOT=282
LINEA_L2_MESSAGE_SERVICE=0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec

# Scroll Envs
SCROLL_CHAIN_ID=534352
SCROLL_CHAIN=0xa13BAF47339d63B743e7Da8741db5456DAc1E556
SCROLL_FINALIZED_STATE_ROOT_SLOT=158
L1_SCROLL_MESSENGER=0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367
L2_SCROLL_MESSENGER=0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC

# Optimism Envs
OPTIMISM_CHAIN_ID=10
OPTIMISM_ANCHOR_GAME_SLOT=2
OPTIMISM_ANCHOR_STATE_REGISTRY=0x23B2C62946350F4246f9f9D027e071f0264FD113
OPTIMISM_L1_CROSS_DOMAIN_MESSENGER_PROXY=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
OPTIMISM_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007

#Base Envs
BASE_CHAIN_ID=8453
BASE_ANCHOR_GAME_SLOT=2
BASE_ANCHOR_STATE_REGISTRY=0x909f6cf47ed12f010A796527f562bFc26C7F4E72
BASE_L1_CROSS_DOMAIN_MESSENGER_PROXY=0x866E82a600A1414e583f7F13623F1aC5d58b0Afa
BASE_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007


# ZkSync Envs
ZKSYNC_CHAIN_ID=324
ZKSYNC_DIAMOND=0x32400084c286cf3e17e7b677ea9583e60a000324
ZKSYNC_GATEWAY_ZK_CHAIN=0x6E96D1172a6593D5027Af3c2664C5112Ca75F2B9
ZKSYNC_L2_LOGS_ROOT_HASH_SLOT=15
ZKSYNC_GATEWAY_CHAIN_ID=9075






30 changes: 24 additions & 6 deletions .env.example → .env.testnet.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,24 @@ ZKSYNC_RPC_URL=
OPTIMISM_RPC_URL=
LINEA_RPC_URL=
SCROLL_RPC_URL=
BASE_RPC_URL=

OWNER=0xCc2ACDd7eF3e9841d42E00199D4cF5bcdCa77a7e

OWNER=
DEPLOYER_PRIVATE_KEY=

ETHEREUM_CHAIN_ID=
#### Verification
VERIFIER=etherscan
ETHERSCAN_API_KEY=


#### Chains

ETHEREUM_CHAIN_ID=11155111

# Arbitrum Envs
ARBITRUM_CHAIN_ID=
ARBITRUM_OUTBOX=
ARBITRUM_ROOTS_SLOT=
ARBITRUM_CHAIN_ID=421614
ARBITRUM_OUTBOX=0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F
ARBITRUM_ROOTS_SLOT=3

#Linea Envs
LINEA_CHAIN_ID=59141
Expand All @@ -36,6 +43,14 @@ OPTIMISM_ANCHOR_STATE_REGISTRY=0xa1Cec548926eb5d69aa3B7B57d371EdBdD03e64b
OPTIMISM_L1_CROSS_DOMAIN_MESSENGER_PROXY=0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef
OPTIMISM_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007

#Base Envs
BASE_CHAIN_ID=84532
BASE_ANCHOR_GAME_SLOT=2
BASE_ANCHOR_STATE_REGISTRY=0x2fF5cC82dBf333Ea30D8ee462178ab1707315355
BASE_L1_CROSS_DOMAIN_MESSENGER_PROXY=0xC34855F4De64F1840e5686e64278da901e261f20
BASE_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007


# ZkSync Envs
ZKSYNC_CHAIN_ID=300
ZKSYNC_DIAMOND=0x9A6DE0f62Aa270A8bCB1e2610078650D539B1Ef9
Expand All @@ -45,3 +60,6 @@ ZKSYNC_GATEWAY_CHAIN_ID=32657






3 changes: 2 additions & 1 deletion deployments/arbitrum-sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834",
"scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec",
"optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a",
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4"
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4",
"base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
}
},
"provers": {
Expand Down
17 changes: 17 additions & 0 deletions deployments/base-sepolia.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"contracts": {
"broadcaster": "0x536c398D9bBAf896b128C99bB7c78CfA3243AE27",
"receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059",
"input-settler-escrow": "0x15eA18EAcD9C35b454CF1456ed1bD05636B46147",
"output-settler-simple": "0x1DCE289d62C2068584C5D0CFb5C1fD538e832847",
"broadcaster-oracle": "0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248"
},
"copies": {
"ethereum-sepolia": {
"linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834",
"scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec",
"optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a",
"arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6"
}
}
}
4 changes: 4 additions & 0 deletions deployments/ethereum-sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
"zksync-sepolia": {
"pointer": "0x7cac647e088b7361953f37C0C3BaA092748b8E7F",
"prover": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4"
},
"base-sepolia": {
"pointer": "0x391691A1a0a491A65adc1d0af97DF810e64EE2F8",
"prover": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
}
}
}
3 changes: 2 additions & 1 deletion deployments/linea-sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6",
"scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec",
"optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a",
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4"
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4",
"base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
}
},
"provers": {
Expand Down
8 changes: 6 additions & 2 deletions deployments/optimism-sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
"buffer": "0xaC0a6EB6407b9C13c3B374219B2f91fda4DF47C5",
"pusher": "0x2c4ded0d5883646AEAD86a6C748c871afa819125",
"broadcaster": "0x536c398D9bBAf896b128C99bB7c78CfA3243AE27",
"receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059"
"receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059",
"broadcaster-oracle": "0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248",
"input-settler-escrow": "0x15eA18EAcD9C35b454CF1456ed1bD05636B46147",
"output-settler-simple": "0x1DCE289d62C2068584C5D0CFb5C1fD538e832847"
Comment on lines +7 to +9

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 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"
done

Repository: 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}`);
  }
});
EOF

Repository: 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

  1. 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).

},
"copies": {
"ethereum-sepolia": {
"arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6",
"linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834",
"scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec",
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4"
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4",
"base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 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"
fi

Repository: 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}')
EOF

Repository: 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")
EOF

Repository: 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.

}
},
"provers": {
Expand Down
3 changes: 2 additions & 1 deletion deployments/scroll-sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6",
"linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834",
"optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a",
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4"
"zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4",
"base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6"
}
},
"provers": {
Expand Down
1 change: 1 addition & 0 deletions scripts/deployment/DeployBase.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ contract DeployBase is Script {
if (chainId == 534351) return "scroll-sepolia";
if (chainId == 11155420) return "optimism-sepolia";
if (chainId == 300) return "zksync-sepolia";
if (chainId == 84532) return "base-sepolia";

if (chainId == 1) return "ethereum";
if (chainId == 42161) return "arbitrum";
Expand Down
Loading