以太坊錢包搭建與使用

前言

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

 

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/web3jPython:https://github.com/ethereum/web3.pyPHP:https://github.com/sc0Vu/web3.phpNodeJs:https://github.com/ethereum/web3.js

相關文章
相關標籤/搜索