Back to Home

adStorer

other
Part of The Vitalik Collection
0xaf0334bf30c4...cdc712be8b9e
FrontierContract #2,312Exact Bytecode MatchEdit this contract
Deployed October 20, 2015 (10 years ago)Block 411,110

Vitalik's 2015 ad-auction sandbox. Spawned 8 child auctions across 4 open-bid and 4 sealed-bid mechanisms.

Frontier EraVerified Source

Historical Significance

Vitalik Buterin's personal experiment in on-chain ad auctions, deployed 2015-10-20 during the Frontier era. Among the earliest factory-pattern contracts on Ethereum mainnet: the constructor spawns 8 child auction contracts via CREATE, one per ad slot, splitting them across 4 OnePhaseAuction (open-bid) and 4 TwoPhaseAuction (commit-reveal sealed-bid) instances. The eight slots cover all four classical auction designs in both open and sealed forms: non-cumulative winner-pays, cumulative winner-pays, non-cumulative all-pay, cumulative all-pay (open variants), and first-price, second-price, all-pay, all-pay-second-price (sealed variants). It is one of the first multi-contract factory dApps on mainnet and likely the first live commit-reveal sealed-bid auction system on Ethereum. The system worked end to end: bids were committed, revealed, and finalized through the ping-based clean-up loop. The only two addresses that ever interacted with it were both Vitalik's, bidding against himself with photographs of himself and Heiko Hees as test ad payloads.

Context

Deployed at block 411,110 on 2015-10-20 06:58:40 UTC by Vitalik Buterin from 0x1db3439a222c519ab44bb1144fc28167b4fa6ee6. Five minutes after the deployment, a throwaway wallet at 0xce7fb4c38949d7c09bd95197c3981ec8bb0638e5 sent eight initialize transactions in blocks 411,117 through 411,121, spawning the eight child auction contracts. That throwaway wallet's private key is hard-coded in dapp-bin's initialize.py and was never used again, it is now empty. Auction parameters were the short test profile from the source comment: 240-second hash submission, 240-second reveal, 240-second base duration, 120-second bump, 50 millis minimum increment, 10 millis subsidy. The eight children were each handed one slot index. Slot 0 (one-phase, non-cumulative, winner pays): 0x3d9e942f183a7e564dd27479081f745a4f081f28. Slot 1 (one-phase, cumulative, winner pays): 0x31e684ad5c33b741b4043bb28ece3b0c1bf9e4d4. Slot 2 (one-phase, non-cumulative, all-pay): 0xb8aa37f4f99018fddccc85ba0c95e6cfe7f3f8b6. Slot 3 (one-phase, cumulative, all-pay): 0x859f5bb20aa1e4e44efddf1d45ecb40490374156. Slot 4 (two-phase, first price): 0x90786bf95df3f62c774695b166e6adfc8a0d18a5. Slot 5 (two-phase, second price): 0xb1247665ae0cbba65343cb7382d29b077ec47927. Slot 6 (two-phase, all-pay): 0x848c87d50533d4b9e5169519335e862a1c917d57. Slot 7 (two-phase, all-pay second price): 0xff54217f20ab88d6a982a89b8d2a0410af5ef4a7. Between block 422,172 (Oct 22) and 442,864 (Oct 26), Vitalik ran roughly 250 test transactions across the slots, bidding against himself from his old wallet 0x1db3439a and his current vitalik.eth address 0xd8da6bf26964af9d7eed9e03e53415d37aa96045. The advertised URLs were http://vitalik.ca/files/me.jpg (a self-portrait) and http://vitalik.ca/files/heiko.jpg (Heiko Hees of Brainbot). No other Ethereum address ever bid. Source code was committed to ethereum/dapp-bin in commit cab4374 on 2015-10-24, alongside a React/web3 frontend with paged status displays for each slot. The next commit (40b8c07, 2015-10-25) carries the message 'Looks like the ether_ad dapp (mostly) works!'. The work appears to have been prep for DevCon 1, which ran 2015-11-09 through 11-13 in London, three weeks after the deployment. Ethereum mainnet was less than three months old, Frontier was still tagged alpha, and ETH traded near 1 USD. Compiled with solc v0.1.1+commit.6ff4cd6 (the very first tagged solc release, August 2015), optimizer on. Exact byte-for-byte match against the on-chain creation bytecode at block 411,110.

Key Facts
Deployer
Vitalik Buterin(0x1db343...fa6ee6)
Deployment Block
411,110
Deployment Date
Oct 20, 2015, 06:58 AM
Code Size
8.5 KB
Gas at Deploy
2,340,546
Transactions by Year
20158
20241

Description

An early Ethereum ad auction system deployed by Vitalik Buterin in October 2015, part of the ether_ad dapp from ethereum/dapp-bin. The adStorer contract manages 8 auction slots (mix of OnePhaseAuction and TwoPhaseAuction contracts). Winners of each auction can store a URL and address. The adStorer was initialized by deploying and linking the individual auction contracts.

Source: ethereum/dapp-bin ether_ad/adStorer.sol (commits 46b9554 through 40b8c07b, Oct-Nov 2015). The exact intermediate version deployed was not committed to the public repo. All 6 function selectors verified against the dapp-bin source.

Source Verified

SolidityExact bytecode match(8,752 bytes)
Compiler: v0.1.1+

Source: ethereum/dapp-bin@cab4374:ether_ad/ (one_phase_auction.sol + two_phase_auction.sol + adStorer.sol). Compiled with soljson-v0.1.1+commit.6ff4cd6 optimizer ON. The output is a byte-for-byte match against the on-chain creation bytecode (8752 bytes, tx input of 0x2c09efb1) and against the runtime returned by eth_getCode. v0.1.1 was the first tagged solc release (August 2015), still in production use when Vitalik deployed this in October 2015. Every later compiler from v0.1.4 through v0.2.0 produces a different output for the same source. Sourcify cannot verify this contract: the oldest compiler version it supports is v0.1.7. Submission to /server/v2/verify with compilerVersion=0.1.1+commit.6ff4cd6f was rejected with customCode unsupported_compiler_version (verificationId 969ec1a0-e6f6-455a-8feb-ad9237721d5e on 2026-05-13). Submitting the same standard-json with compilerVersion=0.1.7+commit.b4e666cc was accepted but returned no_match because v0.1.7 emits different bytecode. Independent reproduction proof lives at https://github.com/cartoonitunes/adstorer-verification: running verify.js compiles the bundled source with soljson-v0.1.1+commit.6ff4cd6.js and asserts the 8752-byte exact match.

Heuristic Analysis

The following characteristics were detected through bytecode analysis and may not be accurate.

Detected Type: other

Bytecode Overview

Opcodes8,752
Unique Opcodes234
Jump Instructions505
Storage Operations313

External Links