Skip to content

cartoonitunes/globalregistrar-verification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GlobalRegistrar — Bytecode Verification

Byte-for-byte verification of the official Ethereum GlobalRegistrar contract, deployed twice by the same developer in August 2015.

Deployments

Rank Address Block Timestamp
#19 0x1392a4f1642c22bc6e3380bb156193e790770c35 50,466 2015-08-13
#24 0xf436ceba3850bd3b0e853b018212d6fc2b6267d0 51,245 2015-08-22

Both deployed by 0x3d0768da09ce77d25e2d998e6a7b6ed4b9116c2d using go-ethereum's built-in --registrar deployment, which embedded the pre-compiled bytecode directly in the client.

Verification

The GlobalRegistrar bytecode was pre-compiled and embedded in go-ethereum's official codebase:

  • File: common/registrar/contracts.go
  • Commit: 83ee39448e (June 23, 2015)
  • Constant: GlobalRegistrarCode

The source code is GlobalRegistrarSrc in the same file and commit.

This is an author-published verification — the Ethereum Foundation / go-ethereum team authored and published both the source and compiled bytecode together in the official client. The bytecode is canonical.

Bytecode sizes

  • Creation input: 2894 bytes (0x610b40... — 14-byte non-standard init code + 2880-byte runtime)
  • Runtime: 2880 bytes
  • Init code: 14 bytes (610b408061000e6000396000f300)

Source Code

See GlobalRegistrar.sol — exact source from go-ethereum commit 83ee39448e.

Key note: register(bytes32) is a temporary alias for subRegistrar(bytes32) lookup (the real subRegistrar() getter is commented out with a // TODO: bring in on next iteration note). This explains why the contract has both reserve(bytes32) and register(bytes32) as separate selectors.

Functions (13 total)

Selector Function
01984892 name(address)
02571be3 owner(bytes32)
2dff6941 content(bytes32)
3b3b57de addr(bytes32)
432ced04 reserve(bytes32)
5a3a05bd subRegistrar(bytes32)
79ce9fac transfer(bytes32,address)
89a69c0e setSubRegistrar(bytes32,address)
b9f37c86 Registrar() — auto-getter for address public Registrar
be99a980 setAddress(bytes32,address,bool)
c3d014d6 setContent(bytes32,bytes32)
d93e7573 disown(bytes32)
e1fa8e84 register(bytes32) — temp alias returning subRegistrar address

Reproduce

python3 verify.py

Fetches creation TX inputs for both deployments and confirms runtime matches GlobalRegistrarCode from go-ethereum commit 83ee39448e.

Part of

About

Bytecode verification for the official Ethereum GlobalRegistrar (go-ethereum embedded contract, 2015)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors