推荐【深入浅出区块链社区】,作者有篇文章 如何创建自己的以太坊 ERC-20 代币写的很好了,这里结合我自己实践的过程,做一些补充。
这篇文章也不错,可以参考下。
代码
pragma solidity ^0.4.16;interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }contract TokenERC20 {string public name;string public symbol;uint8 public decimals = 18; // 18 是建议的默认值uint256 public totalSupply;mapping (address => uint256) public balanceOf; //mapping (address => mapping (address => uint256)) public allowance;event Transfer(address indexed from, address indexed to, uint256 value);event Burn(address indexed from, uint256 value);function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {totalSupply = initialSupply * 10 ** uint256(decimals);balanceOf[msg.sender] = totalSupply;name = tokenName;symbol = tokenSymbol;}function _transfer(address _from, address _to, uint _value) internal {require(_to != 0x0);require(balanceOf[_from] >= _value);require(balanceOf[_to] + _value > balanceOf[_to]);uint previousBalances = balanceOf[_from] + balanceOf[_to];balanceOf[_from] -= _value;balanceOf[_to] += _value;Transfer(_from, _to, _value);assert(balanceOf[_from] + balanceOf[_to] == previousBalances);}function transfer(address _to, uint256 _value) public returns (bool) {_transfer(msg.sender, _to, _value);return true;}function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {require(_value <= allowance[_from][msg.sender]); // Check allowanceallowance[_from][msg.sender] -= _value;_transfer(_from, _to, _value);return true;}function approve(address _spender, uint256 _value) publicreturns (bool success) {allowance[msg.sender][_spender] = _value;return true;}function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {tokenRecipient spender = tokenRecipient(_spender);if (approve(_spender, _value)) {spender.receiveApproval(msg.sender, _value, this, _extraData);return true;}}function burn(uint256 _value) public returns (bool success) {require(balanceOf[msg.sender] >= _value);balanceOf[msg.sender] -= _value;totalSupply -= _value;Burn(msg.sender, _value);return true;}function burnFrom(address _from, uint256 _value) public returns (bool success) {require(balanceOf[_from] >= _value);require(_value <= allowance[_from][msg.sender]);balanceOf[_from] -= _value;allowance[_from][msg.sender] -= _value;totalSupply -= _value;Burn(_from, _value);return true;}}
编译
IDE 使用 Remix,是在线的,但是加载可能有点慢。这里有个插件功能,可以添加你想要的功能,比如
SOLIDITY COMPILER 和 DEPLOY & RUN TRANSACTIONS。

合约代码从文章中直接复制进去就可以,然后选择编译版本 0.4.16,选择合约文件,我这里是 MyToken.sol 然后编译,这里要等一些时间。
部署

我这里的地址是自己选的,用的是 Rinkeby 网络,你可以从 Rinkeby 水龙头 获取免费的 ETH 进行测试。建议用 Twitter 发博文,该博文只要包含你的地址就行了,然后复制链接粘贴进去,就可以收到 3 个 ETH 了。

然后填写代币的数量我这里是 4000 个,代币的名称我这里是 MyToken,代币符号我这里是 MT。

生成了一个合约号:0x7012F0D454D47facec937c9f2a82a51b6DBDC0e6
MetaMask 中添加代币
添加上面生成的合约号,代币符号,小数点位数就可以在列表中看到相关币的资产了。



交易
我用的是这个网站的提供的网络,你可以选择上面一样的节点进行测试,我这里选 Rinkeby。
