之前說過,Blockchain 基本上是因為金流帳本這樣的問題而被創造出來的,也就是說區塊鏈非常適合運用在金流的應用上,我們也可以建立自己的 Blockchain 來搭建自己的金流系統,不過在 Ethereum 上 Smart Contract 這種設計讓我們擁有可以在 Ethereum 區塊鏈上創造自己金流系統的能力,如此我們就不需要自己建一條鏈了。

我們使用 Smart Contract 仿造貨幣性質創造了數位資產(說穿了其實就是在 Smart Contract 上紀錄的變數而已),而這種具貨幣性質的數位資產又被稱作 Token,如此我們就可以在應用程式中使用這個去中心化的金流系統,由於 Token 的應用很普遍,大部分的功能都已經標準化了,我們只要仿造標準來實作就可以發行自己的數位貨幣了。

在這邊我們就練習一下怎麼使用 Mist 發佈 Token Smart Contract 來發行自己的數位貨幣。(目前我們還沒有學習過如何撰寫 Smart Contract,因此這邊會先直接提供範例程式碼,實作的部分我們之後再慢慢學習)

以下是我們的範例程式碼:

請打開 Mist,如下圖點擊 Contract,然後點擊 Deploy New Contract。

你會看到如下圖的頁面,請在 Solidity Contract Source Code 中貼上我們上面提供的範例程式碼。

貼上範例程式碼之後,Mist 會自動編譯程式,檢查是否有語法上的錯誤,如果沒問題,右方的 Select Contract to Deploy 就會出現選項,在這邊我們選擇 Token ERC 20。

選擇 Token ERC 20 之後,右方會出現要初始化 Contract 的參數表單,有 Initial supply、Token name、Token symbol 需要填寫。Initial supply 代表 Token 的總發行量是多少,我這邊設定成 7777777777,你可以設成你想要的數字。Token name 就是這個 Token 要叫什麼名字,這邊我設定成 7 Token,你想要取 Dog Coin 或是 Cat Coin 也都可以。Token symbol 就是這個 Token 要用什麼代號,像是美金就是用 $、Ether 是用 ETH,這邊我設定成 7token,你可以取自己覺得帥的代號。

借下來捲動頁面到底下,這邊你可以設定 Gas Fee 要用多少,這邊就看自己高興,我是沒有做任何調整。最後按下 Deploy!

與區塊鏈互動基本上就是做交易,所以發佈 Smart Contract 也就需要發出一個交易,Mist 會彈出視窗顯示交易資訊及可能的 Gas Fee,請輸入密碼進行交易。

等待一下子就可以看到我們的 Smart Contract 發佈交易已經出現在頁面底端了,只要等待交易被確認,那一個新的數位貨幣就誕生了!

Smart Contract 發佈完成後,請點擊你的帳戶,如下圖所示。

你會發現你的帳戶底下多了一個 Token 紀錄,在這邊我擁有了 7 Token 共 7,777,777,777 顆!如果這個 Token 被承認,那我就是超級有錢人啦!

接下來我們來實際轉一些 Token 給朋友看看,在區塊鏈的世界我們不需要銀行及任何中心化的系統就可以將錢轉給朋友了,也就是我們現在擁有了一個去中心化的金流系統!讓我們來實際感受一下吧!

請點擊 7 Token 選項右邊的 Send,如下圖所示:

填入朋友的 Ethereum 帳戶位址到 To 這個欄位,Amount 填入你想要匯出的 Token 數量,在這邊我填 40,然後捲動頁面到底端送出交易。

等待一下子交易確認後,40 個 Token 就完成匯出了!

我們可以到 Etherscan上確認交易是否真的完成:https://ropsten.etherscan.io/address/0xed29cd5a72b06793601da5f0c4ec3ef5224037c7#tokentxns

的確有 40 個 7 Token 轉到朋友帳戶了!

在這個練習中,我們了解了 Token 到底是什麼,然後我們也實際發行了自己的數位貨幣,完成了自己的去中心化的金流系統,當我們想要轉帳時,我們再也不需要銀行及任何中心化的系統就可以將錢轉給朋友了,只要我們雙方都信任這個數位貨幣,價值的交換就能無遠弗屆地進行了!

Mist 跟前回介紹的 MetaMask 一樣是可以與 Ethereum 進行互動的工具,除了可以管理 Ethereum 相關密鑰之外,Mist 還包含了 Ethereum 節點以及網頁瀏覽器,方便大家瀏覽 Dapp 網頁。

首先請到這邊安裝 Mist,請選擇適於自己的作業系統安裝。

