以太坊錢包搭建與使用


前言

本文使用系統: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM