以太坊智能合約開發筆記

以前有本身開發過Ethereum 智能合約,但沒有好好紀錄開發的過程和碰到的問題,以爲滿惋惜。此次想從新開始,從最傻的姿式開始,一步步成長。web

本篇但願將一個很簡單的代幣合約(只能發行和轉帳),部署在本地和測試網絡上,並測試其功能。編程

教練,我」只」想學Solidity這篇也是用 Remix 和 MetaMask 部署合約到測試網絡,已經瞭解這篇應該能夠直接 end。本篇是較詳細描述使用 Remix 的步驟及使用上可能碰到的問題。瀏覽器

開發環境
不須要安裝,直接在任何瀏覽器開啓 Remix。網絡

Remix 是一個 Open Source 的 Solidity 智能合約開發環境,提供基本的編譯、部署至本地或測試網絡、執行合約等功能。Solidity 是 Ethereum 官方設計和支持的程序語言,專門用於編寫智能合約。app

-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 合約真的很傻,只能作兩件事:ui

創造代幣:發起合約時創造指定數量的代幣,代幣擁有者是發起合約的 Ethereum 帳戶
轉移代幣:轉移指定數量的代幣到指定的 Ethereum 帳戶
至於一個完整的代幣合約,可參考ERC20 Token使用手冊。設計

使用 Remix 編譯合約
1.點選右上角 + 新增一個檔案
名稱任意只要擴展名是 「.sol」。

2.複製合約內容到該檔案並編譯
Remix 預設會自動編譯,旁邊沒有跳出紅色的 ERROR 就表明編譯成功。

-編譯合約成功-

在本地部署合約
1.設定網絡
點選左邊上面的 run。

-Run-

Environment 選擇 JavaScript VM 表明全部數據都是存在本地內存(功能相似 testrpc)。它會提供 5 個虛擬帳戶每一個有 100ETH,隨便選一個帳戶(要記住)。

-Testing Account-

2.發送交易部署合約
選擇 MyToken。能夠看到 create 按鈕。且已根據合約內容顯示必須填入 initialSupply (也就是要發行的代幣數量)。輸入一個數目並按 create,就會發送交易部署合約。

-Create-

合約部署成功後,能夠看到合約的使用接口。Remix 會自動根據合約的內容,產生對應的合約使用接口。能夠看到合約有兩個功能:balanceOf(查詢餘額) 和 transfer(轉移代幣)。

-合約界面-

底下能夠看到 log(紀錄每一次的操做)。實際上部署合約是透過一個 Ethereum 交易完成,點 Details 能夠看到該筆交易詳細數據。

-Log-

執行合約 — 查詢餘額
1.選擇剛剛發起合約的帳戶
-可點選賬戶右邊的圖示覆制-

2.輸入帳戶
注意要用 「」把賬戶包起來,範例:

"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
3.點擊 balanceOf
能夠在旁邊看到執行結果,也就是目前這個帳戶的代幣餘額。

-查詢餘額成功-

錯誤狀況
說明一下,由於數據傳送是用JSON 格式,因此要加上 「」。若是忘記輸入 「」 就會在 log 看到錯誤:

-JSON 參數格式錯誤-

執行合約 — 轉移代幣
1.選擇要轉出的帳戶
選擇剛剛發起合約的帳戶。

-可點選賬戶右邊的圖示覆制-

2.輸入要轉入的帳戶
選擇並複製另外一個帳戶。在合約接口 transfer 後面的字段,輸入轉入帳戶和要轉移的代幣數量。賬戶一樣用「」 包起來,範例:

"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db",10
3.點擊 transfer
點擊 transfer,成功後會看到 log 更新。

-交易執行成功 log-

4.確認餘額更新
再查詢轉入帳戶的餘額,就能夠看到代幣餘額增長啦!

-轉入帳戶餘額增長-

錯誤狀況
若是選擇要轉出的帳戶代幣餘額不足,這筆交易會失敗,就會在 log 看到錯誤。

-交易執行失敗 log-

在測試網絡部署合約
1.安裝 MetaMask
首先,要連到測試網絡,就要安裝 MetaMask。他是瀏覽器端的 Ethereum 錢包,能夠連接 Ethereum 主要和測試網絡。安奘後須要創建 Ethereum 帳戶,教練,我」只」想學Solidity 這篇有詳細的步驟。

-MetaMask-

-成功開啓後,應該會長這樣-

-記得選擇 RopstenTest Net-

2.選擇測試網絡
回到 Remix,此次 Environment 選擇 Injected Web3,Remix 會自動連結 MetaMask。

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

3.部署合約
接着用剛纔一樣的方式,按create 部署合約,就會看到MetaMask 的彈出窗口。直接按submit 發送交易。

-用 MetaMask 發送交易-

稍等一點時間(由於要等這個交易被確認),部署成功後合約的使用接口就會跑出來。

-合約接口,固然是長同樣-

就能夠用一樣的方式使用合約啦!

總結
Remix 提供一個 Solidity 智能合約的開發環境,能夠簡易的編譯、部署、執行甚至除錯,適合編程經驗很少的初學者。但沒法作到版本控制、測試及和其餘開發工具一塊兒使用等,實際要開發 DApp 的話會比較不方便。下一篇會參考如下文章:

BUILDING AND TESTING A FRONTEND APP WITHTRUFFLE
Truffle3.0集成NodeJS並徹底跑通(附詳細實例,可能的錯誤)
利用工具加速Dapp建置和測試
使用 Truffle三、Ganache、web3.js 來編譯和部署合約。

原文連接: https://medium.com/taipei-ethereum-meetup/ethereum-%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84%E9%96%8B%E7%99%BC%E7%AD%86%E8%A8%98-%E7%B7%A8%E8%AD%AF%E5%92%8C%E9%83%A8%E7%BD%B2%E5%90%88%E7%B4%84%E7%9A%84%E7%AC%AC%E4%B8%80%E7%A8%AE%E5%A7%BF%E5%8B%A2-%E4%BD%BF%E7%94%A8-remix-4528164d0fde 做者: Anderson

相關文章
相關標籤/搜索