成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何搭建以太坊私有鏈

J4ck_Chan / 3150人閱讀

摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接如何搭建以太坊私有鏈原文已更新,請(qǐng)讀者前往原文閱讀在開發(fā)以太坊時(shí),很多時(shí)候需要搭建一條以太坊私有鏈,通過(guò)本文一起看看如何在上進(jìn)行搭建。

本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)
原文鏈接:如何搭建以太坊私有鏈原文已更新,請(qǐng)讀者前往原文閱讀

在開發(fā)以太坊時(shí),很多時(shí)候需要搭建一條以太坊私有鏈,通過(guò)本文一起看看如何在Mac上進(jìn)行搭建。

寫在前面

閱讀本文前,你應(yīng)該對(duì)以太坊語(yǔ)言有所了解,如果你還不了解,建議你先看以太坊是什么

go-ethereum客戶端安裝

Go-ethereum客戶端通常被稱為Geth,它是個(gè)命令行界面,執(zhí)行在Go上實(shí)現(xiàn)的完整以太坊節(jié)點(diǎn)。Geth得益于Go語(yǔ)言的多平臺(tái)特性,支持在多個(gè)平臺(tái)上使用(比如Windows、Linux、Mac)。Geth是以太坊協(xié)議的具體落地實(shí)現(xiàn),通過(guò)Geth,你可以實(shí)現(xiàn)以太坊的各種功能,如賬戶的新建編輯刪除,開啟挖礦,ether幣的轉(zhuǎn)移,智能合約的部署和執(zhí)行等等。所以,我們選擇geth工具來(lái)進(jìn)行開發(fā)。由于本人是mac,所以優(yōu)先使用mac進(jìn)行開發(fā)啦。mac中g(shù)eth安裝如下:

brew tap ethereum/ethereum
brew install ethereum

檢查是否安裝成功

geth --help

如果輸出一些幫助提示命令,則說(shuō)明安裝成功。
其他平臺(tái)可參考Geth 安裝

搭建私有鏈

以太坊支持自定義創(chuàng)世區(qū)塊,要運(yùn)行私有鏈,我們就需要定義自己的創(chuàng)世區(qū)塊,創(chuàng)世區(qū)塊信息寫在一個(gè)json格式的配置文件中。首先將下面的內(nèi)容保存到一個(gè)json文件中,例如genesis.json。
json文件內(nèi)容如下:

{
  "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"
}
初始化:寫入創(chuàng)世區(qū)塊

準(zhǔn)備好創(chuàng)世區(qū)塊json配置文件后,需要初始化區(qū)塊鏈,將上面的創(chuàng)世區(qū)塊信息寫入到區(qū)塊鏈中。首先要新建一個(gè)目錄data0用來(lái)存放區(qū)塊鏈數(shù)據(jù)(其實(shí),這個(gè)目錄data0就相當(dāng)于一個(gè)根節(jié)點(diǎn)。當(dāng)我們基于genesis.json生成根節(jié)點(diǎn)后,其他人就可以來(lái)連接此根節(jié)點(diǎn),從而能進(jìn)行交易)。data0目錄結(jié)構(gòu)如圖所示:

接下來(lái)進(jìn)入privatechain目錄中,執(zhí)行初始化命令:

cd privatechain
geth --datadir data0 init genesis.json

上面的命令的主體是 geth init,表示初始化區(qū)塊鏈,命令可以帶有選項(xiàng)和參數(shù),其中--datadir選項(xiàng)后面跟一個(gè)目錄名,這里為 data0,表示指定數(shù)據(jù)存放目錄為 data0, genesis.json是init命令的參數(shù)。

運(yùn)行上面的命令,會(huì)讀取genesis.json文件,根據(jù)其中的內(nèi)容,將創(chuàng)世區(qū)塊寫入到區(qū)塊鏈中。如果看到log信息中含有Successfully wrote genesis state字樣,說(shuō)明初始化成功。

初始化成功后的目錄如下:

