Remix 是一個開源的 Solidity 智能合約開發環境,提供基本的編譯、部署至本地或測試網絡、執行合約等功能。Solidity 是 以太坊Ethereum 官方設計和支持的開發語言,專門用於編寫智能合約。
本文希望將一個很簡單的代幣合約(只能發行和轉賬),部署在本地和測試網絡上,測試下它的功能。
詳細描述使用 Remix 的步驟及使用上可能碰到的問題。
之前開發過以太坊Ethereum智能合約,但沒有記錄過開發的過程和碰到的問題,覺得挺可惜。這次重新開始,從最基礎開始,一步步學習。
開發環境

取得代幣合約
代幣合約的范例很多,Ethereum 官網有提供一個最小可執行的代幣合約(MINIMUM VIABLE TOKEN):
pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply tokens to the creator of the contract */ function MyToken(uint256 initialSupply) public { balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens } /* Send coins */ function transfer(address _to, uint256 _value) public { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient } }
這個 MyToken 合約真的很簡單,只能做兩件事:
- 創建代幣:發起合約時創建指定數量的代幣,代幣擁有者是發起合約的 Ethereum 帳戶
- 轉移代幣:轉移指定數量的代幣到指定的 Ethereum 帳戶
至於一個完整的代幣合約,可參考ERC20 Token使用手冊。
使用 Remix 編譯合約
1. 點右上角 + 新增一個合約
名稱任意只要擴展名是 “.sol”。

2. 復制合約內容到該合約並編譯
Remix 默認設置會自動編譯,只要旁邊沒有蹦出紅色的 error 提示就代表編譯成功。

在本地部署合約
1. 設置網絡
點選左上的 run。

Environment 選擇 JavaScript VM 代表所有資料都是存在本地(功能類似 testrpc)。它會提供 5 個虛擬賬戶每個有 100 ETH,隨便選擇一個賬戶(要記住后面一直要用)。

2. 發送交易部署合約
選擇 MyToken。可以看到 create 按鈕。且已根據合約內容顯示必須輸入 initialSupply
(也就是要發行的代幣數量)。輸入一個數目點create,就可以發送交易部署合約。

合約部署成功后,可以看到合約的使用界面。Remix 會自動根據合約的內容,產生對應的合約使用界面。可以看到合約有兩個功能:balanceOf(查詢余額) 和 transfer(轉移代幣)。

底下可以看到 log(記錄每一次的操作)。實際上部署合約是通過一個 Ethereum 交易完成,點 Details 可以看到這筆交易詳細資料。

執行合約 — 查詢余額
1. 選擇剛剛發起合約的賬戶

2. 輸入賬戶
注意要用 “” 把賬戶括起來,示例:
"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
3. 點擊 balanceOf
可以看到執行結果,也就是目前這個賬戶的代幣余額。

可能的錯誤情況
說明一點,因為數據傳輸是用 JSON 格式,所以要加上 “”。如果忘了 “” 就會在 log 中看到錯誤提示:

執行合約 — 轉移代幣
1. 選擇要輸出的賬戶
選擇剛剛發起的合約的賬戶。

2. 輸入要轉入的賬戶
選擇並復制另一個賬戶。在合約界面 transfer 后面的輸入位置,輸入轉入賬戶和要轉移的代幣數量。賬戶同樣需要用 “” 括起來,示例:
"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10
3. 點擊 transfer
點擊 transfer,成功后會看到 log 更新。

4. 確認余額更新
這時在查詢轉入賬戶的余額,就可以看到代幣余額增加啦!

錯誤情況
如果選擇要轉出的賬戶代幣余額不足,這個交易就會失敗,會在 log 看到錯誤提示。

在測試網絡部署合約
1. 安裝 MetaMask
首先,要連到測試網絡,這就要安裝 MetaMask。它是瀏覽器端的 Ethereum 錢包,可以連結 Ethereum 公共和測試網絡。安裝后需要建立 Ethereum 賬號,這個這里就不細講了。



2. 選擇測試網絡
回到 Remix,這次 Environment 選擇 Injected Web3,Remix 會自動連接 MetaMask。

3. 部署合約
接着用同樣的方式,按 create 部署合約,就會看到 MetaMask 的彈出窗口。直接按 submit 發送交易。

稍等片刻(需要等交易被確認),部署成功后合約的使用界面就會出來。

ok,現在可以用同樣的方式使用合約啦!
總結下
Remix 提供一個 Solidity 智能合約的開發環境,可以方便的編譯、部署、執行甚至找錯,適合編程經驗不多的初學者。但無法做到版本控制、測試及和其他開發工具一起使用等,實際上要開發 DApp,使用 Truffle3、Ganache、web3.js 來編譯和部署合約比較方便和專業些更適合開發人員。
推薦一個適合區塊鏈新手的以太坊DApp開發教程:以太坊DApp開發實戰入門
如果想加入以太坊技術開發群可以加微信.