Bytecode verified via sibling
This contract shares identical runtime bytecode with a verified contract (0x55e12fcc...) which has been verified through compiler archaeology.
A second argument free GSA token, deployed seven minutes after the first.
Historical Significance
No published source for this contract exists anywhere. The Solidity here was rebuilt from the deployed bytecode alone, starting from the storage layout, and it now reproduces five separate deployments byte for byte, including their creation code and constructor arguments. That breadth is what makes the reconstruction trustworthy. A source that matches a single contract can be a coincidence of size, but the same file matching five contracts under three different build settings (v0.3.2 optimised, v0.3.5 optimised and v0.3.5 unoptimised) is not.
Context
The five went out within three hours on 12 July 2016 from three addresses that plainly belong to one group working through a token launch. The function bodies are the ConsenSys StandardToken implementations, but the state variables are declared in a different order, with totalSupply first and name, symbol and decimals after it. That ordering is what the on chain storage layout revealed, and it is what made the reconstruction possible at all.
Token Information
Key Facts
Source Verified
Exact runtime + creation bytecode match. Runtime 1175 bytes, creation 1631 bytes. Compiled with soljson-v0.3.5+commit.5f97274a, optimizer ON.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Homestead Era
The first planned hard fork. Removed the canary contract, adjusted gas costs.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Verification ProofShow source code (Solidity)
// Candidate reconstruction for the GSA token family (#37-42).
// Bodies are the ConsenSys StandardToken implementations; the state-variable
// order is taken from the on-chain storage layout:
// totalSupply(0) name(1) symbol(2) decimals(3) balances(4) allowed(5)
contract Token {
function totalSupply() constant returns (uint256 supply) {}
function balanceOf(address _owner) constant returns (uint256 balance) {}
function transfer(address _to, uint256 _value) returns (bool success) {}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
function approve(address _spender, uint256 _value) returns (bool success) {}
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract GSAToken is Token {
uint256 public totalSupply;
string public name;
string public symbol;
uint8 public decimals;
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
function GSAToken(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) {
balances[msg.sender] = _initialAmount;
totalSupply = _initialAmount;
name = _tokenName;
decimals = _decimalUnits;
symbol = _tokenSymbol;
}
function transfer(address _to, uint256 _value) returns (bool success) {
if (balances[msg.sender] >= _value && _value > 0) {
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
} else { return false; }
}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
balances[_to] += _value;
balances[_from] -= _value;
allowed[_from][msg.sender] -= _value;
Transfer(_from, _to, _value);
return true;
} else { return false; }
}
function balanceOf(address _owner) constant returns (uint256 balance) {
return balances[_owner];
}
function approve(address _spender, uint256 _value) returns (bool success) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
return allowed[_owner][_spender];
}
}External Links
Related contracts
token
Same eraBare Homestead-era token (Mar 14 2016): public balanceOf mapping + a single unchecked transfer firing the standard Transfer event.
0xc77f06...494c69March 14, 2016DinastyCoinToken
Same eraHomestead-era transfer-only token, DinastyCoinToken (DCT), fixed supply 200000000 and 6 decimals.
0x3693fd...c11466March 14, 2016token
Same eraMinimal Homestead-era token shell (Mar 14 2016): just a public balanceOf mapping and its compiler-generated getter, with no other functions.
0x38e1da...41a81aMarch 14, 2016CampusCoin
Same eraByte-identical deployment of: Standard ethereum.org tutorial token (Homestead, Mar 2016): name/symbol/decimals metadata, a public balanceOf mapping and an overf
0x00f0b1...e6fcd2March 16, 2016Retch Mining Futures
Same eraBuy/sell token deployed by an early Ethermine miner 7 days after the Homestead fork, still active 10 years later.
0x9c2351...83e874March 21, 2016NetsCoin
Same eraThe ethereum.org 'advanced' MyToken (Homestead, Mar 2016): an issuer-minted token with mintToken, freezeAccount/FrozenFunds and the standard Transfer event.
0x1bf963...c9caabMarch 21, 2016