其中g(shù)eth/chaindata中存放的是區(qū)塊數(shù)據(jù),keystore中存放的是賬戶數(shù)據(jù)。

啟動(dòng)私有鏈節(jié)點(diǎn)

初始化完成后,就有了一條自己的私有鏈,之后就可以啟動(dòng)自己的私有鏈節(jié)點(diǎn)并做一些操作,在終端中輸入以下命令即可啟動(dòng)節(jié)點(diǎn):

geth --datadir data0 --networkid 1108 console

上面命令的主體是geth console,表示啟動(dòng)節(jié)點(diǎn)并進(jìn)入交互式控制臺(tái),--datadir選項(xiàng)指定使用data0作為數(shù)據(jù)目錄,--networkid選項(xiàng)后面跟一個(gè)數(shù)字,這里是1108,表示指定這個(gè)私有鏈的網(wǎng)絡(luò)id為1108。網(wǎng)絡(luò)id在連接到其他節(jié)點(diǎn)的時(shí)候會(huì)用到,以太坊公網(wǎng)的網(wǎng)絡(luò)id是1,為了不與公有鏈網(wǎng)絡(luò)沖突,運(yùn)行私有鏈節(jié)點(diǎn)的時(shí)候要指定自己的網(wǎng)絡(luò)id(上面命令可能會(huì)運(yùn)行失敗,我直接重啟mac,再進(jìn)入到privateChain目錄中,簡(jiǎn)單粗暴)。

運(yùn)行上面的命令后,就啟動(dòng)了區(qū)塊鏈節(jié)點(diǎn)并進(jìn)入了Javascript Console:

這是一個(gè)交互式的Javascript執(zhí)行環(huán)境,在這里面可以執(zhí)行Javascript代碼,其中>是命令提示符。在這個(gè)環(huán)境里也內(nèi)置了一些用來(lái)操作以太坊的Javascript對(duì)象,可以直接使用這些對(duì)象。這些對(duì)象主要包括:

eth:包含一些跟操作區(qū)塊鏈相關(guān)的方法
net:包含以下查看p2p網(wǎng)絡(luò)狀態(tài)的方法
admin:包含一些與管理節(jié)點(diǎn)相關(guān)的方法
miner:包含啟動(dòng)&停止挖礦的一些方法
personal:主要包含一些管理賬戶的方法
txpool:包含一些查看交易內(nèi)存池的方法
web3:包含了以上對(duì)象,還包含一些單位換算的方法

玩轉(zhuǎn)Javascript Console

進(jìn)入以太坊Javascript Console后,就可以使用里面的內(nèi)置對(duì)象做一些操作,這些內(nèi)置對(duì)象提供的功能很豐富,比如查看區(qū)塊和交易、創(chuàng)建賬戶、挖礦、發(fā)送交易、部署智能合約等。接下來(lái)介紹幾個(gè)常用功能,下面的操作中,前面帶>的表示在Javascript Console中執(zhí)行的命令。

創(chuàng)建賬戶

前面只是搭建了私有鏈,并沒(méi)有自己的賬戶,可以在js console中輸入eth.accounts來(lái)驗(yàn)證:

> eth.accounts
[]

此時(shí)沒(méi)有賬戶,接下來(lái)使用personal對(duì)象來(lái)創(chuàng)建一個(gè)賬戶:

> personal.newAccount()
> Passphrase:
> Repeat passphrase:
"0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f"

Passphrase其實(shí)就是密碼的意思,輸入兩次密碼后,就創(chuàng)建了一個(gè)賬戶。再次執(zhí)行命令:

> personal.newAccount()
> Passphrase:
> Repeat passphrase:
"0x46b24d04105551498587e3c6ce2c3341d5988938"

這時(shí)候再去看賬戶,就有兩個(gè)了。

> eth.accounts
["0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f", "0x46b24d04105551498587e3c6ce2c3341d5988938"]

