主页 > imtoken最新安卓版本下载 > Solidity 创建自己的数字货币(ERC20 代币)
Solidity 创建自己的数字货币(ERC20 代币)
Solidity 创建自己的数字货币(ERC20 代币)
本文从技术角度详细介绍了如何基于以太坊ERC20创建代币的过程。
合约地址:
p>
0xe70c8efb6e4899974a622e6a37f27f07247e38a4
以太坊测试网浏览器查看合约详情
文章目录
简介
本文中描述的代币是使用以太坊智能合约创建的。
需要知识系统:
令牌
如果不追求精确的定义,代币就是数字货币,比特币和以太坊都是代币。货币。
使用以太坊的智能合约,你可以轻松组成自己的代币,代币可以代表任何可以交易的东西,比如积分、财产、证书等。
所以不管是商业还是学习,很多人都想自己创建token,先发张图看看创建的token是什么样子的。
ERC20 代币
也许你经常看到ERC20和代币一起出现,ERC20是以太坊定义的代币标准。
我们在实现代币时必须遵守的合约,比如指定代币名称、总量、实现代币交易功能等,只有在合约支持的情况下,以太坊钱包才能支持。
套接字如下:
contract ERC20Interface {
string public constant name = "Token Name";
string public constant symbol = "LYU";
uint8 public constant decimals = 18;
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
名称说明
名字
令牌名称
符号
代币符号
小数
令牌小数点,令牌的最小单位,18表示我们可以有0.0000000000000000001个令牌单位。
totalSupply()
已发行代币总数。
balanceOf()
查看对应账户的代币余额。
转移()
实现一个代币汇款交易,将代币发送给用户(从我们的账户)。
transferFrom()
对于可以将令牌从我们的帐户(参数 from)发送给另一个用户(参数 to)的授权用户。
津贴()
返回用于授权的令牌数。
批准()
授权用户可以代表我们花费的代币数量。
代码代币合约
pragma solidity 0.4.16;
interface tokenRecipient {
function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external;
}
contract TokenERC20{
string public name = "LYU Name";
string public symbol = "LYU";
uint8 public decimals = 18; // 18 is the most common number of decimal places
uint256 public totalSupply=10000000000;
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 allowance
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public
returns (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;
}
}
部署
在开发和测试智能合约时erc20代币是什么意思,MetaMask 和 Remix Solidity IDE 是当今用于部署的两个出色工具。
1、要安装和配置 MetaMask,请参阅开发和部署第一个去中心化应用程序。上篇文章选择了以太坊的测试网络Ropsten。如果您没有余额,请点击下单购买,您进入的网站可以向您发送一些测试以太币。配置完成后界面如下:
2.在浏览器Solidity IDE中打开Remix,复制粘贴以上源码,参考选项左侧的设置:
3.打开Metamask界面,切换到TOKENS,点击Add Contract,会出现如下对话框:
填写刚才复制的地址,点击ADD,就可以看到自己创建的token了,如图:
说明:您已完成代币的创建和部署
将你手中的代币分发给其他用户;
代币交易
由于 MetaMask 插件不提供代币交易功能,并且考虑到很多人没有以太坊钱包或者被以太坊覆盖,网络同步的问题一蹶不振。今天用网页钱包来讲解代币交易。
1.输入网页的钱包地址,有一些安全提示,用户第一次进入时需要确认。
2.进入后按照右图设置:
3.连接后,如图
您需要添加代币并填写代币合约地址。
4.进行代币转账交易
在下一次交易确认中,点击确认。
5.交易完成后,可以看到MetaMask中的代币余额减少了。
代币交易是不是很简单,只要了解交易流程erc20代币是什么意思,使用其他钱包也是如此。