想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】链客,有问必答!

本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程.

写在前面

本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么

代币Token

如果不那么追求精确的定义,代币就是数字货币,比特币、以太币就是一个代币。

利用以太坊的智能合约可以轻松编写出属于自己的代币,代币可以代表任何可以交易的东西,如:积分、财产、证书等等。

因此不管是出于商业,还是学习很多人想创建一个自己的代币,先贴一个图看看创建的代币是什么样子。

今天我们就来详细讲一讲怎样创建一个这样的代币。

ERC20 Token

也许你经常看到ERC20和代币一同出现, ERC20是以太坊定义的一个代币标准。

要求我们在实现代币的时候必须要遵守的协议,如指定代币名称、总量、实现代币交易函数等,只有支持了协议才能被以太坊钱包支持。

其接口如下:

16 contract ERC20Interface {

string public constant name = "Token Name";string public constant symbol = "SYM";uint8 public constant decimals = 18;  // 18 is the most common number of decimal placesfunction 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);

}

简单说明一下:

name : 代币名称

symbol: 代币符号

decimals: 代币小数点位数,代币的最小单位, 18表示我们可以拥有 .0000000000000000001单位个代币。

totalSupply() : 发行代币总量。

balanceOf(): 查看对应账号的代币余额。

transfer(): 实现代币交易,用于给用户发送代币(从我们的账户里)。

transferFrom(): 实现代币用户之间的交易。

allowance(): 控制代币的交易,如可交易账号及资产。

approve(): 允许用户可花费的代币数。

编写代币合约代码

代币合约代码:
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 {_transfer(msg.sender, _to, _value);}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;}

}

代码的详细解读,请订阅我的小专栏。

部署

在开发测试智能合约时,MetaMask和Remix Solidity IDE是两个非常好用的工具,今天就用他们来完成部署。

安装和配置MetaMask请参考开发、部署第一个去中心化应用,不同的上本文选择了以太坊的测试网络Ropsten,如果你没有余额请点击购买buy,进入的网站可以送一些测试以太币给你,配置好之后,界面应该如下:

浏览器打开Remix Solidity IDE,复制以上源码粘贴上,在右侧选项参考如图的设置:

注意Environment和Account和MetaMask保持一致,然后选择合约TokenERC20,填入你想要的发行量,名称及代号,就可以创建合约了。

这时MetaMask会弹出一个交易确认框,点SUBMIT。待合约部署交易确认之后,复制合约地址。

打开Metamask界面,切换到TOKENS,点添加合约,出现如下对话框:

填入刚刚复制的地址,点ADD,这时你就可以看到你创建的代币了,如图:

哈哈,你已经完成了代币的创建和部署(正式网络和测试网络部署方法一样),可以在Etherscan查询到我们刚刚部署的代币。可以用它进行ICO了,从此走上人生巅峰(玩笑话,不鼓励大家发行无意义的代币)。

代币交易

由于MetaMask插件没有提供代币交易功能,同时考虑到很多人并没有以太坊钱包或是被以太坊钱包网络同步问题折磨,今天我用网页钱包来讲解代币交易。

1.进入网页钱包地址, 第一次进入有一些安全提示需要用户确认。

2.进入之后,按照下图进行设置:

3.连接上之后,如图

需要添加代币,填入代币合约地址。

4.进行代币转账交易

在接下来的交易确认也,点击确认即可。

5.交易完成后,可以看到MetaMask中代币余额减少了,如图:

代币交易是不是很简单,只要明白了交易流程,使用其他的钱包也是一样的道理。

我是【链客】六级算力等级《守护平井一夫》 为各位解答区块链技术问题,欢迎加入。

链客区块链技术问答社区,有问必答!!

国内域名:www.liankexing.com 复制网址至浏览器即可进入社区

国际域名:www.lk.wiki QQ群: 725414372

