之前有自己開發(fā)過 Ethereum 智能合約肉微,但沒有好好紀(jì)錄開發(fā)的過程和碰到的問題遵馆,覺得滿可惜。這次想重新開始赦肃,從最傻的姿勢開始溅蛉,一步步成長。本篇希望將一個很簡單的代幣合約(只能發(fā)行和轉(zhuǎn)帳)他宛,部署在本地和測試網(wǎng)路上船侧,并測試其功能。本篇是較詳細(xì)描述使用 Remix 的步驟及使用上可能碰到的問題堕汞。
開發(fā)環(huán)境
不需要安裝勺爱,直接在任何瀏覽器開啟 Remix。
Remix 是一個 Open Source 的 Solidity 智能合約開發(fā)環(huán)境讯检,提供基本的編譯琐鲁、部署至本地或測試網(wǎng)路、執(zhí)行合約等功能人灼。Solidity 是 Ethereum 官方設(shè)計和支援的程式語言围段,專門用于編寫智能合約。
取得代幣合約
代幣合約的范例很多投放,Ethereum 官網(wǎng)有提供一個最小可行的代幣合約(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 合約真的很傻奈泪,只能做兩件事:
- 創(chuàng)造代幣:發(fā)起合約時創(chuàng)造指定數(shù)量的代幣,代幣擁有者是發(fā)起合約的 Ethereum 帳戶
- 轉(zhuǎn)移代幣:轉(zhuǎn)移指定數(shù)量的代幣到指定的 Ethereum 帳戶
使用 Remix 編譯合約
1. 點選右上角 + 新增一個檔案
名稱任意只要副檔名是 ".sol"。
2. 復(fù)制合約內(nèi)容到該檔案并編譯
Remix 預(yù)設(shè)會自動編譯涝桅,旁邊沒有跳出紅色的 ERROR 就代表編譯成功拜姿。
在本地部署合約
1. 設(shè)定網(wǎng)路
點選左邊上面的 run。
Environment 選擇 JavaScript VM 代表所有資料都是存在本地記憶體(功能類似 testrpc)冯遂。它會提供 5 個虛擬帳戶每個有 100 ETH蕊肥,隨便選一個帳戶(要記住)蛤肌。
2. 發(fā)送交易部署合約
選擇 MyToken壁却。可以看到 create 按鈕裸准。且已根據(jù)合約內(nèi)容顯示必須填入 initialSupply
(也就是要發(fā)行的代幣數(shù)量)展东。輸入一個數(shù)目并按 create,就會發(fā)送交易部署合約炒俱。
合約部署成功后盐肃,可以看到合約的使用介面。Remix 會自動根據(jù)合約的內(nèi)容向胡,產(chǎn)生對應(yīng)的合約使用介面恼蓬。可以看到合約有兩個功能:balanceOf(查詢余額) 和 transfer(轉(zhuǎn)移代幣)僵芹。
底下可以看到 log(紀(jì)錄每一次的操作)处硬。實際上部署合約是透過一個 Ethereum 交易完成,點 Details 可以看到該筆交易詳細(xì)資料拇派。
執(zhí)行合約 - 查詢余額
1. 選擇剛剛發(fā)起合約的帳戶
2. 輸入帳戶
注意要用 "" 把帳戶包起來荷辕,范例:
"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
3. 點擊 balanceOf
可以在旁邊看到執(zhí)行結(jié)果,也就是目前這個帳戶的代幣余額件豌。
錯誤情況
說明一下疮方,因為資料傳送是用 JSON 格式,所以要加上 ""茧彤。如果忘記輸入 "" 就會在 log 看到錯誤:
執(zhí)行合約 - 轉(zhuǎn)移代幣
1. 選擇要轉(zhuǎn)出的帳戶
選擇剛剛發(fā)起合約的帳戶骡显。
2. 輸入要轉(zhuǎn)入的帳戶
選擇并復(fù)制另一個帳戶。在合約介面 transfer 后面的欄位曾掂,輸入轉(zhuǎn)入帳戶和要轉(zhuǎn)移的代幣數(shù)量惫谤。帳戶同樣用 "" 包起來,范例:
"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10
3. 點擊 transfer
點擊 transfer珠洗,成功后會看到 log 更新溜歪。
4. 確認(rèn)余額更新
再查詢轉(zhuǎn)入帳戶的余額,就可以看到代幣余額增加啦许蓖!
錯誤情況
如果選擇要轉(zhuǎn)出的帳戶代幣余額不足蝴猪,這筆交易會失敗调衰,就會在 log 看到錯誤。
在測試網(wǎng)路部署合約
1. 安裝 MetaMask
首先自阱,要連到測試網(wǎng)路嚎莉,就要安裝 MetaMask。他是瀏覽器端的 Ethereum 錢包动壤,可以連結(jié) Ethereum 主要和測試網(wǎng)路萝喘。安奘后需要建立 Ethereum 帳戶,教練琼懊,我”只”想學(xué)Solidity 這篇有詳細(xì)的步驟。
2. 選擇測試網(wǎng)路
回到 Remix哼丈,這次 Environment 選擇 Injected Web3,Remix 會自動連結(jié) MetaMask筛严。
3. 部署合約
接著用剛才同樣的方式醉旦,按 create 部署合約,就會看到 MetaMask 的彈出視窗桨啃。直接按 submit 發(fā)送交易车胡。
稍等一點時間(因為要等這個交易被確認(rèn)),部署成功后合約的使用介面就會跑出來照瘾。
就可以用同樣的方式使用合約啦!
總結(jié)
Remix 提供一個 Solidity 智能合約的開發(fā)環(huán)境析命,可以簡易的編譯主卫、部署、執(zhí)行甚至除錯鹃愤,適合編程經(jīng)驗不多的初學(xué)者簇搅。但無法做到版本控制、測試及和其他開發(fā)工具一起使用等软吐,實際要開發(fā) DApp 的話會比較不方便瘩将。下一篇會參考以下文章:
使用 Truffle3凹耙、Ganache姿现、web3.js 來編譯和部署合約。