賬戶默認(rèn)會(huì)保存在數(shù)據(jù)目錄的keystore文件夾中。查看目錄結(jié)構(gòu),發(fā)現(xiàn)data0/keystore中多了兩個(gè)文件,這兩個(gè)文件就對(duì)應(yīng)剛才創(chuàng)建的兩個(gè)賬戶,這是json格式的文本文件,可以打開查看,里面存的是私鑰經(jīng)過(guò)密碼加密后的信息。


json文件中信息格式如下:

{
  "address": "4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
  "crypto": {
    "cipher": "aes-128-ctr",
    "ciphertext": "238d6d48126b762c8f13e84622b1bbb7713f7244c2f24555c99b76396fae8355",
    "cipherparams": {
      "iv": "d0f5a3d3e6c1eeec77bf631bc938725d"
    },
    "kdf": "scrypt",
    "kdfparams": {
      "dklen": 32,
      "n": 262144,
      "p": 1,
      "r": 8,
      "salt": "70dc72c4eb63bea50f7637d9ff85bb53f6ca8ace17f4245feae9c0bc9abaad82"
    },
    "mac": "bd7fc0c937c39f1cbbf1ca654c33b53d7f9c644c6dacfeefe1641d2f3decea04"
  },
  "id": "57803d82-0cd4-4a78-9c29-9f9252fdcf60",
  "version": 3
}
查看賬戶余額

eth對(duì)象提供了查看賬戶余額的方法:

> eth.getBalance(eth.accounts[0])
0
> eth.getBalance(eth.accounts[1])
0

目前兩個(gè)賬戶的以太幣余額都是0,要使賬戶有余額,可以從其他賬戶轉(zhuǎn)賬過(guò)來(lái),或者通過(guò)挖礦來(lái)獲得以太幣獎(jiǎng)勵(lì)。

啟動(dòng)&停止挖礦

通過(guò)miner.start()來(lái)啟動(dòng)挖礦:

> miner.start(10)

其中start的參數(shù)表示挖礦使用的線程數(shù)。第一次啟動(dòng)挖礦會(huì)先生成挖礦所需的DAG文件,這個(gè)過(guò)程有點(diǎn)慢,等進(jìn)度達(dá)到100%后,就會(huì)開始挖礦,此時(shí)屏幕會(huì)被挖礦信息刷屏。

如果想停止挖礦,并且進(jìn)度已經(jīng)達(dá)到100%之后,可以在js console中輸入

miner.stop():

注意:輸入的字符會(huì)被挖礦刷屏信息沖掉,沒(méi)有關(guān)系,只要輸入完整的miner.stop()之后回車,即可停止挖礦。

挖到一個(gè)區(qū)塊會(huì)獎(jiǎng)勵(lì)5個(gè)以太幣,挖礦所得的獎(jiǎng)勵(lì)會(huì)進(jìn)入礦工的賬戶,這個(gè)賬戶叫做coinbase,默認(rèn)情況下coinbase是本地賬戶中的第一個(gè)賬戶:

> eth.coinbase
"0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f"

現(xiàn)在的coinbase是賬戶0,要想使挖礦獎(jiǎng)勵(lì)進(jìn)入其他賬戶,通過(guò)miner.setEtherbase()將其他賬戶設(shè)置成coinbase即可:

> miner.setEtherbase(eth.accounts[1])
true
> eth.coinbase
"0x46b24d04105551498587e3c6ce2c3341d5988938"

挖到區(qū)塊以后,賬戶0里面應(yīng)該就有余額了:

> eth.getBalance(eth.accounts[0])
2.31e+21

getBalance()返回值的單位是wei,wei是以太幣的最小單位,1個(gè)以太幣=10的18次方個(gè)wei。要查看有多少個(gè)以太幣,可以用web3.fromWei()將返回值換算成以太幣:

> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
2310
發(fā)送交易

截止目前,賬戶一的余額還是0:

> eth.getBalance(eth.accounts[1])
0

可以通過(guò)發(fā)送一筆交易,從賬戶0轉(zhuǎn)移10個(gè)以太幣到賬戶1:

