The transfer and allowance logic of the Devcon 2 attendee token, kept in a library
Historical Significance
Non fungible token transfer rules written more than a year before ERC-721, and put in a library so the token contract could stay a thin shell over them.
Context
Deployed in the Homestead era, in the weeks around Devcon 2 in Shanghai.
Key Facts
Description
TokenLib holds the state and the rules for the Devcon 2 attendee token: who owns which token, who is approved to move it, and the transfer, transferFrom and approve paths that check those two things. The token contract keeps no logic of its own and calls into this library, which is why the library is a separate deployment. Each token is identified by a bytes32 rather than an amount, because every attendee got a distinct one. Deployed on 19 September 2016 by 0xd3cda913deb6f67967b99d67acdfa1712c293601, the account of Piper Merriam, and recovered from pipermerriam/devcon2-token.
Source Verified
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
DAO Fork Era
The controversial fork to recover funds from The DAO hack.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Verification ProofShow source code (Solidity)
// Submitted by EthereumHistory (ethereumhistory.com)
library TokenLib {
struct Token {
string identity;
address owner;
}
function id(Token storage self) returns (bytes32) {
return sha3(self.identity);
}
function generateId(string identity) returns (bytes32) {
return sha3(identity);
}
event Transfer(address indexed _from, address indexed _to, bytes32 _value);
event Approval(address indexed _owner, address indexed _spender, bytes32 _value);
function logApproval(address _owner, address _spender, bytes32 _value) {
Approval(_owner, _spender, _value);
}
function logTransfer(address _from, address _to, bytes32 _value) {
Transfer(_from, _to, _value);
}
}External Links
Related contracts
MemberRegistry
Same deployerOwner-controlled dynamic-array member registry.
0x1f3b19...7c161aAugust 13, 2015Members
Same deployerOwner-controlled member registry with array + mapping tracking.
0xaeb2ac...a5fd37August 14, 2015MembershipRoster
Same deployerAn Ethereum Public Trust roster contract for adding, removing, and checking members.
0xf1d327...aa0455August 14, 2015KillMul
Same deployerTest/utility contract with `suicide(address)` kill switch and a `multiply2` helper.
0x3e5e1f...7c78cdAugust 14, 2015Members
Same deployerOwner-controlled member registry using sequential id + mapping storage.
0xc6810e...db4e6fAugust 14, 2015CallerPool
Same deployerThe bonded caller pool of the Ethereum Alarm Clock: callers post a bond, take turns being the designated executor, and forfeit it if they miss.
0x329219...fc3e8bSeptember 22, 2015