本文使用系統:centos7。php
以太坊客戶端:gethnode
下載geth:linux
官方下載地址:https://geth.ethereum.org/downloadsgit
直接下載:github
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.9.6-bd059680.tar.gz
解壓web
tar zxvf geth-linux-amd64-1.9.6-bd059680.tar.gz cd geth-linux-amd64-1.9.6-bd059680
移動編程
mv geth /usr/bin/
建立一個目錄用來存放區塊數據json
mkdir /ethereum
監聽端口vim
--port 30303 geth網絡監聽端口 默認30303
設置區塊目錄windows
--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 &
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纔會轉帳成功,不然就繼續挖礦等待。
eth.getTransaction('0xd7f78761ddd26468700d21cefb431cda19a03d3fe11e8b1b5af6c1df2470e5fb')
設置挖礦帳戶
miner.setEtherbase('0x317188e4a00de2f689aEb79E9b7565DabEd360dB')
挖礦所得費用會自動進入該帳戶餘額
開始挖礦
miner.start()
結束挖礦
miner.stop()
查看是否在挖礦
eth.mining
各編程語言現成類庫Java:https://github.com/web3j/web3jPython:https://github.com/ethereum/web3.pyPHP:https://github.com/sc0Vu/web3.phpNodeJs:https://github.com/ethereum/web3.js