1. 程式人生 > >從頭到尾使用Geth的說明-3-geth引數說明和環境配置 rinkeby測試網路的連線 Rinkeby中測試幣的申請

從頭到尾使用Geth的說明-3-geth引數說明和環境配置 rinkeby測試網路的連線 Rinkeby中測試幣的申請

 1.引數說明

ETHEREUM選項:
  --config value                        TOML 配置檔案
  --datadir "/home/user4/.ethereum"  資料庫和keystore金鑰的資料目錄
  --keystore                            keystore存放目錄(預設在datadir內)
  --nousb                               禁用監控和管理USB硬體錢包
  --networkid value                     網路識別符號(整型, 1
=Frontier, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby) (預設: 1) --testnet Ropsten網路:預配置的POW(proof-of-work)測試網路 --rinkeby RRinkeby網路: 預配置的POA(proof-of-authority)測試網路 --syncmode "fast" 同步模式 ("fast", "full", or "light") --gcmode value 區塊鏈垃圾收集模式 ("
full", "archive") (default: "full") --ethstats value 上報ethstats service URL (nodename:[email protected]:port) --identity value 自定義節點名 --lightserv value 允許LES請求時間最大百分比(090)(預設值:0) --lightpeers value 最大LES client peers數量(預設值:100
) --lightkdf 在KDF強度消費時降低key-derivation RAM&CPU使用 --whitelist value 使用逗號分隔的塊編號到hash的對映來執行(<number>=<hash>) 開發鏈選項: --dev 使用POA共識網路,預設預分配一個開發者賬戶並且會自動開啟挖礦 --dev.period value 開發者模式下挖礦週期 (0 = 僅在交易pending時進行挖礦) (預設: 0) ETHASH選項: --ethash.cachedir ethash驗證快取目錄(預設 = datadir目錄內) --ethash.cachesinmem value 在記憶體儲存的最近的ethash快取個數 (每個快取16MB ) (預設: 2) --ethash.cachesondisk value 在磁碟儲存的最近的ethash快取個數 (每個快取16MB) (預設: 3) --ethash.dagdir "/home/user4/.ethash" 存ethash DAGs目錄 (default = inside home folder) --ethash.dagsinmem value 在記憶體儲存的最近的ethash DAGs 個數 (每個1GB以上) (預設: 1) --ethash.dagsondisk value 在磁碟儲存的最近的ethash DAGs 個數 (每個1GB以上) (預設: 2) 交易池選項: --txpool.locals value 將逗號分隔的帳戶視為區域性變數(沒有重新整理,包含優先順序) --txpool.nolocals 為本地提交交易禁用價格豁免 --txpool.journal value 本地交易的磁碟日誌:用於節點重啟 (預設: "transactions.rlp") --txpool.rejournal value 重新生成本地交易日誌的時間間隔 (預設: 1小時) --txpool.pricelimit value 加入交易池的最小的gas價格限制(預設: 1) --txpool.pricebump value 價格波動百分比(相對之前已有交易) (預設: 10) --txpool.accountslots value 每個帳戶保證可執行的最少交易槽數量 (預設: 16) --txpool.globalslots value 所有帳戶可執行的最大交易槽數量 (預設: 4096) --txpool.accountqueue value 每個帳戶允許的最多非可執行交易槽數量 (預設: 64) --txpool.globalqueue value 所有帳戶非可執行交易最大槽數量 (預設: 1024) --txpool.lifetime value 非可執行交易最大入隊時間(預設: 3小時) 效能調優選項: --cache value 分配給內部快取的記憶體的兆位元組 (預設值為: 1024) --cache.database value 用於資料庫io的快取記憶體預留百分比 (default: 50) --cache.trie value 用於trie快取的快取記憶體預留百分比 (default: 25) --cache.gc value 用於trie修剪的快取記憶體預留百分比 (default: 25) --trie-cache-gens value 需要儲存在記憶體中的trie節點代數 (default: 120) 帳戶選項: --unlock value 需解鎖賬戶用逗號分隔 --password value 用於非互動式密碼輸入的密碼檔案 API和控制檯選項: --rpc 啟用HTTP-RPC伺服器 --rpcaddr value HTTP-RPC伺服器介面地址(預設值:"localhost") --rpcport value HTTP-RPC伺服器監聽埠(預設值:8545) --rpcapi value 基於HTTP-RPC介面提供的API --ws 啟用WS-RPC伺服器 --wsaddr value WWS-RPC伺服器監聽介面地址(default: "localhost") --wsport value WS-RPC伺服器監聽埠(預設值:8546) --wsapi value 基於WS-RPC的介面提供的API --wsorigins value websockets請求允許的源 --ipcdisable 禁用IPC-RPC伺服器(預設是開啟的) --ipcpath 包含在datadir裡的IPC socket/pipe檔名(轉義過的顯式路徑) --rpccorsdomain value 允許跨域請求的逗號分隔域名列表(瀏覽器強制) --rpcvhosts value 接受請求的虛擬主機名的逗號分隔列表(伺服器強制的)。接受“*”萬用字元.(default: "localhost") --jspath loadScript JavaScript載入指令碼的根路徑 (default: ".") --exec value 執行JavaScript語句(需要結合console/attach命令一起使用) --preload value 預載入到控制檯的逗號分隔的JavaScript檔案列表 網路選項: --bootnodes value 用於P2P發現bootstrap的逗號分隔的enode url(為輕量級伺服器設定v4+v5) --bootnodesv4 value 用於P2P v4發現bootstrap的逗號分隔的enode url(輕伺服器, 全節點) --bootnodesv5 value 用於P2P v5發現bootstrap的逗號分隔的enode url(輕伺服器, 輕節點) --port value 網絡卡監聽埠(預設值:30303) --maxpeers value 最大的網路節點數量(如果設定為0,網路將被禁用)(預設值:25) --maxpendpeers value 最大嘗試連線的數量(如果設定為0,則將使用預設值)(預設值:0) --nat value NAT埠對映機制 (any|none|upnp|pmp|extip:<IP>)(default: "any") --nodiscover 禁用節點發現機制(手動新增節點) --v5disc 啟用實驗性的RLPx V5(Topic發現)機制 --netrestrict value 限制對給定IP網路的網路通訊(CIDR掩碼) --nodekey value P2P節點金鑰檔案 --nodekeyhex value 十六進位制的P2P節點金鑰(用於測試) 礦工選項: --mine 啟動挖礦 --miner.threads value 挖礦使用的CPU執行緒數量(預設值:0) --miner.notify value 逗號分隔的HTTP URL列表,用於通知新工作包 --miner.gasprice "1000000000" 挖礦交易的最低gas價格 --miner.gastarget value 被挖區塊的目標gas的底層(default: 8000000),即被記錄的區塊提供的gas要高於該值,否則不會被記錄 --miner.gaslimit value 被挖區塊的目標gas的頂層(default: 8000000),即被記錄的區塊提供的gas要低於該值,否則不會被記錄 --miner.etherbase value 挖礦獎勵地址(預設=第一個建立的帳戶)(default: "0") --miner.extradata value 礦工設定的額外塊資料(default = client version) --miner.recommit value 重新建立正在挖的塊的時間間隔(default: 3s) --miner.noverify 禁用遠端密封驗證 GAS價格選項: --gpoblocks value 用於檢查gas價格的最近生成的塊的個數 (default: 20) --gpopercentile value 建議的gas價格是一組最近的交易gas價格的該給定百分比的值(default: 60) 虛擬機器選項: --vmdebug 記錄VM及合約除錯的有用資訊 --vm.evm value 外部EVM配置(預設=內建直譯器) --vm.ewasm value 外部ewasm配置(預設=內建直譯器) 日誌和除錯選項: --fakepow 禁用proof-of-work驗證 --nocompaction 在匯入後禁用db壓縮 --verbosity value 日誌詳細度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3) --vmodule value 每個模組詳細度:以 <pattern>=<level>的逗號分隔列表 (比如 eth/*=6,p2p=5) --backtrace value 請求特定日誌記錄堆疊跟蹤 (比如 "block.go:271") --debug 帶有呼叫站點位置(檔案和行號)的日誌訊息 --pprof 啟用pprof HTTP伺服器 --pprofaddr value pprof HTTP伺服器監聽介面 (default: "127.0.0.1") --pprofport value pprof HTTP伺服器監聽埠 (default: 6060) --memprofilerate value 按該給定頻率開啟memory profiling(default: 524288) --blockprofilerate value 按指定頻率開啟block profiling (default: 0) --cpuprofile value 將CPU profile寫入指定檔案 --trace value 將execution trace寫入指定檔案 METRICS和狀態選項: --metrics 啟用metrics標準收集和報告 --metrics.influxdb 啟用metrics匯出/推送到外部的InfluxDB資料庫 --metrics.influxdb.endpoint value 將metrics報告給InfluxDB資料庫API端點(default: "http://localhost:8086") --metrics.influxdb.database value 將報告的metrics推送到的InfluxDB資料庫的名稱(default: "geth") --metrics.influxdb.username value 授權訪問資料庫的使用者名稱 (default: "test") --metrics.influxdb.password value 授權訪問資料庫的密碼 (default: "test") --metrics.influxdb.host.tag host 連線到所有測量值的InfluxDB資料庫主機標記(default: "localhost") WHISPER(實驗)選項: --shh 啟用Whisper --shh.maxmessagesize value 可接受的最大的訊息大小 (default: 1048576) --shh.pow value 可接受的最小的POW (default: 0.2) --shh.restrict-light 限制兩個Whisper客戶端之間的連線 棄用選項: --minerthreads value 用於挖礦的CPU執行緒數(已棄用,現在使用--miner.threads) (default: 0) --targetgaslimit value 被挖區塊的目標gas底層(棄用, 現在使用--miner.gastarget) (default: 8000000) --gasprice "1000000000" 挖去交易的最小gas價格(棄用, 現在使用--miner.gasprice) --etherbase value 區塊挖礦獎勵的address(default = 第一個賬戶, 棄用, 現在使用--miner.etherbase) (default: "0") --extradata value 被礦工設定的區塊額外資料(default = client version, 棄用, 現在使用 --miner.extradata) 其他選項: --override.constantinople value 手動指定constantinople分支區塊,覆蓋繫結設定 (default: 0) --help, -h 顯示幫助資訊 版權: Copyright 2013-2018 The go-ethereum Authors

 


在下面只介紹我自己使用過的引數設定,沒用過的之後如果用再補充:
(1)挖礦

比如我們一般開啟geth console後,進行了某筆交易後,必須要自己執行miner.start()進行挖礦,然後再執行miner.stop()來停止挖礦

這個過程是十分繁瑣的。,所以你可以在geth console命令中使用--mine引數來進行挖礦:

礦工選項:
--mine 啟動挖礦 --miner.etherbase value 挖礦獎勵地址(預設=第一個建立的帳戶)(default: "0")

--mine表示啟動挖礦,--miner.etherbase=1表明挖礦獎勵給第二個建立的賬戶,預設為0,則第一個建立的賬戶

然後你的命令可以如下,舉個例子:

$ geth --datadir data0 --networkid 1500 --port 61910 --rpc --rpcapi 'eth,net,web3,admin,personal,miner,debug' --rpccorsdomain '*' --rpcport 8201 --mine miner.etherbase=1 dumpconfig > ./geth.toml $ geth --config ./geth.toml console 2>>geth.log

這個時候你在終端中檢視eth.mining的狀態為true,表示正在挖礦;然後檢視eth.gerBalance(eth.accounts[1]),會發現第二個賬戶的餘額一直在增加

但是上面這種形式的挖礦,它是在沒有交易的時候也在進行挖礦,這就導致空區塊變得很多。而這種開發者模式的區塊鏈就可以很好地解決這個問題:

開發鏈選項:
  --dev               使用POA共識網路,預設預分配一個開發者賬戶並且會自動開啟挖礦
  --dev.period value  開發者模式下挖礦週期 (0 = 僅在交易pending時進行挖礦) (預設: 0)

這兩個引數十分有用,但是這個比較不好的一點就是,它下一次開啟的時候,所有資料就被清空了;如果是個人進行學習的,這一點可能就不是很好



(2)解鎖

一般要解鎖某一個賬戶,我們就是在控制檯執行personal.unlockAccount(eth.accounts[1],password,unlockTime),要手動解鎖,但是如果我們希望某一個賬戶在環境執行時就一直是解鎖狀態的話,就使用帳戶選項:

帳戶選項:
  --unlock value    需解鎖賬戶用逗號分隔
  --password value  用於非互動式密碼輸入的密碼檔案

 下面舉個例子:

$ geth --datadir data0 --networkid 1500 --port 61910 --rpc --rpcapi 'eth,net,web3,admin,personal,miner,debug' --rpccorsdomain '*' --rpcport 8201 --mine miner.etherbase=1 --unlock="0x39f03934f1d9afbff39a395364416e71eae375cd" --password="user" dumpconfig > ./geth.toml
$ geth --config ./geth.toml console 2>>geth.log

然後你在控制檯檢視就能看見personal.listWallets[1].status為unlocked

 

(3)日誌

--verbosity value         日誌詳細度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)

一般這上面的配置我都不設定,就使用其預設的3,輸出info選項

上面的執行命令中的:

$ geth --config ./geth.toml console 2>>geth.log

2>> geth.log 表示把控制檯日誌輸出到geth.log檔案
然後你就能夠新開一個命令列終端,執行tail -f geth.log命令來實時顯示日誌,這樣日誌資訊就不會出現在終端中,讓你在終端執行命令的時候可讀性較差

 

(4)私有鏈配置步驟

在做測試工作的時候, 為了方便控制以及更快的進入真正的測試工作,需要搭建一個私有的以太坊網路

以太坊節點之間能夠互相連結需要滿足:

  • 相同的協議版本,如rinkeby\ropsten\mainnet\private
  • 相同的networkid,對應上面的協議為4/3/1/自定義

所以搭建私有網路最方便的方法就是通過geth命令中--networkid選項,設定一個與主網不同的networkid(主網的networkid為1)

舉例:

首先是建立一個資料夾geth:

mkdir geth
cd geth

然後在當前目錄下構建一個創世塊檔案:

{
    "config": {
      "chainId": 1500,
      "homesteadBlock": 0,
      "eip155Block": 0,
      "eip158Block": 0,
      "ByzantiumBlock": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData" : "",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": {}
}

解釋:

1》config
chainId與networkid的區別與相同:
chainid 在eip155裡有用到,目前來看是做重放保護的
networkid 是區分網路的,只有networkid的值相同的網路才能相連

config.chainId // 區塊鏈的ID,在 geth 命令中的 --networkid 引數需要與 chainId 的值一致
config.homesteadBlock // Homestead 硬分叉區塊高度,指定從什麼區塊開始實現Homestead 硬分叉,這裡設定為初始區塊
config.eip155Block // 指明從那個節點開始實現eip155該協議,詳情看ethereum/EIPs-155 Simple replay attack protection 35,36
config.eip158Block //指明從那個節點開始實現eip155該協議,詳情看ethereum/EIPs-158 State clearing 被EIP-161取代

config.ByzantiumBlock//指明什麼時候實現拜占庭分叉

 

2》coinbase//160bits,指明挖礦獎勵節點是哪一個
3gasLimit:gas 的消耗總量限制,用來限制區塊能包含的交易資訊總和。在這裡我設定為最大值,這個地方是十分重要的,因為我看晚上的很多例子都是十分簡單的,所以記錄在區塊中並沒有耗費十分多的gas,所以這個地方就沒有什麼人強調它,但是當我想要部署一些十分大的合約的時候,就會告訴我out of gas等這類的資訊,這樣的資訊一般都是你的gasLimit一開始設定得太小了。當然,好像說是gasLimit是可以改的,但是我改過,好像不太成功。不知道是不是我改的有問題,所以這裡就不教你們(改成功的人可以告訴我)。所以最好的辦法就是一開始把這裡設定得大一些。


4》extraData//用來設定自己的專屬資訊,最多32位元組長度
5》alloc // 預設一個賬號以及賬號的以太幣數量
舉例:

    "alloc": {
        "0xbdda794a097b41309700fdc5bdba880a7763c738": {
            "balance": "1000"
        }
    },

注意,該賬戶要在init初始化創世區塊後,環境配置前使用geth account import命令將其匯入,在keystore資料夾下生成其UTC檔案

6nonce//一個64位的雜湊,結合mixhash,它證明了在這個塊上已經執行了足夠多的計算:工作證明(Proof-of-Work, PoW)。nonce和mixhash的組合必須滿足Yellowpaper 4.3.4.區塊頭有效性(44)中描述的一個數學條件,並允許驗證塊確實已被加密挖掘,因此,從這個方面來說,是有效的。nonce是一種加密安全的挖掘工作證明,它毫無疑問地證明在確定這個令牌值時已經花費了特定數量的計算。創世區塊可隨意設定

7mixhash//一個256位的雜湊,結合nonce,證明在這個塊上已經執行了足夠多的計算:工作證明(PoW)。nonce和mixhash的組合必須滿足Yellowpaper 4.3.4.區塊頭有效性(44)中描述的一個數學條件。它允許去驗證塊是否真的被加密地挖掘了,因此,從這個方面來說,它是有效的。創世區塊可隨意設定

8difficulty:初始塊的難度值決定整個鏈的速度,如果難度過大,cpu挖礦就很難,這裡設定較小難度0x40000。就是當我們想要調整整個鏈區塊的上鍊速度時,我們就是通過這個值來設定的,難度值越大,區塊的產生速度越慢
參考https://blog.csdn.net/ddffr/article/details/77095033

        5ffffa 6291450 放大十倍 一分鐘五個
        2ffffd 3145725 五倍 一分鐘五到十個之間個
        bffff4 12582900 二十倍 六分鐘挖了八個
        3bfffc4 62914500 一百倍 六分鐘兩個
        12bffed4 314572500 五百倍 15分鐘沒有一個
        77fff88 125829000 兩百倍 十分鐘兩個

9parentHash//整個父塊頭的Keccak 256位雜湊,是指向父塊的指標。但因為這裡是初始區塊,無父區塊,所以為0

10timestamp//設定創世塊的時間戳,不想設定可以為0

然後我們可以在終端檢視生成的創世區塊的資訊,並得到第二個區塊的資訊來兩相對比一下

> eth.getBlock(0)
{
  difficulty: 262144,
  extraData: "0x",
  gasLimit: 4294967295,
  gasUsed: 0,
  hash: "0xa0e580c6769ac3dd80894b2a256164a76b796839d2eb7f799ef6b9850ea5e82e",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x0000000000000000000000000000000000000000",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 508,
  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  timestamp: 0,
  totalDifficulty: 262144,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}
> eth.getBlock(1) { difficulty: 249472, extraData: "0xd983010803846765746888676f312e31302e318664617277696e", gasLimit: 4290772993, gasUsed: 0, hash: "0xb1c860c895da7d1e912bba497d163e8f5e775362588520c1d6054b67dcfafd94", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x91b678137f09c8b4f294a14e88c09276522618cf", mixHash: "0x73c409df7e1724390f9d800ac1837c5d83c4b30b44019b41470e32b33b466fbd", nonce: "0x2df32680dccea609", number: 1, parentHash: "0xa0e580c6769ac3dd80894b2a256164a76b796839d2eb7f799ef6b9850ea5e82e", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 538, stateRoot: "0x29e67805ef5de0e2bad57ed29f78ca7c8613207bb8d0f5257a1ebe1508c37056", timestamp: 1531378117, totalDifficulty: 511616, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] }

然後就能夠執行初始化創世塊命令:

geth --datadir data0 init genesis.json


然後就會生成一個資料夾data0,存放區塊資訊以及使用者的私鑰資訊

然後就可以啟動該私有鏈了:

geth --datadir data0 --networkid 314590 --ipcdisable --port 61910 --rpc --rpcapi 'eth,net,web3,admin,personal,miner,debug' --rpccorsdomain '*' --rpcport 8201 dumpconfig > ./geth.toml 


(5)配置

詳細配置引數:

ETHEREUM選項:
  --config value                        TOML 配置檔案
  --datadir "/home/user4/.ethereum"  資料庫和keystore金鑰的資料目錄
  --networkid value                     網路識別符號(整型, 1=Frontier, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby) (預設: 1)
API和控制檯選項:
  --rpc                  啟用HTTP-RPC伺服器
  --rpcaddr value        HTTP-RPC伺服器介面地址(預設值:"localhost")
  --rpcport value        HTTP-RPC伺服器監聽埠(預設值:8545)
  --rpcapi value         基於HTTP-RPC介面提供的API
  --ws                   啟用WS-RPC伺服器
  --wsaddr value         WWS-RPC伺服器監聽介面地址(default: "localhost")
  --wsport value         WS-RPC伺服器監聽埠(預設值:8546)
  --wsapi value          基於WS-RPC的介面提供的API
  --wsorigins value      websockets請求允許的源
  --ipcdisable           禁用IPC-RPC伺服器(預設是開啟的)
  --ipcpath              包含在datadir裡的IPC socket/pipe檔名(轉義過的顯式路徑)
  --rpccorsdomain value  允許跨域請求的逗號分隔域名列表(瀏覽器強制)
  --rpcvhosts value      接受請求的虛擬主機名的逗號分隔列表(伺服器強制的)。接受“*”萬用字元.(default: "localhost")
  --jspath loadScript    JavaScript載入指令碼的根路徑 (default: ".")
  --exec value           執行JavaScript語句(需要結合console/attach命令一起使用)
  --preload value        預載入到控制檯的逗號分隔的JavaScript檔案列表

三種連線方式:
1.IPC 方式連線

geth attach ethereum/data0/geth.ipc 或
geth --ipcpath ~/.ethereum/geth.ipc attach  

 
2.TCP 連線控制檯——連線遠端控制檯

geth --exec 'eth.coinbase' attach http://localhost:8545


3.WebSocket 方式

geth attach ws://localhost:8546

 

下面是測試

上圖,配置的是rpc,其實ipc和ws都有其預設值:

上圖表示的在同一個區塊鏈上進行的兩種不同配置資訊的設定
左邊ethereum.toml的配置資訊是:

geth --datadir data0 --networkid 1500 --ipcdisable --port 2345 --rpc --rpcapi 'eth,net,web3,admin,personal,miner,debug,shh' --nodiscover --rpccorsdomain '*' --rpcport 61910 dumpconfig > ./ethereum.toml


然後右邊geth.toml的配置資訊是:

geth --datadir data0 --networkid 1500 --port 61910 --rpc --rpcapi 'eth,net,web3,admin,personal,miner,debug' --rpccorsdomain '*' --rpcport 8201 dumpconfig > ./geth.toml 


然後我們從圖中就可以看見兩者配置後配置資訊中很明顯的差別了:

—datadir  //就是你初始化得到的區塊所在的資料夾
—networkid   //1=主網, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby(預設: 1),所以你只要寫除此之外的數字即可,當然,要與你genesis.json中設定的chainid的值相等。只有networkid的值相同的網路才能相連
—ipcdisable  //ethereum.toml中則無引數 IPCPath = “geth.ipc",不能使用IPC連線。禁用IPC-RPC伺服器,web3有三種方法來連線區塊鏈以訪問其API,有RPC、IPC、WS,這裡的意思應該就是不允許通過IPC的方式連線,在這裡我們選擇的連線方式是RPC

—nodiscover  // ethereum.toml則引數為 NoDiscovery = true,geth.toml沒有設定這個,則為NoDiscovery = false,說明該節點能夠被發現。只是能不能被發現的區別,都是可以被連線的
--port 2345  //設定的是引數 ListenAddr = “:2345”,即該程序在伺服器中佔用的埠。該鏈佔用的埠,其他鏈要與這個鏈相連,其節點的埠就是它
—rpc  //啟用HTTP-RPC伺服器,就是使用RPC的連線方式
—rpcapi  //後面設定的資訊都會出現在引數HTTPModules 中,ethereum.toml比geth.toml多一個shh。宣告該私有鏈所提供給外界呼叫的介面API
—rpccorsdomain  //允許跨域請求的域名列表,”*”說明沒有限制
--rpcport 61910 //設定的是引數 HTTPPort = 61910,即要通過http方式接入區塊鏈的埠號。訪問該HTTP-RPC伺服器的埠,通過該端口才能呼叫API

 

--ws的使用其實也是差不多的,如下面的例子:

geth --datadir data0 --networkid 1500 --port 61911 --rpc --rpcaddr 10.240.203.84 --rpcapi 'eth,net,web3,admin,personal,miner,debug' --rpccorsdomain '*' --rpcport 8202 --ws --wsorigins '*' --wsapi 'eth,net,web3,admin,personal,miner,debug,bzz,shh' --shh dumpconfig > ./geth.toml 

可以安裝 websocket 測試工具 wscat

npm install -g wscat

然後用其來測試 Websocket:

wscat -c ws://127.0.0.1:8546

 

⚠️上面的例子中沒有使用--rpcaddr引數,那麼就預設使用localhost,即你可以使用http://localhost:8202來連線該私有鏈,但是如果你想要從另一個電腦來連線這臺電腦上的私有鏈時,一定要記得設定為--rpcaddr 本機IP,否則你是連線不上的


dumpconfig > ./geth.toml:因為這些配置檔案比較長,將其記錄在geth.toml中,下次呼叫時即可直接執行geth.toml

執行:

geth --config ./geth.toml console 2>>geth.log

console:啟動起命令列,沒有的話,你將不能在終端輸入命令


2>>geth.log:啟動及挖礦等的日誌資訊將會寫到geth.log中,這樣就不會有挖礦資訊一直出現,想要輸入語句是總是被刷走的煩惱

然後通過:

tail -f geth.log

來檢視日誌檔案



(6)測試網路

--testnet                             Ropsten網路:預配置的POW(proof-of-work)測試網路
--rinkeby                             Rinkeby網路: 預配置的POA(proof-of-authority)測試網路

上面的例子都是在本地建立一個私有鏈,網上其實也有兩個可用的私有鏈網路,你也可以使用--networkid=3/4來宣告連線的是測試網路,或者使用--testnet/--rinkeby引數宣告

具體使用可見本部落格:

rinkeby測試網路的連線

Rinkeby中測試幣的申請