- 初始化私有ETH網路,可以用puppeth指令產生創世區塊的json內容
 
geth --datadir “./privatechain” init custom_genesis.json
- 建立兩個節點,這樣之後一個節點可以提供rpc服務,一個可以用來挖礦
 - 如果是要在同一台機器上建立不同的節點,所有的節點都必須在獨立的目錄底下運作
 
        {
          "config": {
            "chainId": 657,
            "homesteadBlock": 1,
            "eip150Block": 2,
            "eip150Hash": "0x000000000000000000000000000000000...",
            "eip155Block": 3,
            "eip158Block": 3,
            "byzantiumBlock": 4,
            "ethash": {}
          },
          "nonce": "0x0",
          "timestamp": "0x5ad4459f",
          "extraData": "0x000000000000000000000000000000000...",
          "gasLimit": "0x47b760",
          "difficulty": "0x80000",
          "mixHash": "0x000000000000000000000000000000000...",
          "coinbase": "0x000000000000000000000000000000000...",
          "alloc": {
            "xxxx": {
              "balance": "0x2000000000000000000000000000000000..."
            }
          },
          "number": "0x0",
          "gasUsed": "0x0",
          "parentHash": "0x000000000000000000000000000000000..."
        }
        
- custom_genesis.json 裡面可以放一些錢給測試用的帳號:
 
    "alloc": {
               "0xxxxxx":
                   {"balance": "10000"}
            }
        
- 
        在console啟動節點
        
- 
                常用參數
                
- --networkid 為啟動在哪個網路id,避免衝突
 - --datadir 為指定區塊鏈資料位置
 - --ipcdisable 不加這個參數的話在本地啟動多個服務會出現access deny(CentOS沒這個問題,windows才會)
 - --config 後面可以加上自定義的TOML檔案來設定參數
 - 在<datadir>/geth/底下的static-nodes.json可以定義要和這個node同步的peers
 - 指令後面加上 dumpconfig 可以把設定值匯出成toml檔案
 
 - 
                node1(監聽2000 port) :
                
 
geth --datadir ./privatechain --networkid 1510 --port 2000 --ipcdisable console- node2(監聽2001 port) :
 
geth --datadir ./privatechain --networkid 1510 --port 2001 --ipcdisable console - 
                常用參數
                
 - 
        讓兩個節點可以互相溝通
        
- 在node1執行
                
admin.nodeInfo
在輸出的結果中找到enode 資訊,會有類似底下的格式 :
enode://xxxxx@[::]:2000,把enode的xxxx抄下來 - 回到node2,執行
                
admin.addPeer("enode://xxxxx@127.0.0.1:2000")
127.0.0.1:2000 是node1監聽的位置
照相同的步驟在node1把node2的端點加進去
執行admin.peers檢查一下是否兩個node都互相連結了 - 每次重啟node都需要重新做一次,可以直接toml設定檔來寫入設定,避免每次都要重新加
 
 - 在node1執行
                
 - 
        在console模式底下的指令:
        
- 
                查看帳戶
                
eth.accounts
 - 
                建立帳號,設定密碼 123456
                
personal.newAccount("123456")
產生的私鑰會放在keystore目錄裡面
 - 
                解鎖帳號,這樣就不需要輸入密鑰也能交易
                
personal.unlockAccount('0xxxxxx','pass')
 
 - 
                查看帳戶
                
 - 
        啟動RPC服務
        
geth --datadir ./privatechain --networkid 1510 --rpc
 
會開始監聽 8545 port
geth --datadir ./privatechain --networkid 1510 
        --port 2001 --ipcdisable --mine --minerthreads=1 
--etherbase=0xxxxx 
- etherbase 用來指定挖礦的coin要歸戶給哪個帳戶
 - minerthreads 表示要用幾個thread來挖礦
 
Ethereum EVM的單位是Wei
1 Ether = 1,000,000,000,000,000,000 Wei
交易費用 = 實際用到的Gas * Gas Price
如果Gas Limit不夠,交易將會無法完成,但是手續費會被扣掉
如果Gas足夠,剩下的Gas會釋出所以不會多收手續費
- 不管是要在哪一個node對虛擬鏈下交易指令,都必須在那一台node上啟動挖礦,否則交易都會卡在pending裡面(有時候在各個node可以查到交易成功,但是用了第三方套件例如metamask則會無法顯示正確交易結果)
 - 有時候挖礦指令會當掉,必須先
            
再miner.stop()
重新開啟miner.start(1) 
- node 1 :
            
geth --datadir ./privatechain --networkid 1510 --port 2000 --config config.toml --rpc --rpcaddr x.x.x.x --rpccorsdomain "*" console - node 2:
            
geth --datadir ./privatechain --networkid 1510 --port 2001 --config config.toml --mine --minerthreads=1 --etherbase=0xxxxx console 
沒有留言:
張貼留言