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

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

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

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

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

Remix 開啟后應(yīng)該會長這樣

取得代幣合約

代幣合約的范例很多投放,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

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)生對應(yīng)的合約使用介面恼蓬。可以看到合約有兩個功能:balanceOf(查詢余額)transfer(轉(zhuǎn)移代幣)僵芹。

合約介面

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

log


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

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

可點選帳戶右邊的圖示復(fù)制

2. 輸入帳戶

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

"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"

3. 點擊 balanceOf

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


查詢余額成功

錯誤情況

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

JSON 參數(shù)格式錯誤

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

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

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

可點選帳戶右邊的圖示復(fù)制

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

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

"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10

3. 點擊 transfer

點擊 transfer珠洗,成功后會看到 log 更新溜歪。

交易成功 log

4. 確認(rèn)余額更新

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


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

錯誤情況

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


交易失敗 log

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

1. 安裝 MetaMask

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

MetaMask
成功開啟后爬早,應(yīng)該會長這樣
記得選擇 Ropsten Test Net

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

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

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

3. 部署合約

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

用 MetaMask 發(fā)送交易

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

合約介面匈棘,當(dāng)然是長一樣

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


總結(jié)

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末使兔,一起剝皮案震驚了整個濱河市建钥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虐沥,老刑警劉巖熊经,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泽艘,死亡現(xiàn)場離奇詭異,居然都是意外死亡镐依,警方通過查閱死者的電腦和手機(jī)匹涮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槐壳,“玉大人然低,你說我怎么就攤上這事∥裉疲” “怎么了雳攘?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枫笛。 經(jīng)常有香客問我吨灭,道長,這世上最難降的妖魔是什么刑巧? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任喧兄,我火速辦了婚禮,結(jié)果婚禮上啊楚,老公的妹妹穿的比我還像新娘吠冤。我一直安慰自己,他們只是感情好恭理,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布拯辙。 她就那樣靜靜地躺著,像睡著了一般蚯斯。 火紅的嫁衣襯著肌膚如雪薄风。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天拍嵌,我揣著相機(jī)與錄音遭赂,去河邊找鬼。 笑死横辆,一個胖子當(dāng)著我的面吹牛撇他,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狈蚤,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼困肩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脆侮?” 一聲冷哼從身側(cè)響起锌畸,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靖避,沒想到半個月后潭枣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體比默,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年盆犁,在試婚紗的時候發(fā)現(xiàn)自己被綠了命咐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡谐岁,死狀恐怖醋奠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伊佃,我是刑警寧澤窜司,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站锭魔,受9級特大地震影響例证,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迷捧,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胀葱。 院中可真熱鬧漠秋,春花似錦、人聲如沸抵屿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轧葛。三九已至搂抒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尿扯,已是汗流浹背求晶。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留衷笋,地道東北人芳杏。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像辟宗,于是被迫代替她去往敵國和親爵赵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345