以太坊(10)go-ethereum開發環境 mist solidity實現代幣(管理、增發、兌換、凍結) –mac

以太坊(10)go-ethereum開發環境   mist   solidity實現代幣(管理、增發、兌換、凍結) –mac

最近比較忙,go-ethereum的程式碼沒時間分享了,後續我會持續更新。

之前分享了基於erc2.0釋出簡單的 虛擬代幣例項 

    https://blog.csdn.net/weixin_41806245/article/details/80297406

本章基之前釋出的文章 go-ethereum mist 開發環境搭建:

    https://blog.csdn.net/weixin_41806245/article/details/80472300

本章目的:

    實現虛擬代幣的 管理、增發、兌換、凍結等;

開發準備:

    1. 啟動geth 私有鏈;

    2. 啟動mist 連線啟動的私有鏈;

    1、2 過程不在多說前面有文章介紹,1過程你可以使用ganache當測試鏈、可以使用以太坊的測試網路;

編寫程式碼:

整個程式碼檔案如下:

pragma solidity ^0.4.18;
contract owned{
address public owner;
function owned() public {
owner = msg.sender;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
    // 修改擁有者
function transferOwner(address newOwner) public onlyOwner {
owner = newOwner;
}
}
contract xiliangMaCoin is owned {
string public name = "xiliangMaCoin"; //代幣名稱
string public symbol = "XLMC"; //簡稱
uint8 public decimals = 4; //最小單位
uint256 public INITIAL_SUPPLY = 1000000000; //代幣發行總量
uint public sellPrice = 1 ether; //賣出價格
uint public buyPrice = 1 ether; //購買價格
mapping(address => uint) public balanceOf;
mapping(address => bool) public frozenAccount;
    // 將代幣初始化給使用者
function xiliangMaCoin() public {
balanceOf[msg.sender] = INITIAL_SUPPLY;
}
    // 代幣增發,正常情況下是不允許的,簡單寫個例子表達下
function mintToken(address target, uint mintedAmount) public onlyOwner {
if (target == 0) revert();
balanceOf[target]  = mintedAmount;
INITIAL_SUPPLY  = mintedAmount;
}
    // 凍結賬戶
function frozeAccount(address target, bool isFrozen) public onlyOwner {
if (target == 0) revert();
frozenAccount[target] = isFrozen;
}
    // 定義事件
event Transfer(address from, address to, uint amount);
    // 代幣的轉移
function transfer(address to, uint value) public {
if (frozenAccount[msg.sender]) revert();
if (balanceOf[msg.sender] < value) revert();
if ((balanceOf[to]   value) < balanceOf[to]) revert();
balanceOf[msg.sender] -= value;
balanceOf[to]  = value;
}
    // 設定代幣的價格
function setPrice(uint newSellPrice, uint newBuyPrice) public onlyOwner {
sellPrice = newSellPrice;
buyPrice = newBuyPrice;
}
    // 賣代幣,並返回獲得的收益
function sell(uint amount) public returns (uint revenue) {
if (frozenAccount[msg.sender]) revert();
require(balanceOf[msg.sender] >= amount);
balanceOf[owner]  = amount;
balanceOf[msg.sender] -= amount;
revenue = amount * sellPrice;
msg.sender.transfer(revenue);
emit Transfer(msg.sender, owner, amount);
return revenue;
}
    // 根據購買者持有的以太幣,計算能購買的代幣數併購買
function buy() payable public returns(uint amount){
amount = msg.value / buyPrice;
require(balanceOf[owner] >=  amount);
balanceOf[owner] -= amount;
balanceOf[msg.sender]  = amount;
emit Transfer(owner, msg.sender, amount);
return amount;
}
}

部署合約:

    使用mist部署合約,之前很少介紹mist主要想給大家介紹熟悉truffle部署測試、這次咱們偷懶;

1. 點選合約 –》 選擇部署合約

2. 將程式碼複製到合約視窗,選擇要部署的合約

3. 交易記錄顯示已經建立完成

4. 檢視合約

合約測試:

測試這裡我就簡單測試一個代幣的轉發,其他的大家自己測試吧,比較簡單;

從xiliangMa 賬戶向ACCOUNT3賬戶 轉移10個代幣

選擇執行的函式,點選執行

產看ACCOUNT3的代幣數量:

刪除合約:

 在除錯Mist的過程中,建立了很多個合約,如何刪除?這個問題想必大家找了很多都沒有找到答案 哈哈 ,操作步驟如下

 1.  開啟錢包的控制檯介面,就是console

2. 複製程式碼到console回車, 搞定

好了其他的不在測試,只要能理解合約的邏輯,測試起來很簡單的,相比較go-ethereum的程式碼 這些都是很簡單的。

好了下章見。