以太坊平臺智能合約開發之HelloWorld(2)

智能合約說的高大上,其實就是一段分布式執行的代碼;根據一定的輸入,執行確定的輸出;和任何編程語言一樣,都從一個hello world 開始,我們從hello ethereum開始吧!

環境配置

這里說的是mac平臺;其實很簡單。打開控制臺,簡單運行如下命令:
brew tap ethereum/ethereum brew install ethereum
提示,如果沒有安裝brew,可以在mac上安裝一下這個命令;

啟動

安裝完成之后,在終端中geth就可以用了;這個命令其實就是一個以太坊客戶端;
geth --datadir helloEthereum --dev console 2>>hello-eth-log.txt
啟動之后如下

image.png

命令解釋,可以參考geth幫助
geth --h
--datadir : 會在datadir后面緊跟的路徑下下面創建一個文件夾以保存區塊數據庫和秘鑰;
--dev :開發者模式,默認共識方法是POA,會自動創建一個挖礦賬號
再后面的意思,啟動命令行模式并輸出日志到log日志中。

如果想實時查看這個文件的內容,可以Command+T新建一個Tab頁,如果日志文件有更新,在tab頁中可以實時查看。


image.png

熟悉一下簡單的命令

查看賬戶
eth.accounts
或者
personal.listAccounts

image.png

效果是等價的!

查看金額
eth.getBalance(eth.accounts[0])
或者
eth.getBalance('0x8e3d0ddfe74009f33f0e8b44b3b03fb9b371b885')

image.png

新建賬號
personal.newAccount("bitwiki")
新建一個賬號,密碼是bitwiki

image.png

查看新賬余額
eth.getBalance("0x70ef644a8524d953d4a24c403ac637748ab388c6")

image.png

給新賬號轉賬
eth.sendTransaction({from:'0x8e3d0ddfe74009f33f0e8b44b3b03fb9b371b885',to:'0x70ef644a8524d953d4a24c403ac637748ab388c6',value:web3.toWei(10,'ether')})

image.png

這里做了一筆交易,日志文件就會顯示,已經挖了一個區塊


image.png

編寫智能合約

打開瀏覽器(最好chrom瀏覽器)
https://ethereum.github.io/browser-solidity/#optimize=false&version=soljson-v0.4.19+commit.c4cbbb05.js

智能合約如下(其實就是簡單的輸出)
`
pragma solidity ^0.4.0;
contract HelloWorld {
string message;

function HelloWorld(string _message) public {
     message = _message;   
}

function echo() public constant returns(string){
    return message;
}

}
`

image.png
image.png

當然,詳情里面還有很多其他信息,例如編譯目標版本、metadata、字節碼等;可以慢慢研究。
我們只需要部署版本的智能合約代碼即可,簡單修改
var _message = /* var of type string here */ ; var helloworldContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"echo","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); var helloworld = helloworldContract.new( _message, { from: web3.eth.accounts[1], data: '0x6060604052341561000f57600080fd5b6040516102b83803806102b8833981016040528080518201919050508060009080519060200190610041929190610048565b50506100ed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008957805160ff19168380011785556100b7565b828001600101855582156100b7579182015b828111156100b657825182559160200191906001019061009b565b5b5090506100c491906100c8565b5090565b6100ea91905b808211156100e65760008160009055506001016100ce565b5090565b90565b6101bc806100fc6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329f4acb014610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc61017c565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101725780601f1061014757610100808354040283529160200191610172565b820191906000526020600020905b81548152906001019060200180831161015557829003601f168201915b5050505050905090565b6020604051908101604052806000815250905600a165627a7a723058204af995fa7b3dbfa345a36b876cc7b21f1cb605ae8ce7e55af377ff151f030c9c0029', gas: '4700000' }, function (e, contract){ console.log(e, contract); if (typeof contract.address !== 'undefined') { console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } })

有兩個地方值得注意
1、 from: web3.eth.accounts[1], 這個代碼代表用哪一個賬戶部署合約,這里選擇第2個也就是我們新建的那個
2、var _message = /* var of type string here */ ; 把注釋去掉,改成'Hello Etherum'

回到控制臺(geth這個終端下面)
粘貼剛才的部署版本合約代碼,回車
如果不出意外,回報一個錯:

image.png

先解鎖賬戶
personal.unlockAccount(eth.accounts[1]),根據提示輸入密碼 bitwiki,當然,也可以把bitwiki密碼放在第二個參數中。

再次粘貼部署版本合約,回車,成功


image.png

運行合約

helloworld.echo();

image.png

部署了之后,你會發現賬戶余額,變少了 ?。。。?!

第一個智能合約就算完成了。雖然很簡單,但是流程算是走通了 ?。?!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文是對以太坊文檔 Ethereum Frontier Guide 和 Ethereum Homestead 的整...
    趁風卷閱讀 9,591評論 0 16
  • geth版本 1.5.4首先進入控制臺geth --datadir data console 1.定義合約sour...
    婁童閱讀 15,561評論 5 7
  • 一、區塊鏈 1. 分布式去中心化 比特幣設計的初衷就是要避免依賴中心化的機構,沒有發行機構,也不可能操縱發行數量。...
    Tenny1225閱讀 33,923評論 5 35
  • 這個有點莫名其妙的征文標題,其靈感,來自羽壇上的林李(林丹、李宗偉)對決。雖說有點牽強附會,不過至少也說明,哲學從...
    龍潭獨步閱讀 375評論 0 0
  • DNS查詢類型 從查詢方式上分 遞歸查詢:要么做到查詢成功響應,要么做出查詢失敗的響應。一般客戶機和服務器之間屬遞...
    靜候那一米陽光閱讀 329評論 0 5