Skip to content

Artifacts

DISCLAIMER // NFA // DYOR

This analysis is based on a full disassembly of the deployed bytecode — the contract source code is not verified on Etherscan. The published upstream source was compiled locally and matches the on-chain creation bytecode byte for byte; that match was established by us, not by Etherscan. We are not smart contract security experts. This document should not be considered a comprehensive security audit or financial advice. Always verify critical information independently.

⊙ generated by robots | curated by humans

METADATA
Contract Address 0x4e59b448...B4956C (etherscan)
Network Ethereum Mainnet
Analysis Date 2026-10-30

Runtime Bytecode

The deployed contract bytecode fetched from the blockchain. 69 bytes.

Source: Etherscan - Contract Code

Command:

export ETH_RPC_URL=https://eth.llamarpc.com
cast code 0x4e59b44847b379578588920cA78FbF26c0B4956C

Artifact:

0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3


Creation Bytecode

The full bytecode used to deploy the contract. The first 14 bytes are the constructor, which copies the 69-byte runtime that follows into memory and returns it. There are no constructor arguments.

Source: Etherscan - Creation TX

Command:

export ETH_RPC_URL=https://eth.llamarpc.com
cast tx 0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26 input

Artifact:

0x604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3

Constructor disassembly:

00000000: PUSH1 0x45
00000002: DUP1
00000003: PUSH1 0x0e
00000005: PUSH1 0x00
00000007: CODECOPY
00000008: DUP1
00000009: PUSH1 0x00
0000000b: RETURN
0000000c: POP
0000000d: INVALID

Reconstructed Source Code

The source is not verified on Etherscan. The Yul below is the upstream source, not a reconstruction, and it compiles to the on-chain creation bytecode byte for byte with solc 0.5.8 and the Yul optimizer enabled. It is listed under this heading because Etherscan holds no verified copy.

Not Verified Source

This source is not verified on Etherscan. Its identity with the deployed contract was established by compiling it locally and comparing the output with the creation bytecode recorded on chain. It is provided for educational and analysis purposes only.

Source: Arachnid/deterministic-deployment-proxy — source/deterministic-deployment-proxy.yul, commit be3c5974

Artifact:

object "Proxy" {
    // deployment code
    code {
        let size := datasize("runtime")
        datacopy(0, dataoffset("runtime"), size)
        return(0, size)
    }
    object "runtime" {
        // deployed code
        code {
            calldatacopy(0, 32, sub(calldatasize(), 32))
            let result := create2(callvalue(), 0, sub(calldatasize(), 32), calldataload(0))
            if iszero(result) { revert(0, 0) }
            mstore(0, result)
            return(12, 20)
        }
    }
}


Additional Artifacts

Raw Deployment Transaction

The pre-signed legacy transaction. Recursive Length Prefix (RLP) fields: nonce 0x (0), gas price 0x174876e800 (100 Gwei), gas limit 0x0186a0 (100,000), to empty (contract creation), value 0x (0), data (the creation bytecode), v = 0x1b (27, no chain id), r = s = 0x2222…22.

Source: Etherscan - Creation TX; identical to the transaction published in the upstream README

Command:

cast tx 0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26 --raw

Artifact:

0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222

Runtime Disassembly

Command:

cast disassemble $(cast code 0x4e59b44847b379578588920cA78FbF26c0B4956C)

Artifact:

00000000: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00000021: CALLDATASIZE
00000022: ADD
00000023: PUSH1 0x00
00000025: DUP2
00000026: PUSH1 0x20
00000028: DUP3
00000029: CALLDATACOPY
0000002a: DUP1
0000002b: CALLDATALOAD
0000002c: DUP3
0000002d: DUP3
0000002e: CALLVALUE
0000002f: CREATE2
00000030: DUP1
00000031: ISZERO
00000032: ISZERO
00000033: PUSH1 0x39
00000035: JUMPI
00000036: DUP2
00000037: DUP3
00000038: REVERT
00000039: JUMPDEST
0000003a: DUP1
0000003b: DUP3
0000003c: MSTORE
0000003d: POP
0000003e: POP
0000003f: POP
00000040: PUSH1 0x14
00000042: PUSH1 0x0c
00000044: RETURN

Fork Test Script

Behavioural tests run on a local anvil fork of mainnet pinned to block 26,306,072 (etherscan). Transactions are sent from anvil's first dev account, which is unlocked on the fork only.

Command:

ETH_RPC_URL=<mainnet rpc> ./fork-tests.sh

Artifact:

