| Field | Value |
|---|---|
| Address | 0x78eea094e1d30141ccade64f8d29a7bfcc921f9e |
| Network | Ethereum Mainnet |
| Deploy Block | 4532036 |
| Deploy Date | 2017-11-11 |
| Runtime Size | 8451 bytes |
This is the second pre-launch test contract for CryptoCats, deployed the same day as Test Contract 1 but a few hours later (block 4532036 vs 4530388).
The key evolutionary step between T1 and T2:
- Struct field order changed to
{bool isForSale; uint catIndex; address seller; string catName;}(v3-style) getCatDetail()return order changed to(bool, uint, address, string)— matching final v3allInitialOwnersAssigned()at runtime only setsallCatsAssigned=true— the 12-cat init block moved to the constructorsellerfield uses0x0instead ofmsg.senderimageHashwas a placeholder:"INSERT ACTUAL HASH HERE"- Compiled WITHOUT the optimizer — producing 8451 bytes vs 5823 for T1
Status: near_exact_match
| Bytes | |
|---|---|
| Reconstructed | 8137 |
| On-chain | 8451 |
| Match | 96.3% |
- ✅ All function selectors (identical)
- ✅ All function logic (identical structure)
- ✅ Struct layout confirmed:
{bool isForSale; uint catIndex; address seller; string catName;} - ✅
getCatDetail()return order confirmed:(bool isForSale, uint _catIndex, address seller, string catName) - ✅
allInitialOwnersAssigned()runtime path: only setsallCatsAssigned=true
The 314-byte difference is dead code from the constructor-only internal cat initialization block. At runtime, allInitialOwnersAssigned() only sets allCatsAssigned=true — but the bytecode still contains the full 12-cat initialization logic as an unreachable code region preserved from the constructor path.
This is the same root cause as Test Contract 1 (108-byte gap), but larger because the optimizer is disabled. Without the optimizer, all that inline struct-assignment code is preserved verbatim rather than being compacted.
# Requires Solidity 0.4.18, NO optimizer
"/Users/claw/Library/Application Support/svm/0.4.18/solc-0.4.18" --bin-runtime CryptoCatsMarket.solThe absence of the optimizer preamble (63ffffffff7c) in the bytecode confirms no optimizer was used.
| Feature | T1 (0xD23A) | T2 (0x78ee) |
|---|---|---|
| Optimizer | ON | OFF |
| Runtime size | 5823 bytes | 8451 bytes |
| Struct field order | {bool, address, string, uint} | {bool, uint, address, string} |
| getCatDetail returns | (uint, bool, address, string) | (bool, uint, address, string) |
| seller in allInitialOwnersAssigned | msg.sender | 0x0 |
| Cat init at runtime | Yes (in allInitialOwnersAssigned) | No (only allCatsAssigned=true) |
| imageHash | Real SHA-256 hash | "INSERT ACTUAL HASH HERE" |
| Dead code gap | 108 bytes | 314 bytes |
| Contract | Description |
|---|---|
0xD23AdE68C693264Aa9e8f8303F912A3E54718456 |
Test Contract 1 (same date, 5823 bytes, optimizer ON) |
0x088C6Ad962812b5Aa905BA6F3c5c145f9D4C079f |
CryptoCats v3 (production, Solidity 0.4.19, Etherscan verified) |
Bytecode archaeology by EthereumHistory.com
Part of the awesome-ethereum-proofs collection.