摘要:原文地址石匠的為了測試以太坊智能合約,最方便的是在本地搭建一個以太坊私有鏈。網(wǎng)絡在連接到其他節(jié)點的時候會用到,以太坊公網(wǎng)的網(wǎng)絡是,為了不與公有鏈網(wǎng)絡沖突,運行私有鏈節(jié)點的時候要指定自己的網(wǎng)絡。當設置為表示使用發(fā)布該鏈。
原文地址: 石匠的blog
為了測試以太坊智能合約,最方便的是在本地搭建一個以太坊私有鏈。在mac上搭建環(huán)境主要需要以下步驟。
geth安裝geth是go-ethereum的簡寫,是一個用go語言編寫的以太坊客戶端,是在以太坊智能合約開發(fā)中最常用的命令行工具。
在mac上可以通過brew工具直接安裝:
brew tap ethereum/ethereum brew install ethereum
詳細的安裝說明也可以查看官方文檔。
安裝完成后,可以再mac的terminal中,用以下命令測試工具是否正常:
geth -h創(chuàng)建私有鏈創(chuàng)世區(qū)塊
為了創(chuàng)建一個自己測試的私有鏈,需要首先創(chuàng)建一個創(chuàng)世區(qū)塊,可以自定義創(chuàng)世區(qū)塊信息信息genesis.json:
{ "config": { "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {}, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x20000", "extraData": "", "gasLimit": "0x2fefd8", "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" }
區(qū)塊參數(shù)釋義:
chainId: 指定了獨立的區(qū)塊鏈網(wǎng)絡ID。網(wǎng)絡ID在連接到其他節(jié)點的時候會用到,以太坊公網(wǎng)的網(wǎng)絡ID是 1,為了不與公有鏈網(wǎng)絡沖突,運行私有鏈節(jié)點的時候要指定自己的網(wǎng)絡ID。不同ID網(wǎng)絡的節(jié)點無法相互連接。 HomesteadBlock: 當設置為0表示使用Homestead發(fā)布該鏈。 nonce: 一個64位隨機數(shù),用于挖礦,注意它和mixhash的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。 mixhash: 與nonce配合用于挖礦,由上一個區(qū)塊的一部分生成的hash。注意它和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。 difficulty: 設置設置當前區(qū)塊的難度,值越大挖礦就越難。 alloc: 用來預置賬號以及賬號的以太幣數(shù)量。 coinbase: 礦工賬號 timestamp: 設置創(chuàng)世塊的時間戳 parentHash: 上一個區(qū)塊的hash,創(chuàng)世塊就為0 extraData: 附加信息,自己可以填寫任意信息 gasLimit: 該值設置對GAS的消耗總量限制,用來限制區(qū)塊能包含的交易信息總和
找一個合適的目錄,執(zhí)行命令,創(chuàng)建創(chuàng)世區(qū)塊:
geth --datadir "./" init genesis.json
運行成功后會在當前目錄創(chuàng)建geth和keystore兩個文件夾
geth目錄:保存鏈上的區(qū)塊數(shù)據(jù)
keystore目錄:保存鏈上的用戶信息
私有鏈測試 啟動私有鏈前面建立創(chuàng)世區(qū)塊成功后,啟動區(qū)塊鏈程序:
geth --datadir "./" --nodiscover console 2>>geth.log
相關參數(shù):
--nodiscover 使用這個參數(shù),你的節(jié)點就不會被其他人發(fā)現(xiàn),除非手動添加你的節(jié)點。否則,就只有一個被無意添加到一個陌生區(qū)塊鏈上的機會,那就是跟你有相同的genesis文件和networkID。 --maxpeers 0 如果你不想有人連上你的測試鏈,就用maxpeers 0。或者,你可以調整參數(shù),當你確切的知道有幾個節(jié)點要連接上來的時候。 --rpc 允許RPC操作你的節(jié)點。這個參數(shù)在Geth上是默認的。 --rpcapi "db,eth,net,web3" 這個命令指示了允許通過RPC訪問的命令。默認情況下,Geth允許web3。 --rpcport "8080" --rpccorsdomain "http://chriseth.github.io/browser-solidity/" --datadir "/home/TestChain1" 私有鏈存放路徑(最好跟公有鏈路徑不同) --port "30303" 網(wǎng)絡監(jiān)聽端口,用來和其他節(jié)點手動連接 --identity “TestnetMainNode" 用來標識你的節(jié)點的,方便在一大群節(jié)點中識別出自己的節(jié)點
console指定了啟動成功后進入命令行界面,2>>將日志重定向到geth.log中,不然日志也會輸出到界面上,會和命令行界面混在一起,不方便命令行測試。
創(chuàng)建賬號在命令行中創(chuàng)建賬號:
>personal.newAccount()
然后會提示輸入賬號密碼,成功后會返回一個賬號地址,比如:0xc7ca64442b98cbfdb6f056841ccd40f8b7f054bb
也可以通過給newAccount傳遞密碼作為參數(shù),一次性完成創(chuàng)建:
>personal.newAccount("123456")查看余額
查看賬戶的余額:
>eth.getBalance("0xc7ca64442b98cbfdb6f056841ccd40f8b7f054bb")挖礦
開始挖礦:
>miner.start()
開始后,可以tailf geth.log看看挖礦初始化是否成功,以及挖礦過程細節(jié)。
停止挖坑:
>miner.stop()轉賬
將一個賬戶的代幣轉移到另外一個賬戶,需要通過事務接口完成 eth.sendTransaction({from: acc0, to: acc1, value: amount}),比如:
>eth.sendTransaction({from: "0x01b5ecbcd8d46c1a9ee52e8b8a30bb6426dffb1b", to: "0xe6e4e20c95abc11dca8b3e9c292a34725bf89930", value: 20})
轉出的賬戶需要密碼解鎖,不然會發(fā)生類似以下錯誤:
Error: authentication needed: password or unlock at web3.js:3143:20 at web3.js:6347:15 at web3.js:5081:36 at:1:1
很好理解,如果轉出別人賬戶的代幣,不需要密碼驗證,那就毫無安全可言了,可以通過以下方式,解鎖賬戶后繼續(xù)轉賬:
>personal.unlockAccount("0xab04698365ed79ef22921edad8f6f516ca40cecb")
轉賬完成后,可以通過eth.getBalance()查看余額,但是馬上查詢卻發(fā)現(xiàn)并沒有變化,這是因為sendTransaction這是發(fā)起了一筆交易事務,還沒有得到確認,只是將這個事務放到了待提交池中。區(qū)塊鏈的機制中是新創(chuàng)建區(qū)塊的時候,會就從事務池中找出所有事務,進行有效性驗證,驗證成功后進行挖礦并將所有相關事務打包到區(qū)塊中,待新的去區(qū)塊成功加入到區(qū)塊鏈中后,之前的轉賬就得到了最終的確認和永久固話。
所以,sendTransaction成功后,需要調用挖礦命令miner.start()創(chuàng)建區(qū)塊,然后再查看余額會發(fā)現(xiàn)轉賬金額變化已經(jīng)生效。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/95605.html
摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接如何搭建以太坊私有鏈原文已更新,請讀者前往原文閱讀在開發(fā)以太坊時,很多時候需要搭建一條以太坊私有鏈,通過本文一起看看如何在上進行搭建。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:如何搭建以太坊私有鏈原文已更新,請讀者前往原文閱讀 在開發(fā)以太坊時,很多時候需要搭建一條以太坊私有鏈,通過本文一起看看如何在Mac上進行搭建。 寫在前面 閱讀本文前,你應該對以太...
摘要:打開私有鏈文件夾下的日志文件,大概在行左右有個的地址。命令行啟動命令私有鏈地址這樣啟動鏈接的倉庫就是私有鏈了。 先上一張搭建好的私有鏈,Ethereum Wallet連接后的效果圖 showImg(https://segmentfault.com/img/remote/1460000013635764); 待安裝系統(tǒng)環(huán)境 系統(tǒng):macOS 10.13.2Ethereum Wallet版...
摘要:本文所搭建的環(huán)境是在上的開發(fā)環(huán)境,其他操作系統(tǒng)上與此非常相似,依然有參考價值。作為一枚區(qū)塊鏈開發(fā)工程師,本地的開發(fā)環(huán)境是必不可少的。因為我們是私有鏈,所以可以寫的大一些,方便開發(fā)測試。 本文所搭建的環(huán)境是在 Mac 上的開發(fā)環(huán)境,其他操作系統(tǒng)上與此非常相似,依然有參考價值。 作為一枚區(qū)塊鏈開發(fā)工程師,本地的開發(fā)環(huán)境是必不可少的。我們首先看看需要哪些工具: go-ethereum so...
摘要:本文所搭建的環(huán)境是在上的開發(fā)環(huán)境,其他操作系統(tǒng)上與此非常相似,依然有參考價值。作為一枚區(qū)塊鏈開發(fā)工程師,本地的開發(fā)環(huán)境是必不可少的。因為我們是私有鏈,所以可以寫的大一些,方便開發(fā)測試。 本文所搭建的環(huán)境是在 Mac 上的開發(fā)環(huán)境,其他操作系統(tǒng)上與此非常相似,依然有參考價值。 作為一枚區(qū)塊鏈開發(fā)工程師,本地的開發(fā)環(huán)境是必不可少的。我們首先看看需要哪些工具: go-ethereum so...
摘要:和比特幣協(xié)議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區(qū)塊鏈的商業(yè)應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發(fā)機構負責簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...
閱讀 2083·2019-08-30 15:52
閱讀 2475·2019-08-29 18:37
閱讀 830·2019-08-29 12:33
閱讀 2870·2019-08-29 11:04
閱讀 1586·2019-08-27 10:57
閱讀 2127·2019-08-26 13:38
閱讀 2793·2019-08-26 12:25
閱讀 2484·2019-08-26 12:23