> amount = web3.toWei(10,"ether")
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
Error: authentication needed: password or unlock
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at :1:1

這里報(bào)錯(cuò)了,原因是賬戶每隔一段時(shí)間就會(huì)被鎖住,要發(fā)送交易,必須先解鎖賬戶,由于我們要從賬戶0發(fā)送交易,所以要解鎖賬戶0:

> personal.unlockAccount(eth.accounts[0])
Unlock account 0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f
Passphrase: 
true

輸入創(chuàng)建賬戶時(shí)設(shè)置的密碼,就可以成功解鎖賬戶。然后再發(fā)送交易:

> amount = web3.toWei(10,"ether")
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [03-07|11:13:11] Submitted transaction                    fullhash=0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6 recipient=0x46B24d04105551498587e3C6CE2c3341d5988938
"0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6"

我們?nèi)ゲ榭促~戶1中的余額:

> eth.getBalance(eth.accounts[1])
0

發(fā)現(xiàn)還沒(méi)轉(zhuǎn)過(guò)去,此時(shí)交易已經(jīng)提交到區(qū)塊鏈,但還未被處理,這可以通過(guò)查看txpool來(lái)驗(yàn)證:

> txpool.status
{
  pending: 1,
  queued: 0
}

其中有一條pending的交易,pending表示已提交但還未被處理的交易。

要使交易被處理,必須要挖礦。這里我們啟動(dòng)挖礦,然后等待挖到一個(gè)區(qū)塊之后就停止挖礦:

> miner.start(1);admin.sleepBlocks(1);miner.stop();

當(dāng)miner.stop()返回true后,txpool中pending的交易數(shù)量應(yīng)該為0了,說(shuō)明交易已經(jīng)被處理了,而賬戶1應(yīng)該收到幣了:

> web3.fromWei(eth.getBalance(eth.accounts[1]),"ether")
10
查看交易和區(qū)塊

eth對(duì)象封裝了查看交易和區(qū)塊信息的方法。

查看當(dāng)前區(qū)塊總數(shù):

> eth.blockNumber
463

通過(guò)區(qū)塊號(hào)查看區(qū)塊:

