前言
本文使用系統:centos7,
以太坊客戶端:geth
安裝
下載geth:
官方下載地址:https://geth.ethereum.org/downloads
直接下載:
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.9.6-bd059680.tar.gz
解壓
tar zxvf geth-linux-amd64-1.9.6-bd059680.tar.gz cd geth-linux-amd64-1.9.6-bd059680
移動
mv geth /usr/bin/
創建一個目錄用來存放區塊資料
mkdir /ethereum
常規配置
監聽埠
--port 30303 geth網路監聽埠 默認30303
設定區塊目錄
--datadir '/ethereum' --datadir選項指定在哪里存盤區塊資料 沒有提供則默認為家目錄下的.ethereum目錄,
指定網路
--networkid 1
--networkid指定網路ID 1代表主網路 2代表測驗網路 沒有提供則默認測驗網路,亂寫代表創建私有鏈
同步方式
--syncmode 'fast' --cache 1024 fast意為快速同步(同步區塊有full、fast、light三種模式,推薦fast,同步完成后geth會自動切換到full同步) --cache分配到內部快取的記憶體,單位MB,1024即為1G,
RPC配置
--rpc 啟用HTTP-RPC服務 --rpcaddr '0.0.0.0' HTTP-RPC服務白名單 默認localhost --rpcport 8545 HTTP-RPC服務監聽埠 默認8545 --rpcapi 'db,eth,net,web3' 這個命令決定允許什么API能夠通過PRC進入,默認情況下geth會激活IPC上所有API以及PRC的db,eth,net,web3API, --rpccorsdomain '*' 跨域,多個域名可用逗號分割,
搭建主鏈節點
星火節點
由于國內以太坊節點非常稀少,并且國內外網路不通暢等原因導致國內服務器同步區塊資料非常緩慢還容易丟包,由EthFans發起的星火節點計劃可以幫助我們加快同步速度,
下載節點串列:https://upyun-assets.ethfans.org/uploads/doc/file/b0c5266be42f43f1baf7207c432bede6.json?_upd=static-nodes.json
下載后將static-nodes.json檔案放在區塊存盤目錄下即可,
生成組態檔
geth --datadir '/ethereum' --networkid 1 --syncmode fast --cache 1024 --rpc --rpcaddr '0.0.0.0' --rpcport 8545 --rpcapi 'db,eth,net,web3' --rpccorsdomain '*' dumpconfig > /ethereum/geth_config
后臺啟動
nohup geth --config /ethereum/geth_config >> /var/log/geth.log 2>&1 &
監控區塊同步日志
tail -f /var/log/geth.log
我是4核8G帶寬10M的服務器同步了兩天半,占用硬碟190G,
當你看到日志里無窮無盡的 Imported state entries ...,不要急,你還需要繼續等待,,,
搭建私鏈環境
創世區塊
先創建幾個賬戶
geth --datadir /ethereum account new
創世區塊檔案
vim /ethereum/genesis.json
內容如下:
{ "config": { "chainId": 100, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "ethash": {} }, "nonce": "0x42", "timestamp": "0x0", "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "gasLimit": "0x1388", "difficulty": "0x1", "alloc": { "0xDFeDb94Ab496d6b68795dB890AcbbBdc2557860A": { "balance": "100000000000000000000000000000000" } } }
其中的 alloc 屬性是給賬戶分配余額 ,切記,余額是以wei為單位的,就是balance值要除以10的18次方才等于eth的數量,
初始化創世區塊
geth --datadir /ethereum init /ethereum/genesis.json
生成組態檔
geth --datadir '/ethereum' --networkid 100 --cache 512 --rpc --rpcaddr '0.0.0.0' --rpcport 8545 --rpcapi 'db,eth,net,web3,personal' --rpccorsdomain '*' --allow-insecure-unlock dumpconfig > /ethereum/geth_config
后臺啟動
nohup geth --config /ethereum/geth_config >> /var/log/geth.log 2>&1 &
JavaScript控制臺
進入控制臺
geth console --config /ethereum/geth_config 2>> /var/log/geth.log
如果你后臺啟動了geth則不能進入,它會提示你埠已占用,這時候可以使用鏈接節點的方式進入:
geth attach /ethereum/geth.ipc
此時進入了控制臺環境(退出控制臺使用exit;)
查看當前同步情況
eth.syncing
如果回傳的是false,證明同步完成了,可以使用當前節點,
否則會回傳同步狀態
currentBlock為當前下載到的區塊高度,請注意,下載塊不等于同步資料了,下載塊是一個簡單快速的程序,只驗證相關的作業量證明,在下載塊的同時geth也在一直下載所有的區塊資料,當資料下載完成后屆時才會處理曾經發生過的所有交易,重新組裝整個鏈,
查詢區塊高度
eth.blockNumber
fast方式有個特點,在完全完成同步之前,geth無法提供有關區塊或或賬戶資訊,所以會回傳0,
查詢某個區塊的資訊
eth.getBlock(39)
創建賬戶
personal.newAccount()
列出本地賬戶
eth.accounts
查余額
eth.getBalance('0xca3ac4f946b997db24515a7ae7779f2e587d5a26')
查到的余額除以18位小數就是真實的余額數字
我個人喜歡這么查
web3.fromWei(eth.getBalance('0x317188e4a00de2f689aEb79E9b7565DabEd360dB'), "ether");
解鎖賬戶
轉賬之前必須解鎖賬戶
personal.unlockAccount('0x317188e4a00de2f689aEb79E9b7565DabEd360dB','123456')
如果你解鎖出現這個錯
(anonymous): Line 1:24 Unexpected token ILLEGAL (and 3 more errors)
檢查一下,字串改成用單引號試試,別用雙引號,這個是巨坑,
如果你解鎖出現這個錯
Error: account unlock with HTTP access is forbidden
那么在啟動項中添加引數 --allow-insecure-unlock
轉賬
personal.sendTransaction({from: '0xfbe8bfaef37e49a278fbe760b9517ebbbec20eb8', to: '0x68d41149e5bbe35f3fe49cdb47474bf2e2ac5a55', value: web3.toWei(1,'ether')},'123456')
注意:燃費最少是21000,這個值必須要比eth.getBlock(最新塊) 中的gasLimit值要小,否則會報燃費太低或太高錯誤,也就是說,正常情況下,最新區塊的gasLimit值必須要大于21000才會轉賬成功,否則就繼續挖礦等待,
根據hash查詢交易詳情
eth.getTransaction('0xd7f78761ddd26468700d21cefb431cda19a03d3fe11e8b1b5af6c1df2470e5fb')
挖礦
設定挖礦賬戶
miner.setEtherbase('0x317188e4a00de2f689aEb79E9b7565DabEd360dB')
挖礦所得費用會自動進入該賬戶余額
開始挖礦
miner.start()
結束挖礦
miner.stop()
查看是否在挖礦
eth.mining
API呼叫
各編程語言現成類別庫
Java:https://github.com/web3j/web3j
Python:https://github.com/ethereum/web3.py
PHP:https://github.com/sc0Vu/web3.php
NodeJs:https://github.com/ethereum/web3.js
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/2168.html
標籤:區塊鏈
上一篇:ENS 域名注冊表智能合約(ENSRegistry.sol)決議
下一篇:區塊鏈
