Back to Home

Augur REP Crowdsale

Crowdsale
0xe28e72fcf786...bbfaebd63bcc
FrontierContract #262Exact Bytecode MatchEdit this contract
Deployed August 15, 2015 (10 years ago)Block 88,090

The ETH crowdsale contract for Augur REP token sale, August 2015. Contributors called buyRep() to fund Ethereum's first major dApp.

Key Facts

Deployment Block
88,090
Deployment Date
Aug 15, 2015, 01:34 AM
Code Size
905.0 B
Gas at Deploy
288,889
Transactions by Year
2015582
20179
20223
202621

Description

This contract collected ETH contributions during the Augur crowdsale, which ran from approximately August 17 to October 1, 2015. Augur, a decentralized prediction market platform, was the first decentralized application to conduct a crowdsale on the Ethereum blockchain after Ethereum's own genesis sale. The 45-day sale raised over $5.2 million, placing it among the top 25 most successful crowdfunding campaigns of all time at that point.

Augur was co-founded by Joey Krug and Jack Peterson under the auspices of the Forecast Foundation. The project aimed to create a decentralized prediction market where users could create and trade shares in the outcome of real-world events, with a reputation token (REP) used to incentivize honest reporting of outcomes.

The crowdsale contract was deployed at block 88,090 on August 15, 2015 — just 15 days after Ethereum's mainnet launch on July 30, 2015. This makes it one of the earliest smart contracts on Ethereum with significant real-world economic activity. Contributors received REP tokens, which were initially tracked in a Serpent-based token contract (0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5) before being migrated to Solidity in 2017.

Coinbase selected Augur as one of its five most exciting Bitcoin/blockchain projects in their 2015 trends report. The project went on to deploy its v1 mainnet platform in July 2018 and v2 in July 2020, making it one of the longest-running Ethereum projects from the genesis era.

Source Verified

SerpentExact bytecode match(905 bytes)
Compiler: 6ace8a6

Compiled with Serpent @ commit 6ace8a6 (August 2015). Two non-obvious source details required for exact match: (1) buyRep() uses an if/else structure on the block.number < endBlock check — not a trailing return(0). This generates a PUSH2+JUMP trampoline between the true and false branches. (2) getAmountSent() compares as `address == self.funders[i].addr` with the parameter on the LEFT side of ==. Serpent evaluates the left operand first, so reversing the order changes the bytecode. Critical discovery: the Serpent (lll code 0) wrapper appends 4 bytes of init-code epilogue (JUMPDEST PUSH1(0) RETURN) after the runtime in the creation bytecode. These bytes are NOT deployed — the CODECOPY in the init section explicitly copies only 856 bytes. Runtime must be extracted using the CODECOPY size field, not by bytecode scanning.

Historian Categories

Crowdsale / ICO

Heuristic Analysis

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

Detected Type: Crowdsale

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

Opcodes905
Unique Opcodes95
Jump Instructions41
Storage Operations31

Verified Source Available

Source verified through compiler archaeology and exact bytecode matching.

View Verification Proof
Show source code (Serpent)
data funders[](addr, amt, blockNum)
data funderNum
data addrToIndex[]
data wallet
data endBlock

def init():
    self.wallet = 0xa04fc9bd2be8bcc6875d9ebb964e8f858bcc1b4f
    self.endBlock = 432015

def buyRep():
    if msg.value == 0:
        return(0)
    if block.number < self.endBlock:
        send(self.wallet, msg.value)
        self.funders[self.funderNum].amt = msg.value
        self.funders[self.funderNum].blockNum = block.number
        self.funders[self.funderNum].addr = tx.origin
        self.addrToIndex[tx.origin] = self.funderNum
        self.funderNum += 1
        return(1)
    else:
        return(0)

def getAmountSent(address):
    amount = 0
    i = 0
    while i < self.funderNum:
        if address == self.funders[i].addr:
            amount += self.funders[i].amt
        i += 1
    return(amount)

def getBlockNumSent(address):
    return(self.funders[self.addrToIndex[address]].blockNum)

def getFunderNum():
    return(self.funderNum)

def getAmtByIndex(index):
    return(self.funders[index].amt)

def getAddrByIndex(index):
    return(self.funders[index].addr)

def getBlockNumByIndex(index):
    return(self.funders[index].blockNum)

def addrToFunder(address):
    return(self.addrToIndex[address])

def getFundsRaised():
    return(self.wallet.balance)

External Links