Twenty five indivisible units standing for kilowatt hours of wind generation.
Historical Significance
The central minter is the tutorial's answer to what a currency is for, and it is a candid one: a named issuer holds the opening supply, can create more units at will, and can freeze any account's ability to send. Nothing about that is hidden or revocable. Tokens of this shape are the reason later standards separated the ledger from the policy that governs it, and the reason a reader of a token contract learns to look for who can mint before anything else.
Context
Deployed in February 2016, in the closing weeks of the Frontier era.
Token Information
Key Facts
Description
The name and ticker refer to wind generated kilowatt hours, and the supply is twenty five indivisible units. The issuer named at deployment holds them all and is the only account that can mint further units or freeze an address, after which transfers from it are rejected. The account that deployed the contract keeps no balance and no privileges. Holders have no approval or allowance mechanism.
Source Verified
Historian Categories
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
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)
contract MyToken {
function transfer(address _to, uint256 _value) {
if (balanceOf[msg.sender] < _value || balanceOf[_to] + _value < balanceOf[_to] || frozenAccount[msg.sender]) throw;
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
Transfer(msg.sender, _to, _value);
}
function mintToken(address target, uint256 mintedAmount) {
if (msg.sender != issuer) throw;
balanceOf[target] += mintedAmount;
Transfer(0, target, mintedAmount);
}
function freezeAccount(address target, bool freeze) {
if (msg.sender != issuer) throw;
frozenAccount[target] = freeze;
FrozenFunds(target, freeze);
}
string public name;
string public symbol;
uint8 public decimals;
address public issuer;
mapping (address => uint256) public balanceOf;
mapping (address => bool) public frozenAccount;
event Transfer(address indexed from, address indexed to, uint256 value);
event FrozenFunds(address target, bool frozen);
function MyToken(uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol, address centralMinter) {
if (initialSupply == 0) initialSupply = 1000000;
if (centralMinter == 0) centralMinter = msg.sender;
issuer = centralMinter;
balanceOf[centralMinter] = initialSupply;
name = tokenName;
symbol = tokenSymbol;
decimals = decimalUnits;
}
}External Links
Related contracts
SimpleAuction
Same deployerThe Simple Open Auction from the Solidity documentation, opened for 1000 seconds with the deployer as beneficiary.
0xa46f38...626d7dDecember 27, 2015StateMachine
Same deployerThe State Machine example from the Solidity documentation's common patterns page, deployed as written with its empty function bodies.
0xd7ee2f...125b00December 27, 2015myKwh
Same deployerIdentical-runtime sibling. The ethereum.org 'advanced' MyToken (Homestead, Mar 2016): an issuer-minted token with mintToken, freezeAccount/FrozenFunds and the s
0x3cf9b4...9626c9February 10, 2016token
Same eraAn early ERC-20-like token deployed in Ethereum's first week, built directly from the example in the official Ethereum Frontier Guide documentation.
0x8374f5...46609aAugust 7, 2015token
Same eraA second deployment of the FirstCoin tutorial token by the same creator, 11 blocks after the original — both derived from the official Ethereum Frontier Guide e
0x3b4446...295f52August 7, 2015Contract 0xd958b5...ec4c9f
Same eraEthereum.org tutorial Coin contract deployed on Frontier day 1. Contains a bug: balance(address) ignores its argument and returns msg.sender balance.
0xd958b5...ec4c9fAugust 7, 2015