由於 Mist 會安裝節點在你的電腦裡,也因此會同步整個帳本下來,所以會花上不少時間同時也會佔用許多硬碟空間。我們目前僅是要使用測試鏈,所以請切換到 Ropsten 測試鏈(如下圖),這樣就不用花這麼多時間與空間了。

在 Mist 的左下角可以觀察目前已同步到你的電腦的區塊數(如下圖),如果這個數字跟 Etherscan(Etherscan 是一個可以查看 Ethereum 區塊鏈所有交易的網站) 上的最新區塊數一致的話,那就代表已經同步完成了。

接下來讓我們用 Mist 開一個 Ethereum 帳戶,請點擊 Add Account,並依指示輸入密碼後創建帳號,密碼請務必要記下來,將來交易時都會需要輸入你的密碼。

學會創建 Ethereum 帳戶之後,我們要來看一下 Mist 要怎麼備份帳號,請點擊 Mist 上方選單的 File -> Backup ->Accounts(如下圖),這樣就會打開帳號存放的資料夾,所有的帳號都會加密存在這邊,所以只要備份這些檔案及當時設定的密碼,你就可以在別台電腦復原你的帳號。

現在你這個 Ethereum 帳戶還沒有任何 Ether,我們仿造之前用 MetaMask 來跟水龍頭要 Ether 的步驟來取得 Ether 看看。

我個人提供了一個水龍頭 Dapp,請前往這個網址來取得 Ether:https://blog.fukuball.com/dapp/faucet/

由於 Mist 也是一個 Dapp 網頁瀏覽器,請在 Mist 上方的網址列輸入:https://blog.fukuball.com/dapp/faucet/

Mist 在揭露你的 Ethereum 帳戶資訊給 Dapp 網頁時都會詢問你的同意,請先選擇要瀏覽這個 Dapp 網頁的帳號(你可能在 Mist 有多個帳號,所以就需要選擇目前要用哪個帳號瀏覽這個網頁)。

然後點擊 Authorize,這樣就可以連上 Dapp 網頁了。

你可以看到跟 MetaMask 一樣,Ethereum 帳號(public address)已經被填寫到 Send To 欄位了,只要按下 Send To 之後不久你就可以從水龍頭收到 Ether 了。

果然不久之後我們就收到了 0.5 Ether!

接下來我們一樣練習一下把 0.1 Ether 匯回給水龍頭,請在 Credit 欄位輸入 0.1,然後按下 Credit。

這時 Mist 跟 MetaMask 一樣會彈出一個視窗顯示 Gas Fee 等資訊,不同的地方是 Mist 需要輸入密碼來授權這個交易。

交易進行時,你會收到一個 Tx id,在我這邊的例子是:0x82407e0aac7cc5d3ef485ffba78f279b37aaba50e64396c477b1b19ee5590793,你可以到 Etherscan 去查看這筆交易進行的狀態:https://ropsten.etherscan.io/tx/0x82407e0aac7cc5d3ef485ffba78f279b37aaba50e64396c477b1b19ee5590793

不久之後,等交易確認,你就可以看到 Ether 變成 0.4 了,你成功匯回了 0.1 Ether。

如同使用 MetaMask,我們也可以使用官方提供的 Mist 來與 Ethereum 區塊鏈做互動,其實都不錯用,但 Mist 相對肥大很多,也因此有時候交易會卡住,畢竟 Mist 在你的機器上安裝了 Ethereum 節點,所以比起 MetaMask 複雜許多,也比較容易遇到問題。如果你遇到問題了,可能重開 Mist 就能解決,如果還是不能解決,那就 google 吧!

Appendix

Mist 在系統背景開了一個叫 geth 的程序,這個 geth 就是主要用來與 Ethereum Network 互動的程式,未來我們會再多說一點 geth,在這邊我們先稍微看一下就好。

請在 Terminal 輸入指令:

ps aux | grep geth

你會看到 geth 真的有被跑在背景執行:

我們也可以進入 geth 的指令介面來使用 geth 更多功能,請在 Terminal 輸入指令:

/Users/username/Library/Application\ Support/Mist/binaries/Geth/unpacked/geth attach ~/Library/Ethereum/geth.ipc

你會看到像這樣的互動介面:

在這邊可以使用 geth 更多與 Ethereum 互動的指令,我們後續會學到更多,在這邊先簡單感受一下就好,你可以輸入指令:

net.peerCount

這樣 geth 就會回覆目前你的節點有多少的 peer 連結,其他的功能,我們就以後再說吧!

Fukuball

我是林志傑,網路上常用的名字是 Fukuball。我使用 PHP 及 Python,對機器學習及區塊鏈技術感到興趣。 https://www.fukuball.com

Staff Engineer

Taiwan