#!/usr/bin/env bash
# Behavioural tests of the deterministic deployment proxy on a local anvil fork of mainnet.
# Usage: ETH_RPC_URL=<mainnet rpc> ./fork-tests.sh
set -u
P=0x4e59b44847b379578588920cA78FbF26c0B4956C
anvil --fork-url "$ETH_RPC_URL" --fork-block-number 26306072 --port 8547 --silent & AP=$!; trap 'kill $AP' EXIT; for i in $(seq 60); do cast chain-id --rpc-url http://127.0.0.1:8547 >/dev/null 2>&1 && break; sleep 1; done
export ETH_RPC_URL=http://127.0.0.1:8547
EOA=$(cast rpc eth_accounts | jq -r ".[0]")  # anvil dev account, unlocked on the fork
SALT=0x00000000000000000000000000000000000000000000000000000000000000d2
# init code: SSTORE(0, CALLER); SSTORE(1, ORIGIN); return empty runtime
INIT=0x336000553260015560006000f3
echo "== 1. predicted address (CREATE2 from proxy, salt, keccak(init))"
PRED=$(cast create2 --deployer $P --salt $SALT --init-code $INIT | awk '{print $NF}'); echo "$PRED"
echo "== 2. eth_call return data (raw 20 bytes, not ABI-encoded)"
cast call $P "${SALT}${INIT#0x}"
echo "== 3. deploy"
cast send --unlocked --from $EOA $P "${SALT}${INIT#0x}" --json | jq -r '.status, .gasUsed'
echo "== 4. constructor saw msg.sender (slot 0) and tx.origin (slot 1); caller EOA=$EOA"
cast storage $PRED 0; cast storage $PRED 1
echo "== 5. repeat same salt+init -> expect revert with empty data"
cast call $P "${SALT}${INIT#0x}" 2>&1 | tail -1
echo "== 6. calldata shorter than 32 bytes -> length underflow"
cast call $P 0x1234 --gas-limit 1000000 2>&1 | tail -1
echo "== 7. exactly 32 bytes (salt only, empty init) -> deploys a codeless account"
SALT2=0x00000000000000000000000000000000000000000000000000000000000000e3
cast call $P $SALT2
echo "== 8. ETH forwarded: deploy init that keeps 1 wei"
cast send --unlocked --from $EOA $P "${SALT2}${INIT#0x}" --value 1 --json | jq -r .status
PRED2=$(cast create2 --deployer $P --salt $SALT2 --init-code $INIT | awk '{print $NF}')
echo "child balance: $(cast balance $PRED2)  proxy balance: $(cast balance $P)"
echo "== 9. ETH to a reverting init (0xfe INVALID) -> whole call reverts, nothing kept"
cast send --unlocked --from $EOA $P "${SALT2}fe" --value 1 --gas-limit 200000 --json 2>&1 | jq -r ".status // ." | tail -1
echo "proxy balance: $(cast balance $P)"
echo "== 10. runtime code over EIP-170 limit (init returns 24,577 bytes) -> empty revert"
cast call $P "${SALT2}6160016000f3" --gas-limit 20000000 2>&1 | tail -1
echo "== 11. init code over EIP-3860 limit (49,153 bytes) -> exceptional halt"
BIG=$(python3 -c 'print("00"*49153)')
cast call $P "${SALT2}${BIG}" --gas-limit 20000000 2>&1 | tail -1
echo "== 12. init code at EIP-3860 limit (49,152 bytes) -> deploys"
BIG=$(python3 -c 'print("00"*49152)')
cast call $P "${SALT2}${BIG}" --gas-limit 20000000 2>&1 | tail -1

Fork Test Output

Artifact:

== 1. predicted address (CREATE2 from proxy, salt, keccak(init))
0x26866bb0Fc67168e859212871eA28D83126c0958
== 2. eth_call return data (raw 20 bytes, not ABI-encoded)
0x26866bb0fc67168e859212871ea28d83126c0958
== 3. deploy
0x1
0x17d57
== 4. constructor saw msg.sender (slot 0) and tx.origin (slot 1); caller EOA=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c
0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266
== 5. repeat same salt+init -> expect revert with empty data
Error: server returned an error response: error code 3: execution reverted, data: "0x"
== 6. calldata shorter than 32 bytes -> length underflow
Error: server returned an error response: error code -32603: EVM error InvalidOperandOOG
== 7. exactly 32 bytes (salt only, empty init) -> deploys a codeless account
0x35c4699d0e93c66af56cc01a7e087e55b687d5e1
== 8. ETH forwarded: deploy init that keeps 1 wei
0x1
child balance: 1  proxy balance: 0
== 9. ETH to a reverting init (0xfe INVALID) -> whole call reverts, nothing kept
0x0
proxy balance: 0
== 10. runtime code over EIP-170 limit (init returns 24,577 bytes) -> empty revert
Error: server returned an error response: error code 3: execution reverted, data: "0x"
== 11. init code over EIP-3860 limit (49,153 bytes) -> exceptional halt
Error: server returned an error response: error code -32603: EVM error CreateInitCodeSizeLimit
== 12. init code at EIP-3860 limit (49,152 bytes) -> deploys
0x4116be01c87456ca8e83be320f8fc4826bcc43e7

