Back to Home

Oracle Callback Service

other
Part of The Vitalik Collection
0x6acc9a687673...27b6d37405c6
FrontierContract #1,896Exact Bytecode MatchEdit this contract
Deployed October 12, 2015 (10 years ago)Block 370,511

Requests off-chain data from a URL through an external fetcher contract and records the returned result on-chain by emitting an event.

Frontier EraVerified Source
Key Facts
Deployer
Vitalik Buterin(0x1db343...fa6ee6)
Deployment Block
370,511
Deployment Date
Oct 12, 2015, 03:41 AM
Code Size
869.0 B
Gas at Deploy
244,981
Transactions by Year
201530

Description

Written in Serpent and deployed on October 12, 2015. It bridges on-chain code to data that lives off-chain, which EVM contracts cannot access directly because every node has to re-execute a transaction and reach the same result.

The contract exposes two functions. call(fetcher, url, fetchId) takes the address of an external fetcher contract, a URL string, and a caller-supplied request id. It invokes the fetcher's get(string) method (ABI selector 693ec85e), forwarding any attached ether, and stores cbids[returnedId] = fetchId so the later response can be matched to the original request. callback(response, responseId) is invoked by the fetcher once it has the data. It reads cbids[responseId] and, if an entry exists, emits LogResponse(response, fetchId) carrying the fetched string. The caller and any off-chain listener read the result from that event.

State is a single storage array, cbids, mapping a fetcher's request id back to the caller's fetchId. The only event is LogResponse(response:string, fetchId:uint256). Before dispatching a request, call also emits LogResponse with the literal string "cow" and a fetchId of 0, a placeholder carried over from the tutorial source the contract derives from.

The request and the response run as two separate transactions: one to submit the request, and a later one from the fetcher to deliver the answer. At deployment in October 2015, Chainlink did not exist and Oraclize (later Provable) was only beginning to appear.

Source Verified

SerpentExact bytecode match(869 bytes)
Compiler: f0b4128

Serpent source (caller.se, the ethereum/pyethapp "Making a User Service" tutorial Caller) compiled with ethereum/serpent commit f0b4128 (2015-10-15) reproduces the full 869-byte creation bytecode and the 851-byte runtime exactly. runtime sha256 9642ec35587703931a8adfc7d830b0e1e0e7eeb7a9e927d4837072d6fdfbd669. The deployed callback drops the msg.sender guard shown in the wiki. Solidity, in any version, provably cannot produce this bytecode. Verified by EthereumHistory. External verification (2026-06-28): neither explorer can verify Serpent. Sourcify accepts only Solidity and Vyper and requires a solc-style semver compiler version, so it rejects serpent commit f0b4128. Etherscan accepts only solc compiler versions and returns Invalid compiler version. The byte-for-byte proof remains in the GitHub proof folder and on EthereumHistory.

Heuristic Analysis

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

Detected Type: other

Bytecode Overview

Opcodes869
Unique Opcodes94
Jump Instructions21
Storage Operations5

External Links