![1.png](https://i.iter01.com/images/a9d4df6d9c03ae81993ba3dc37a90e11710e0d987e5af7f84b8bcde71d9c03ed.png)
本文希望將一個很簡單的代幣合約(只能發行和轉賬),部署在本地和測試網路上,測試下它的功能。
詳細描述使用 Remix 的步驟及使用上可能碰到的問題。
之前開發過以太坊Ethereum智慧合約,但沒有記錄過開發的過程和碰到的問題,覺得挺可惜。這次重新開始,從最基礎開始,一步步學習。
開發環境
不需要安裝,直接在任何瀏覽器啟動 Remix。
![2.png](https://i.iter01.com/images/007391d1fee9306d6e69c3931e5304195f4d47a22aa1b07758cfcd6fddd6e482.png)
取得代幣合約
代幣合約的範例很多,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”。
![3.png](https://i.iter01.com/images/1a598b903ab36e335994ae19db12c8689b767b47c29b26a49da129c5cf6e0a1b.png)
- 複製合約內容到該合約並編譯 Remix 預設設定會自動編譯,只要旁邊沒有蹦出紅色的 error 提示就代表編譯成功。
![4.png](https://i.iter01.com/images/c4009162e15bd22745e15af05f3f6ef473d5eb91f5bd9f238e34478d68caa9ac.png)
在本地部署合約
1.設定網路 點選左上的 run。
![5.png](https://i.iter01.com/images/261e90c3f182ddcb563cfe06a961d62f2728bc3323ad55170cd294ac6b89cf9e.png)
Environment 選擇 JavaScript VM 代表所有資料都是存在本地(功能類似 testrpc)。它會提供 5 個虛擬賬戶每個有 100 ETH,隨便選擇一個賬戶(要記住後面一直要用)。
![6.png](https://i.iter01.com/images/a759cd6242b050569cce180aa66139aa0211d7257eec9414eebafee694ed1c99.png)
2.傳送交易部署合約 選擇 MyToken。可以看到 create 按鈕。且已根據合約內容顯示必須輸入 initialSupply(也就是要發行的代幣數量)。輸入一個數目點create,就可以傳送交易部署合約。
![7.png](https://i.iter01.com/images/4e2d6b13591496a1cfd439003410a22b7990871458b250e69f8786dedd154391.png)
合約部署成功後,可以看到合約的使用介面。Remix 會自動根據合約的內容,產生對應的合約使用介面。可以看到合約有兩個功能:balanceOf(查詢餘額) 和 transfer(轉移代幣)。
![8.png](https://i.iter01.com/images/15b7af9a0d57a2adda4e89e1eff1d786644f9990b6349f1f3fb6d91433eeac36.png)
底下可以看到 log(記錄每一次的操作)。實際上部署合約是通過一個 Ethereum 交易完成,點 Details 可以看到這筆交易詳細資料。
![9.png](https://i.iter01.com/images/036009f85702393340c9112dbca4d2087cd0bd9e69be99f21c68d722f4e05872.png)
執行合約 — 查詢餘額
1.選擇剛剛發起合約的賬戶
![10.png](https://i.iter01.com/images/0237d934449c673bd672c23f02836658fe662e08be7337291cdcd8763713595c.png)
可以點右邊的按鈕複製
2.輸入賬戶 注意要用 “” 把賬戶括起來,示例:
"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
複製程式碼
3.點選 balanceOf
可以看到執行結果,也就是目前這個賬戶的代幣餘額。
![11.png](https://i.iter01.com/images/3a954c0fe8f606014d159b97bbc8dc480c8f53c8aeaac0270ed243b6c2c54ff9.png)
可能的錯誤情況
說明一點,因為資料傳輸是用 JSON 格式,所以要加上 “”。如果忘了 “” 就會在 log 中看到錯誤提示:
![12.png](https://i.iter01.com/images/963f880f2ecef926a6a4dc377445c90a807f0a9613b9aee341f791435968ca9d.png)
執行合約 — 轉移代幣
1.選擇要輸出的賬戶 選擇剛剛發起的合約的賬戶。
![13.png](https://i.iter01.com/images/0237d934449c673bd672c23f02836658fe662e08be7337291cdcd8763713595c.png)
2.輸入要轉入的賬戶 選擇並複製另一個賬戶。在合約介面 transfer 後面的輸入位置,輸入轉入賬戶和要轉移的代幣數量。賬戶同樣需要用 “” 括起來,示例:
"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10
複製程式碼
3.點選 transfer 點選 transfer,成功後會看到 log 更新。
![14.png](https://i.iter01.com/images/b29e48ae2b80566289a7365e3199553d0fb86098181d51ba467a63c4c2a84547.png)
4.確認餘額更新 這時在查詢轉入賬戶的餘額,就可以看到代幣餘額增加啦!
![15.png](https://i.iter01.com/images/290fd13c59b60e03e43317a949f3ed196c6a336c2b5d48c087d9dc9d8bfd2c78.png)
錯誤情況 如果選擇要轉出的賬戶代幣餘額不足,這個交易就會失敗,會在 log 看到錯誤提示。
![16.png](https://i.iter01.com/images/d82ba16a3d307fb97ab31596d104b9a4f2f0c838bb9ec5b9795cdeed544dbe4b.png)
在測試網路部署合約
1.安裝 MetaMask 首先,要連到測試網路,這就要安裝 MetaMask。它是瀏覽器端的 Ethereum 錢包,可以連結 Ethereum 公共和測試網路。安裝後需要建立 Ethereum 賬號,這個這裡就不細講了。
成功啟動後是這樣的。
![17.png](https://i.iter01.com/images/dd4f91d7286ffdd121951fb222950b43da4be5ad6fcfa77aff5bf4ece0c2ef08.png)
![18.png](https://i.iter01.com/images/896a44830af043a26684a147cbc615ffe19a369da51b325db108731fbc774835.png)
![19.png](https://i.iter01.com/images/39295692cb78dc241c8b8502d4609defbf7a0104047d80e64564cf2289a466ca.png)
2.選擇測試網路
回到 Remix,這次 Environment 選擇 Injected Web3,Remix 會自動連線 MetaMask。
![20.png](https://i.iter01.com/images/f77801b414059ab1b892fb2c990876522009217cd229323d598271a8eff24157.png)
成功連線後會看到和 MetaMask 相同賬號和 Ether 餘額
3.部署合約 接著用同樣的方式,按 create 部署合約,就會看到 MetaMask 的彈出視窗。直接按 submit 傳送交易。
![21.png](https://i.iter01.com/images/6c2127c90821f30b36bae5ca8e98d11a343c71a1a3779f17e1c06d8ccb427849.png)
稍等片刻(需要等交易被確認),部署成功後合約的使用介面就會出來。
![22.png](https://i.iter01.com/images/21fee67ee1e97cc8050a0522eb17996f594e3693038ad4ef86f506c214a0ebde.png)
ok,現在可以用同樣的方式使用合約啦!
總結下
Remix 提供一個 Solidity 智慧合約的開發環境,可以方便的編譯、部署、執行甚至找錯,適合程式設計經驗不多的初學者。但無法做到版本控制、測試及和其他開發工具一起使用等,實際上要開發 DApp,使用 Truffle3、Ganache、web3.js 來編譯和部署合約比較方便和專業些更適合開發人員。
推薦一個適合區塊鏈新手的以太坊DApp開發教程:
如果想加入以太坊技術開發群可以加微信:cuixuebin2,拉你入群。