提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助檔案
文章目錄
- 前言
- 一、所謂的空氣幣的是什么?
- 二、探究技術含量
- 1.工具
- 2.代碼
- 總結
前言
伴隨著區塊鏈概念的普及,衍生了大量的區塊鏈專案,很多都沒有什么太大的技術含量,我們一起來探究一下“發幣”是如何進行的,了解原理學習知識,防止盲目被“割”,
提示:以下是本篇文章正文內容,下面案例可供參考
一、所謂的空氣幣的是什么?
絕大部分其實就是erc20,
ERC-20是以太坊網路的一種代幣合約標準,
那么什么是erc20呢?
ERC-20是一種標準,
在ERC-20標準里規定了Token需要有它的名字、符號、總供應量以及包含轉賬、匯款等其他功能,這個標準帶來的好處是:只要Token符合ERC-20標準,那么它將兼容以太坊錢包,也就是說,你可以在你的以太坊錢包里加入這個Token,還可以通過錢包把它發送給別人,
正因為ERC-20標準的存在,使得發行Token變得很簡單,目前,以太坊上ERC-20 Token的數量超過了180000種,
二、探究技術含量
1.工具
MetaMask俗稱“小狐貍”,它是一個錢包也是互動的工具,我們可以在360瀏覽器,或者是谷歌,用插件的方式簡便安裝,
Remix,是一種在線編程工具,使用的是solidity語言,
http://remix.ethereum.org/
當然可以自己搜索,有中文版
2.實作方法
小狐貍準備好,打開Remxi,這里注意一下,打開小狐貍有網路的選擇,想在什么地方發,就在對應的網上部署,但是必須有網路認可的代幣(作為礦工費),例如以太坊就用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
然后,左側第2個編譯,然后點擊Compile

3.編譯成功就運行

當然要配置引數,有3個,
INITIALSUPPLY是數量
TOKENNAME是名字
TOKENSYMBOL是代幣的符號
然后,添加就好了,
總結
本期從技術層面科普了市場上空氣幣的實作原理,技術是用來改變生活的,應該是區塊鏈賦予物體經濟,改變生活,而不是擾亂生活,希望理性對待,
另外注意國內禁止ICO
2017年9月4日下午3點,中國人民銀行領銜網信辦、工信部、工商總局、銀監會、證監會和保監會等七部委發布《關于防范代幣發行融資風險的公告》(以下簡稱公告),《公告》指出代幣發行融資本質上是一種未經批準非法公開融資的行為,要求自公告發布之日起,各類代幣發行融資活動立即停止,同時,已完成代幣發行融資的組織和個人做出清退等安排,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/293415.html
標籤:區塊鏈
