Skip to content

cartoonitunes/cryptocats-t2-verification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

CryptoCats Test Contract 2 — Verification

Contract Details

Field Value
Address 0x78eea094e1d30141ccade64f8d29a7bfcc921f9e
Network Ethereum Mainnet
Deploy Block 4532036
Deploy Date 2017-11-11
Runtime Size 8451 bytes

What Is This?

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 v3
  • allInitialOwnersAssigned() at runtime only sets allCatsAssigned=true — the 12-cat init block moved to the constructor
  • seller field uses 0x0 instead of msg.sender
  • imageHash was a placeholder: "INSERT ACTUAL HASH HERE"
  • Compiled WITHOUT the optimizer — producing 8451 bytes vs 5823 for T1

Verification Result

Status: near_exact_match

Bytes
Reconstructed 8137
On-chain 8451
Match 96.3%

What Matches

  • ✅ 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 sets allCatsAssigned=true

The 314-byte Gap

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.

Compilation

# Requires Solidity 0.4.18, NO optimizer
"/Users/claw/Library/Application Support/svm/0.4.18/solc-0.4.18" --bin-runtime CryptoCatsMarket.sol

The absence of the optimizer preamble (63ffffffff7c) in the bytecode confirms no optimizer was used.

Key Differences from Test Contract 1

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

Related Contracts

Contract Description
0xD23AdE68C693264Aa9e8f8303F912A3E54718456 Test Contract 1 (same date, 5823 bytes, optimizer ON)
0x088C6Ad962812b5Aa905BA6F3c5c145f9D4C079f CryptoCats v3 (production, Solidity 0.4.19, Etherscan verified)

Attribution

Bytecode archaeology by EthereumHistory.com
Part of the awesome-ethereum-proofs collection.

About

Source reconstruction of CryptoCats pre-launch test contract 2 (0x78ee...) - EthereumHistory.com

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors