以前有本身開發過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 來編譯和部署合約。