教你怎么去创建一个代币!相关推荐

  1. 区块链DApp从零开始学 (二) | 超详细 DApp创建 | 发行代币token | 宠物领养

    初学记录 · 欢迎交流 区块链DApp从零开始学 (一) | DApp抓包 区块链DApp从零开始学 (二) | 超详细 DApp创建 | 发行代币token |宠物领养 区块链知识 (一) | 实例 ...

  2. 编写一个程序,将用分钟表示的时间转换成以 小时和分钟表示的时间。使用#define来创建一个代 表60的符号常量。

    编写一个程序,将用分钟表示的时间转换成以 小时和分钟表示的时间.使用#define来创建一个代 表60的符号常量. /**编写一个程序,将用分钟表示的时间转换成以 小时和分钟表示的时间.使用#defi ...

  3. 手牵手教你使用ngComponentOutlet创建一个支持自定义插入子组件的angular公共搜索表单组件

    目录 雏形 主体 逻辑完善 使用公共表单组件 总结 最后 这几天笔者所接手的angular项目需要重新封装一个公共表单组件,由于之前封装的表单组件自由度不够,每出现一种新的类型的特殊输入框就需要在公共 ...

  4. 手把手教你在Vivado创建一个RAM的IP核并使用ILA工具验证

    文章目录 一.RAM实验背景知识 RAM的定义 RAM的分类 实验设计 二.创建一个新的工程 三.创建RAM IP核 四.编写代码 五.创建ILA IP核并生成比特流文件 六.将程序下入芯片,并通过I ...

  5. ps如何把自己的图与样机结合_教你如何自己创建一个ps贴图样机!

    大家都知道,现在是一个贴图泛滥的时代,贴图样机会让自己的作品看着更加美观.可是有时候却苦于找不到合适的素材,那么今天,我就教大家如何创建一个简单的ps贴图样机,来应用到自己的作品. 设计素材:以上传 ...

  6. c#如何使用反射去创建一个委托_【自学C#】|| 笔记 37 创建线程

    一.Thread:线程及与线程有关的类 在 C# 语言中线程(Thread)是包含在进程中的,它位于 System.Threading 命名空间中.     与线程有关的类同样也都在 System.T ...

  7. 自己去创建一个编程语言吧(3)

    上一节讲了flex,今天咱们讲bison flex是分析词法的,例如你的关键字.操作符号等,bison是分析语法的,就是你定义的语法方式,也就是说,把你定义的关键字.符号这些东西按照一定的格式排列后, ...

  8. 你会去创建一个线程去处理压缩日志并删除吗?

    代码如下 package weaver.general;;import java.io.File; import java.io.FileInputStream; import java.io.Fil ...

  9. 一步步教你创建自己的数字货币(代币)进行ICO

    最新内容会更新在主站深入浅出区块链社区 原文链接:创建自己的数字货币(ERC20 代币)进行 ICO 本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太 ...

最新文章

  1. seaborn可视化条形图并按照降序排序条形图进行可视化Sort Bars in Barplot in Descending Order in Python
  2. redis缓存穿透、缓存击穿、缓存雪崩概念及解决方案
  3. html5如何传递值,如何将var中的值传递到另一个var
  4. python与正则表达式(part8)--compile对象及match对象的属性方法
  5. SAP CRM WebClient UI根据扩展字段搜索出结果的实现原理
  6. 武汉大学计算机学院的李明,李明副研究员
  7. oracle中orand使用,Postgres兼容Oracle研究——orafce调研
  8. js设计模式之Constructor(构造器)
  9. 【金融申请评分卡】数据准备 - 造衍生变量
  10. python微控制器编程从零开始 pdf_Python极客项目编程_(美)Mahesh Venkitachalam.pdf
  11. 用access建立一个试题库_access试题库_答案
  12. coreseek mysql_coreseek,php,mysql全文检索部署(一)-阿里云开发者社区
  13. [计算机数值分析]拉格朗日插值公式
  14. 华为 鸿蒙出处,华为商标名“鸿蒙”原来出自《山海经》,网友直呼:“太燃了”...
  15. win7如何进入修复计算机,win7电脑故障怎么进入安全模式修复
  16. 百度招聘Android客服端(1)
  17. 6款好用的在线思维导图工具推荐
  18. 2021B站1024程序员节 网络攻防CTF
  19. 手机停机照样可以免费无限量上网
  20. STM32 的图形加速器 DMA2D

热门文章

  1. ubuntu 16.04 无法连接wifi
  2. python计算多边形的面积并保留两位小数_计算任意多边形面积的Python实现
  3. Mysql语句DUPLICATE配合IF使用当,插入/更新值大于当前值,更新小于则不更新
  4. 论文阅读学习 - 深度学习网络模型分析对比
  5. 三方协议的服务器,电子口岸电子支付签定三方协议是怎么操作的
  6. 英国脱欧要拍电视剧了,卷福将是男主角
  7. linux命令行连接蓝牙键盘
  8. 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享
  9. js递归生成树结构数据
  10. 7年老Android一次操蛋的面试经历,讲的明明白白!