【Ethereum 智能合約開發(fā)筆記】編譯和部署合約的第一種姿勢:使用 Remix

之前有自己開發(fā)過 Ethereum 智能合約,但沒有好好紀錄開發(fā)的過程和碰到的問題,覺得滿可惜。這次想重新開始,從最傻的姿勢開始,一步步成長。本篇希望將一個很簡單的代幣合約(只能發(fā)行和轉(zhuǎn)帳),部署在本地和測試網(wǎng)路上,并測試其功能。本篇是較詳細描述使用 Remix 的步驟及使用上可能碰到的問題。

開發(fā)環(huán)境

不需要安裝,直接在任何瀏覽器開啟 Remix

Remix 是一個 Open SourceSolidity 智能合約開發(fā)環(huán)境,提供基本的編譯、部署至本地或測試網(wǎng)路、執(zhí)行合約等功能。Solidity 是 Ethereum 官方設計和支援的程式語言,專門用于編寫智能合約。

Remix 開啟后應該會長這樣

取得代幣合約

代幣合約的范例很多,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. 復制合約內(nèi)容到該檔案并編譯

Remix 預設會自動編譯,旁邊沒有跳出紅色的 ERROR 就代表編譯成功。

編譯合約成功

在本地部署合約

1. 設定網(wǎng)路

點選左邊上面的 run

run

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

Account

2. 發(fā)送交易部署合約

選擇 MyToken。可以看到 create 按鈕。且已根據(jù)合約內(nèi)容顯示必須填入 initialSupply(也就是要發(fā)行的代幣數(shù)量)。輸入一個數(shù)目并按 create,就會發(fā)送交易部署合約。

create

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

合約介面

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

log


執(zhí)行合約 - 查詢余額

1. 選擇剛剛發(fā)起合約的帳戶

可點選帳戶右邊的圖示復制

2. 輸入帳戶

注意要用 "" 把帳戶包起來,范例:

"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"

3. 點擊 balanceOf

可以在旁邊看到執(zhí)行結(jié)果,也就是目前這個帳戶的代幣余額。


查詢余額成功

錯誤情況

說明一下,因為資料傳送是用 JSON 格式,所以要加上 ""。如果忘記輸入 "" 就會在 log 看到錯誤:

JSON 參數(shù)格式錯誤

執(zhí)行合約 - 轉(zhuǎn)移代幣

1. 選擇要轉(zhuǎn)出的帳戶

選擇剛剛發(fā)起合約的帳戶。

可點選帳戶右邊的圖示復制

2. 輸入要轉(zhuǎn)入的帳戶

選擇并復制另一個帳戶。在合約介面 transfer 后面的欄位,輸入轉(zhuǎn)入帳戶和要轉(zhuǎn)移的代幣數(shù)量。帳戶同樣用 "" 包起來,范例:

"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10

3. 點擊 transfer

點擊 transfer,成功后會看到 log 更新。

交易成功 log

4. 確認余額更新

再查詢轉(zhuǎn)入帳戶的余額,就可以看到代幣余額增加啦!


查詢轉(zhuǎn)入帳戶余額

錯誤情況

如果選擇要轉(zhuǎn)出的帳戶代幣余額不足,這筆交易會失敗,就會在 log 看到錯誤。


交易失敗 log

在測試網(wǎng)路部署合約

1. 安裝 MetaMask

首先,要連到測試網(wǎng)路,就要安裝 MetaMask。他是瀏覽器端的 Ethereum 錢包,可以連結(jié) Ethereum 主要和測試網(wǎng)路。安奘后需要建立 Ethereum 帳戶,教練,我”只”想學Solidity 這篇有詳細的步驟。

MetaMask
成功開啟后,應該會長這樣
記得選擇 Ropsten Test Net

2. 選擇測試網(wǎng)路

回到 Remix,這次 Environment 選擇 Injected Web3,Remix 會自動連結(jié) MetaMask。

成功會看到和 MetaMask 相同帳戶和 Ether 余額

3. 部署合約

接著用剛才同樣的方式,按 create 部署合約,就會看到 MetaMask 的彈出視窗。直接按 submit 發(fā)送交易。

用 MetaMask 發(fā)送交易

稍等一點時間(因為要等這個交易被確認),部署成功后合約的使用介面就會跑出來。

合約介面,當然是長一樣

就可以用同樣的方式使用合約啦!


總結(jié)

Remix 提供一個 Solidity 智能合約的開發(fā)環(huán)境,可以簡易的編譯、部署、執(zhí)行甚至除錯,適合編程經(jīng)驗不多的初學者。但無法做到版本控制、測試及和其他開發(fā)工具一起使用等,實際要開發(fā) DApp 的話會比較不方便。下一篇會參考以下文章:

使用 Truffle3、Ganache、web3.js 來編譯和部署合約。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375