Cross-Chain Check Script

Reads code, nonces, and the keyless transaction on eight chains through public Remote Procedure Call (RPC) endpoints. The Ethereum row uses $ETH_RPC_URL, because public nodes have pruned the 2020 transaction.

Command:

ETH_RPC_URL=<mainnet rpc> ./multichain-check.sh

Artifact:

#!/usr/bin/env bash
# Compare the proxy's code, nonce, and keyless deployment tx across chains via public RPCs.
P=0x4e59b44847b379578588920cA78FbF26c0B4956C
S=0x3fab184622dc19b6109349b94811493bf2a45362
T=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26
RT=0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3
while read -r expect name rpc; do
  rpc=$(eval echo "$rpc")  # expands $ETH_RPC_URL for the Ethereum row; public nodes prune the 2020 tx
  id=$(cast chain-id --rpc-url "$rpc" 2>/dev/null)
  blk=$(cast block-number --rpc-url "$rpc" 2>/dev/null)
  code=$(cast code $P --rpc-url "$rpc" --block "$blk" 2>/dev/null)
  match=$([ "$code" = "$RT" ] && echo match || echo "MISMATCH(${code:0:16})")
  pn=$(cast nonce $P --rpc-url "$rpc" --block "$blk" 2>/dev/null)
  sn=$(cast nonce $S --rpc-url "$rpc" --block "$blk" 2>/dev/null)
  tx=$(cast tx $T --rpc-url "$rpc" --json 2>/dev/null | jq -r '"block=\(.blockNumber) from=\(.from) hash=\(.hash)"' 2>/dev/null)
  # raw JSON-RPC: cast cannot deserialize some pre-Bedrock OP receipts
  st=$(curl -s -X POST "$rpc" -H 'content-type: application/json' -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getTransactionReceipt\",\"params\":[\"$T\"]}" | jq -r '.result | if . then "status=\(.status) gasUsed=\(.gasUsed)" else "no-receipt" end' 2>/dev/null)
  echo -e "$expect\t$name\tchainId=$id\tblock=$blk\tcode=$match\tproxyNonce=$pn\tsignerNonce=$sn\tkeylessTx=${tx:-not-found}\t${st}"
done <<'LIST'
1 Ethereum $ETH_RPC_URL
11155111 Sepolia https://ethereum-sepolia-rpc.publicnode.com
8453 Base https://mainnet.base.org
84532 Base-Sepolia https://sepolia.base.org
42161 Arbitrum-One https://arb1.arbitrum.io/rpc
10 OP-Mainnet https://mainnet.optimism.io
4326 MegaETH https://mainnet.megaeth.com/rpc
4663 Robinhood-Chain https://rpc.mainnet.chain.robinhood.com
LIST
date -u -d @"$(cast block 22207817 -f timestamp --rpc-url https://arb1.arbitrum.io/rpc)" +"Arbitrum One Nitro genesis block 22207817: %F"
echo "Arbitrum One code at block 22207817: $(cast code $P --block 22207817 --rpc-url https://arb1.arbitrum.io/rpc | cut -c1-20)..."
# Deployment dates for chains where the keyless tx exists; genesis state where it does not.
date -u -d @"$(cast block 1986524 -f timestamp --rpc-url https://ethereum-sepolia-rpc.publicnode.com)" +"Sepolia keyless tx block 1986524: %F"
date -u -d @"$(cast block 5144 -f timestamp --rpc-url https://mainnet.base.org)" +"Base keyless tx block 5144: %F"
echo "Base Sepolia keyless tx block 1128866: $(curl -s https://base-sepolia.blockscout.com/api/v2/blocks/1128866 | jq -r .timestamp)"
date -u -d @"$(cast block 202430856 -f timestamp --rpc-url https://arb1.arbitrum.io/rpc)" +"Arbitrum One keyless tx block 202430856: %F"
date -u -d @"$(cast block 1381134 -f timestamp --rpc-url https://mainnet.optimism.io)" +"OP Mainnet keyless tx block 1381134: %F"
date -u -d @"$(cast block 0 -f timestamp --rpc-url https://mainnet.megaeth.com/rpc)" +"MegaETH genesis (block 0) timestamp: %F"
echo "MegaETH code at genesis (block 0): $(cast code $P --block 0 --rpc-url https://mainnet.megaeth.com/rpc | cut -c1-20)..."
echo "MegaETH Blockscout creation record: $(curl -s https://megaeth.blockscout.com/api/v2/addresses/$P | jq -c '{creator_address_hash, creation_transaction_hash}')"
echo "Robinhood Chain code at block 0: $(cast code $P --block 0 --rpc-url https://rpc.mainnet.chain.robinhood.com 2>&1 | head -c 120)"

