本文希望將一個很簡單的代幣合約(只能發行和轉賬),部署在本地和測試網路上,測試下它的功能。
詳細描述使用 Remix 的步驟及使用上可能碰到的問題。
之前開發過以太坊Ethereum智慧合約,但沒有記錄過開發的過程和碰到的問題,覺得挺可惜。這次重新開始,從最基礎開始,一步步學習。
開發環境
不需要安裝,直接在任何瀏覽器啟動 Remix。
取得代幣合約
代幣合約的範例很多,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 編譯合約
- 點右上角 + 新增一個合約 名稱任意只要副檔名是 “.sol”。
- 複製合約內容到該合約並編譯 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 賬號,這個這裡就不細講了。
成功啟動後是這樣的。
我們選擇 Ropsten Test Net2.選擇測試網路
回到 Remix,這次 Environment 選擇 Injected Web3,Remix 會自動連線 MetaMask。
成功連線後會看到和 MetaMask 相同賬號和 Ether 餘額
3.部署合約 接著用同樣的方式,按 create 部署合約,就會看到 MetaMask 的彈出視窗。直接按 submit 傳送交易。
稍等片刻(需要等交易被確認),部署成功後合約的使用介面就會出來。
ok,現在可以用同樣的方式使用合約啦!
總結下
Remix 提供一個 Solidity 智慧合約的開發環境,可以方便的編譯、部署、執行甚至找錯,適合程式設計經驗不多的初學者。但無法做到版本控制、測試及和其他開發工具一起使用等,實際上要開發 DApp,使用 Truffle3、Ganache、web3.js 來編譯和部署合約比較方便和專業些更適合開發人員。
推薦一個適合區塊鏈新手的以太坊DApp開發教程:
如果想加入以太坊技術開發群可以加微信:cuixuebin2,拉你入群。