主页 > imtoken钱包下载注册教程 > 【区块链科普】发币有多简单? 5分钟够了,学技术,小心被砍。
【区块链科普】发币有多简单? 5分钟够了,学技术,小心被砍。
提示:文章写完后,可以自动生成目录。 如何生成可以参考右边的帮助文档
文章目录摘要
前言
随着区块链概念的普及,衍生出一大批区块链项目,其中很多项目并没有太多的技术含量。 下面我们就来探究一下“发币”是如何进行的,了解原理,学习知识,防止盲目被抓“砍”。
提示:以下为本文正文,以下案例供参考
1、什么是空气币?
其中大部分实际上是erc20。
ERC-20 是以太坊网络的代币合约标准。
那么什么是erc20?
ERC-20 是一个标准。
ERC-20标准规定Token需要有名称、符号、总量、转账汇款等功能。 该标准的好处是:只要符合ERC-20标准的Token,就可以兼容以太坊钱包。 也就是说,你可以将这个Token添加到你的以太坊钱包中,你也可以通过钱包发送给其他人。
因为ERC-20标准的存在,发行Token非常简单。 目前,以太坊上的 ERC-20 代币数量超过 180,000。
二、探索技术内容 1、工具MetaMask俗称“小狐狸”以太坊发币工具,是一个钱包,也是一个交互工具。 我们可以很方便的安装在360浏览器,或者谷歌,通过插件安装。
Remix是一款使用solidity语言的在线编程工具。
当然你可以自己搜索,有中文版的
2、实现方法
小狐狸准备好了,打开Remxi,这里要注意,打开小狐狸有网络的选择,你想发帖的地方,部署到对应的网络即可,但是你必须有网络认可的token(如矿工费),比如以太坊就用eth,火币生态用ht。
好了,我们打开Remix来实现部署。
给个名字
把代码贴在旁边
pragma solidity ^0.4.26;
//kql yc
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }
contract TokenERC20 {
string public name; // ERC20标准
string public symbol; // ERC20标准
uint8 public decimals = 2; // ERC20标准,decimals 可以有的小数点个数,最小的代币单位。18 是建议的默认值
uint256 public totalSupply; // ERC20标准 总供应量
// 用mapping保存每个地址对应的余额 ERC20标准
mapping (address => uint256) public balanceOf;
// 存储对账号的控制 ERC20标准
mapping (address => mapping (address => uint256)) public allowance;
// 事件,用来通知客户端交易发生 ERC20标准
event Transfer(address indexed from, address indexed to, uint256 value);
// 事件,用来通知客户端代币被消费 ERC20标准
event Burn(address indexed from, uint256 value);
/**
* 初始化构造
*/
function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {
totalSupply = initialSupply * 10 ** uint256(decimals); // 供应的份额,份额跟最小的代币单位有关,份额 = 币数 * 10 ** decimals。
balanceOf[msg.sender] = totalSupply; // 创建者拥有所有的代币
name = tokenName; // 代币名称
symbol = tokenSymbol; // 代币符号
}
/**
* 代币交易转移的内部实现
*/
function _transfer(address _from, address _to, uint _value) internal {
// 确保目标地址不为0x0,因为0x0地址代表销毁
require(_to != 0x0);
// 检查发送者余额
require(balanceOf[_from] >= _value);
// 确保转移为正数个
require(balanceOf[_to] + _value > balanceOf[_to]);
// 以下用来检查交易,
uint previousBalances = balanceOf[_from] + balanceOf[_to];
// Subtract from the sender
balanceOf[_from] -= _value;
// Add the same to the recipient
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
// 用assert来检查代码逻辑。
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}
/**
* 代币交易转移
* 从自己(创建交易者)账号发送`_value`个代币到 `_to`账号
* ERC20标准
* @param _to 接收者地址
* @param _value 转移数额
*/
function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
}
/**
* 账号之间代币交易转移
* ERC20标准
* @param _from 发送者地址
* @param _to 接收者地址
* @param _value 转移数额
*/
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;
}
/**
* 设置某个地址(合约)可以创建交易者名义花费的代币数。
*
* 允许发送者`_spender` 花费不多于 `_value` 个代币
* ERC20标准
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
*/
function approve(address _spender, uint256 _value) public
returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
}
/**
* 设置允许一个地址(合约)以我(创建交易者)的名义可最多花费的代币数。
*-非ERC20标准
* @param _spender 被授权的地址(合约)
* @param _value 最大可花费代币数
* @param _extraData 发送给合约的附加数据
*/
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;
}
}
/**
* 销毁我(创建交易者)账户中指定个代币
*-非ERC20标准
*/
function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value); // Check if the sender has enough
balanceOf[msg.sender] -= _value; // Subtract from the sender
totalSupply -= _value; // Updates totalSupply
Burn(msg.sender, _value);
return true;
}
/**
* 销毁用户账户中指定个代币
*-非ERC20标准
* Remove `_value` tokens from the system irreversibly on behalf of `_from`.
*
* @param _from the address of the sender
* @param _value the amount of money to burn
*/
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value); // Check if the targeted balance is enough
require(_value <= allowance[_from][msg.sender]); // Check allowance
balanceOf[_from] -= _value; // Subtract from the targeted balance
allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance
totalSupply -= _value; // Update totalSupply
Burn(_from, _value);
return true;
}
}
//qkl yc
然后编译左边第二个以太坊发币工具,点击编译
3.编译成功后运行
当然还需要配置参数,有3个,
INITIALSUPPLY 是数量
TOKENNAME 是名称
TOKENSYMBOL 是代币的符号
然后,只需添加它。
总结
本期从技术层面为大家普及空气币在市场上的变现原理。 科技是用来改变生活的。 应该是区块链赋能实体经济,改变生活,而不是扰乱生活。 希望得到理性对待。
另请注意,ICO 在中国是被禁止的
2017年9月4日下午3时,中国人民银行、工业和信息化部、国家工商总局、银监会、证监会、中国证监会等七部委保监会发布《关于防范代币发行融资风险的公告》(以下简称《公告》)。 《公告》指出,代币发行融资本质上是未经批准的非法公开融资,要求自公告发布之日起立即停止各类代币发行融资活动。 同时,已完成代币发行和融资的组织与个人进行清关等安排。