> eth.getBlock(66)
{
  difficulty: 135266,
  extraData: "0xd783010802846765746886676f312e31308664617277696e",
  gasLimit: 3350537,
  gasUsed: 0,
  hash: "0x265dfcc0649bf6240812256b2b9b4e3ae48d51fd8e43e25329ac111556eacdc8",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
  mixHash: "0xaf755722f62cac9b483d3437dbc795f2d3a02e28ec03d39d8ecbb6012906263c",
  nonce: "0x3cd80f6ec5c2f3e9",
  number: 66,
  parentHash: "0x099776a52223b892d13266bb3aec3cc04c455dc797185f0b3300d39f9fc0a8ec",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 535,
  stateRoot: "0x0c9feec5a201c8c98618331aecbfd2d4d93da1c6064abd0c41ae649fc08d8d06",
  timestamp: 1520391527,
  totalDifficulty: 8919666,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

通過(guò)交易hash查看交易:

> eth.getTransaction("0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6")
{
  blockHash: "0x1cb368a27cc23c786ff5cdf7cd4351d48f4c8e8aea2e084a5e9d7c480449c79a",
  blockNumber: 463,
  from: "0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
  gas: 90000,
  gasPrice: 18000000000,
  hash: "0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6",
  input: "0x",
  nonce: 0,
  r: "0x31d22686e0d408a16497becf6d47fbfdffe6692d91727e5b7ed3d73ede9e66ea",
  s: "0x7ff7c14a20991e2dfdb813c2237b08a5611c8c8cb3c2dcb03a55ed282ce4d9c3",
  to: "0x46b24d04105551498587e3c6ce2c3341d5988938",
  transactionIndex: 0,
  v: "0x38",
  value: 10000000000000000000
}

? 深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。

? 我的知識(shí)星球為各位解答區(qū)塊鏈技術(shù)問(wèn)題,歡迎加入討論。

? 關(guān)注公眾號(hào)“深入淺出區(qū)塊鏈技術(shù)”第一時(shí)間獲取區(qū)塊鏈技術(shù)信息。

深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24088.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.41 - 深入學(xué)習(xí)區(qū)塊

    摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計(jì)十分靈活,極具適應(yīng)性。超級(jí)賬本區(qū)塊鏈的商業(yè)應(yīng)用超級(jí)賬本超級(jí)賬本是基金會(huì)下的眾多項(xiàng)目中的一個(gè)。證書頒發(fā)機(jī)構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個(gè)故事告訴你比特幣的原理及運(yùn)作機(jī)制 這篇文章的定位會(huì)比較科普,盡量用類比的方法將比特幣的基本原理講出來(lái)...

    qianfeng 評(píng)論0 收藏0
  • Mac環(huán)境搭建以太私有

    摘要:原文地址石匠的為了測(cè)試以太坊智能合約,最方便的是在本地搭建一個(gè)以太坊私有鏈。網(wǎng)絡(luò)在連接到其他節(jié)點(diǎn)的時(shí)候會(huì)用到,以太坊公網(wǎng)的網(wǎng)絡(luò)是,為了不與公有鏈網(wǎng)絡(luò)沖突,運(yùn)行私有鏈節(jié)點(diǎn)的時(shí)候要指定自己的網(wǎng)絡(luò)。當(dāng)設(shè)置為表示使用發(fā)布該鏈。 原文地址: 石匠的blog 為了測(cè)試以太坊智能合約,最方便的是在本地搭建一個(gè)以太坊私有鏈。在mac上搭建環(huán)境主要需要以下步驟。 geth安裝 geth是go-ether...

    張金寶 評(píng)論0 收藏0
  • 以太創(chuàng)世區(qū)塊與配置載入分析

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊創(chuàng)世區(qū)塊與鏈配置載入分析,原文已更新,請(qǐng)讀者前往原文閱讀。以太坊允許通過(guò)創(chuàng)世配置文件來(lái)初始化創(chuàng)世區(qū)塊,也可使用選擇使用內(nèi)置的多個(gè)網(wǎng)絡(luò)環(huán)境的創(chuàng)世配置。再準(zhǔn)備兩個(gè)以太坊賬戶,以便在創(chuàng)世時(shí)存入資產(chǎn)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊創(chuàng)世區(qū)塊與鏈配置載入分析,原文已更新,請(qǐng)讀者前往原文閱讀。 創(chuàng)世區(qū)塊作為第零個(gè)區(qū)塊,其他區(qū)塊直接或間接引用到...

    姘擱『 評(píng)論0 收藏0
  • 以太是什么 - 以太開發(fā)入門指南

    摘要:以太坊是什么以太坊是一個(gè)建立在區(qū)塊鏈技術(shù)之上,去中心化應(yīng)用平臺(tái)。運(yùn)行環(huán)境以太坊虛擬機(jī)是以太坊中智能合約的運(yùn)行環(huán)境。是由以太坊客戶端提供的是典型的開發(fā)以太坊時(shí)使用的客戶端,基于語(yǔ)言開發(fā)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊是什么 - 以太坊開發(fā)入門指南原文已更新,請(qǐng)讀者前往原文閱讀 很多同學(xué)已經(jīng)躍躍欲試投入到區(qū)塊鏈開發(fā)隊(duì)伍當(dāng)中來(lái),可是又感覺(jué)無(wú)從下手,本文將基于以太坊平臺(tái),以通俗...

    tomlingtm 評(píng)論0 收藏0
  • 區(qū)塊技術(shù)學(xué)習(xí)指引

    摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個(gè)指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場(chǎng)景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請(qǐng)讀者前往原文閱讀 本章的文章越來(lái)越多,本文是一個(gè)索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...

    Cristic 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<