Back to Home

currency

Token
0xa2e3680acaf5...75a929385463
FrontierContract #3,808Exact Bytecode MatchEdit this contract
Deployed November 12, 2015 (10 years ago)Block 530,996

A token contract deployed by Vitalik Buterin, compiled from currency.se (Serpent) in the ethereum/dapp-bin repository. Deployed days after Devcon 1 and one week

Key Facts

Deployer
Vitalik Buterin(0x1db343...fa6ee6)
Deployment Block
530,996
Deployment Date
Nov 12, 2015, 09:54 PM
Code Size
1.6 KB
Gas at Deploy
463,661
Transactions by Year
20152
20255

Description

Deployed by Vitalik Buterin on November 12, 2015 (block 530,996), this token implements the standardized currency API from the ethereum/dapp-bin repository. It has zero decimals and a fixed supply of 1,000,000 units, all held by the deployer.

The contract was long assumed to be compiled from currency.sol (Solidity), but bytecode analysis revealed it was actually compiled from currency.se - the Serpent version. Three clues gave it away: the constructor uses MSTORE8-based memory initialization instead of Solidity's free memory pointer pattern, the runtime uses Serpent's alloc() pattern (MSIZE, SWAP1, MSIZE, ADD), and two function names differ from the Solidity source (disapprove vs unapprove, isApprovedOnceFor vs isApprovedOnce). The exact compiler was identified as Serpent at commit f0b4128 (October 15, 2015), producing a byte-for-byte match of all 1,661 bytes.

The deployment came days after Devcon 1 in London, where token standardization was a major topic, and one week before Vitalik co-published EIP-20 (the ERC-20 standard) on November 19, 2015. The source code predates the standard - this contract captures the state of token design just before it was formalized.

Source Verified

SerpentExact bytecode match(1,661 bytes)
Compiler: f0b4128

Compiled from currency.se in ethereum/dapp-bin using the Serpent compiler. Initially mistaken for Solidity - the contract was actually written in Vitalik's own language.

Historian Categories

Token

Heuristic Analysis

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

Detected Type: Token
Has ERC-20-like patterns

Frontier Era

The initial release of Ethereum. A bare-bones implementation for technical users.

Block span: 01,149,999
July 30, 2015March 14, 2016

Bytecode Overview

Opcodes1,661
Unique Opcodes119
Jump Instructions63
Storage Operations23

Verified Source Available

Source verified through compiler archaeology and exact bytecode matching.

View Verification Proof
Show source code (Serpent)
data accounts[](balance, withdrawers[])

event CoinSent(from:address:indexed, value:uint256, to:address:indexed)

def init():
    self.accounts[msg.sender].balance = 1000000

def sendCoin(_value:uint256, _to:address):
    if self.accounts[msg.sender].balance >= _value and _value >= 0 and _value < 340282366920938463463374607431768211456:
        self.accounts[msg.sender].balance -= _value
        self.accounts[_to].balance += _value
        log(type=CoinSent, msg.sender, _value, _to)
        return(1:bool)
    return(0:bool)

def sendCoinFrom(_from:address, _value:uint256, _to:address):
    auth = self.accounts[_from].withdrawers[msg.sender]
    if self.accounts[_from].balance >= _value and auth >= _value && _value >= 0 and _value < 340282366920938463463374607431768211456:
        self.accounts[_from].withdrawers[msg.sender] -= _value
        self.accounts[_from].balance -= _value
        self.accounts[_to].balance += _value
        log(type=CoinSent, _from, _value, _to)
        return(1:bool)
    return(0:bool)

def const coinBalance():
    return(self.accounts[msg.sender].balance)

def const coinBalanceOf(_addr:address):
    return(self.accounts[_addr].balance)

def approve(_addr:address):
    self.accounts[msg.sender].withdrawers[_addr] = 340282366920938463463374607431768211456

def isApproved(_proxy:address):
    return(self.accounts[msg.sender].withdrawers[_proxy] > 0)

def approveOnce(_addr:address, _maxValue:uint256):
    self.accounts[msg.sender].withdrawers[_addr] += _maxValue

def isApprovedOnceFor(_target:address, _proxy:address):
    return(self.accounts[_target].withdrawers[_proxy])

def disapprove(_addr:address):
    self.accounts[msg.sender].withdrawers[_addr] = 0

External Links

currency - Ethereum History