Cross-Chain Check Output

Columns: expected chain id, name, reported chain id, block read, code comparison, proxy nonce, signer nonce, keyless transaction lookup, keyless transaction receipt status.

Artifact:

1   Ethereum    chainId=1   block=26306479  code=match  proxyNonce=56176    signerNonce=1   keylessTx=block=0xa2d2e3 from=0x3fab184622dc19b6109349b94811493bf2a45362 hash=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26    status=0x1 gasUsed=0x10a23
11155111    Sepolia chainId=11155111    block=12027579  code=match  proxyNonce=346103   signerNonce=1   keylessTx=block=0x1e4fdc from=0x3fab184622dc19b6109349b94811493bf2a45362 hash=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26    status=0x1 gasUsed=0x10a23
8453    Base    chainId=8453    block=53292445  code=match  proxyNonce=70372    signerNonce=1   keylessTx=block=0x1418 from=0x3fab184622dc19b6109349b94811493bf2a45362 hash=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26  status=0x1 gasUsed=0x10a23
84532   Base-Sepolia    chainId=84532   block=52261851  code=match  proxyNonce=62818    signerNonce=1   keylessTx=block=0x1139a2 from=0x3fab184622dc19b6109349b94811493bf2a45362 hash=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26    status=0x1 gasUsed=0x10a23
42161   Arbitrum-One    chainId=42161   block=519717910 code=match  proxyNonce=32642    signerNonce=1   keylessTx=block=0xc10d988 from=0x3fab184622dc19b6109349b94811493bf2a45362 hash=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26   status=0x0 gasUsed=0x186a0
10  OP-Mainnet  chainId=10  block=158887732 code=match  proxyNonce=13451    signerNonce=1   keylessTx=block=0x15130e from=0x3fab184622dc19b6109349b94811493bf2a45362 hash=0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26    status=0x1 gasUsed=0x10a23
4326    MegaETH chainId=4326    block=30577231  code=match  proxyNonce=1479 signerNonce=0   keylessTx=not-found no-receipt
4663    Robinhood-Chain chainId=4663    block=101832835 code=match  proxyNonce=28047    signerNonce=0   keylessTx=not-found no-receipt
Arbitrum One Nitro genesis block 22207817: 2022-08-31
Arbitrum One code at block 22207817: 0x7fffffffffffffffff...
Sepolia keyless tx block 1986524: 2022-09-29
Base keyless tx block 5144: 2023-06-15
Base Sepolia keyless tx block 1128866: 2023-10-23T01:53:40.000000Z
Arbitrum One keyless tx block 202430856: 2024-04-18
OP Mainnet keyless tx block 1381134: 2021-12-20
MegaETH genesis (block 0) timestamp: 2025-11-10
MegaETH code at genesis (block 0): 0x7fffffffffffffffff...
MegaETH Blockscout creation record: {"creator_address_hash":null,"creation_transaction_hash":null}
Robinhood Chain code at block 0: Error: server returned an error response: error code -32000: historical state bff31855ecf33b2db87febb9e571d57497a45d20d9

Occupied-Address Test Script

Places the runtime at the proxy address on a fresh local anvil chain, as a genesis allocation would, then publishes the keyless transaction.

Artifact:

#!/usr/bin/env bash
# What happens if the keyless tx is submitted on a chain where the proxy already exists (e.g. placed at genesis).
P=0x4e59b44847b379578588920cA78FbF26c0B4956C
S=0x3fab184622dc19b6109349b94811493bf2a45362
anvil --port 8548 --silent & AP=$!; trap 'kill $AP' EXIT
for i in $(seq 30); do cast chain-id --rpc-url http://127.0.0.1:8548 >/dev/null 2>&1 && break; sleep 1; done
export ETH_RPC_URL=http://127.0.0.1:8548
cast rpc anvil_setCode $P "$(cat "$(dirname "$0")/runtime-bytecode.hex")" >/dev/null   # simulate genesis placement
cast rpc anvil_setBalance $S 0x2386F26FC10000 >/dev/null                             # 0.01 ETH
echo "signer nonce before: $(cast nonce $S)"
cast publish "$(cat "$(dirname "$0")/creation-tx-raw.hex")" | jq -c '{transactionHash, status, gasUsed, contractAddress}'
echo "signer nonce after: $(cast nonce $S)"
echo "proxy code unchanged: $([ "$(cast code $P)" = "$(cat "$(dirname "$0")/runtime-bytecode.hex")" ] && echo yes || echo no)"

Occupied-Address Test Output

Artifact:

signer nonce before: 0
{"transactionHash":"0xeddf9e61fb9d8f5111840daef55e5fde0041f5702856532cdbb5a02998033d26","status":"0x0","gasUsed":"0x186a0","contractAddress":null}
signer nonce after: 1
proxy code unchanged: yes