目錄
- 1. geth 簡介
- 1.1 下載地址:
- 1.2 安裝:
- 1.3 查看是否安裝成功
- 2. geth命令介紹
- 3. geth常用命令
- 3.1 指定資料目錄 --datadir
- 3.2 賬戶相關
- 3.3 控制臺console:
- 3.4 洗掉資料:
- 3.5 help
- 3.6 常見錯誤
- 4. Go語言呼叫合約
- 4.1 啟動rpc埠
- 4.2 Go呼叫以太坊
- 4.3 呼叫介面
- net_version
- net_listening
- net_peerCount
- eth介面
- personal介面
- db介面
- 最后
geth
以太坊智能合約開發中最常用的命令列工具,
Geth是由以太坊基金會提供的官方客戶端軟體,用Go編程語言撰寫的,Geth提供了一個互動式命令控制臺,通過命令控制臺中包含了以太坊的各種功能(API),全名go-ethereum,
1. geth 簡介
1.1 下載地址:
官網(很慢):https://geth.ethereum.org/downloads/
國內鏡像:https://ethfans.org/wikis/Ethereum-Geth-Mirror
1.2 安裝:


下載下來之后,會在安裝目錄生成geth.exe

將這個檔案放在gopath的bin目錄中,

放在這里就行了
1.3 查看是否安裝成功
geth version

如果你安裝了,但是沒有顯示這個的話,可能是因為你的系統環境里面沒有go的路徑,把go的bin目錄路徑放在系統變數的path就好了~
2. geth命令介紹
geth -help查看幫助

命 令:geth [選項] 命令 [命令選項] [引數…]
命令引數介紹:超詳細
3. geth常用命令
3.1 指定資料目錄 --datadir
如:geth --datadir “路徑” account new


3.2 賬戶相關
-
查看賬戶:
geth account list查看賬戶的資訊

-
創建賬戶:
geth account new
然后輸入兩次密碼

-
更新指定賬戶:
geth account update "用戶地址"輸入賬戶密碼及確認密碼


默認是會把用戶的賬戶資訊存放在這個目錄
- 匯入賬戶:
geth account import 你的私鑰檔案路徑(匯出私鑰存放到xx.txt)
指定保存路徑的創建用戶:geth --datadir account new
3.3 控制臺console:
啟動并進入互動式javascript環境

- 默認連接的是ipc
- geth attach http://IP:8545,默認不開啟
- geth attach ws://IP:8546,默認不開啟
進入控制臺:geth console 可以指定--datadir "路徑"
退出控制臺:exit 或者 ctrl+d
常用api:
-
獲取區塊號:
eth.blockNumber

-
是否在監聽埠
net.listening

-
開始挖礦:miner.start()

-
挖礦還可以指定行程數:miner.start(1)
-
停止挖礦:miner.stop()
-
檢查是否在挖礦:eth.mining true:在挖礦,false:不在挖礦
-
獲取賬戶地址陣列:eth.accounts
-
獲取挖礦地址:eth.coinbase 默認第一個創建的賬戶
-
查看第一個賬戶余額:eth.getBalance(eth.accounts[0])
-
創建用戶:personal.newAccount(“12345678”)
-
設定挖礦賬戶:miner.setEtherbase(“地址A”)
-
賬戶間轉錢:eth.sendTransation({from:“地址A”,to:“地址B”,value:web3.toWei(10,“ether”)})
-
獲取交易資訊:eth.getTransaction(‘地址A’)
3.4 洗掉資料:
不要直接洗掉datadir目錄,使用removedb
geth --datadir "路徑" removedb
這會洗掉路徑/geth/chaindata,其他東西都不會動,不會洗掉用戶,
3.5 help
- geth account -h
- geth account help new 查看子命令
3.6 常見錯誤
1 . Error: authentication needed: password or unlock undefined:
- 這種報錯解鎖下賬戶即可
- 賬戶解鎖:personal.unlockAccount(“賬戶地址”)
2 . Returned error: exceeds block gas limit:
- 出現這種錯誤就看塊號的gaslimit,部署時改成一直
- 獲取塊號:eth.blockNumber,
- 根據塊號獲取詳細資訊:eth.getBlock(0)
4. Go語言呼叫合約
4.1 啟動rpc埠
geth --datadir "fanone" --identity "fanone" --rpc --rpcport 8545 --rpcapi "db,eth,net,web3,personal" --rpccorsdomain "*" console

-
–identity “fanone”:節點身份標識
-
–rpc:開啟
RPC介面 -
–rpcport:
RPC埠,默認go是8545 -
–rpcapi “db,eth,net,web3”:提供給別人使用的 RPC API,默認為
web3介面 -
–rpccorsdomain:設定能連接到你的節點的 URL,用來完成
RPC任 務,* 指任何URL都能連接到,默認只能自己連接 -
–datadir:區塊資料檔案夾 ,如果不指定的話,就是上面的那個在C盤的地址,
為了C盤著想,所以還是建議這樣,新建一個檔案夾放在其他盤



就會在這里進行存放了
-
–networkid:
net_version的id -
–port:用來監聽其他節點的埠
-
–nodiscover:你的節點不會被其他人發現,除非他們手動添加你
是連接這個url
4.2 Go呼叫以太坊
下載包:"github.com/ethereum/go-ethereum/rpc"
示例代碼:
client, _ := rpc.Dial("http://localhost:8545")
var result bool
client.Call(&result ,"net_listening")
// 注意這里必須使用指標,否則會報空指標例外
啟動之后
在go中呼叫 
4.3 呼叫介面
net_version
當前連接網路的ID
net_version: 當前連接網路的ID
var networkid string
client.Call(&networkid,"net_version")
networkid:
"1":Mainnet
"2": Morden Testnet
"3": Ropsten Testnet
"4": Rinkeby Testnet
"42": Kovan Testnet
在啟動rpc服務介面的時候可以指定: --networkid
net_listening
客戶端是否處于監聽狀態
var is_listing bool
client.Call(&is_listing,"net_listening")
net_peerCount
所連接對端節點旳數量
var count string
client.Call(&count,"net_peerCount")
//"0x0" 表示0個
//"0x2" 表示2個
eth介面
1 .eth_accounts:賬戶地址陣列
var accounts []string
client.Call(&accounts,"eth_accounts")
2 .eth_getBalance:獲取指定地址賬戶的余額,單位:wei
var balance string
client.Call(&balance,"eth_getBalance","0x558c90c05d8c4b55a87de03bd601fd76faf50f9b","latest")
引數:
賬戶地址
整數塊編號,或者字串"latest", “earliest” 或 “pending”
3 .eth_gasPrice:回傳當前的gas價格,單位:wei,
var gas_price string
client.Call(&gas_price,"eth_gasPrice")
4.eth_coinbase:
獲取挖礦賬戶地址
var coinbase string
client.Call(&coinbase, "eth_coinbase")
5.eth_protocolVersion:
回傳當前以太坊協議的版本,
var proto_version string
client.Call(&proto_version , "eth_protocolVersion")
6.eth_mining:
客戶端是否在挖礦中
var is_mining bool
client.Call(&is_mining,"eth_mining")
7.eth_hashrate:
回傳節點挖礦時每秒可算出的哈希數量,
var hashrate string
client.Call(&hashrate,"eth_hashrate")
8.eth_getTransactionCount:
回傳指定地址發生的交易數量
var transactionCount string
client.Call(&transactionCount,"eth_getBalance","0x72w12d05d8c4b55a87de03bd601fd76faf50f9b","latest")
//引數
// 賬戶地址
// 整數塊編號,或者字串"latest", "earliest" 或 "pending"
9.eth_blockNumber:獲取節點當前塊編號
var blockNum string
client.Call(&blockNum ,"eth_blockNumber")
personal介面
1 .personal_listAccounts:
獲取該節點下的所有賬戶,和eth_accounts效果一樣
var accounts []string
client.Call(&accounts,"personal_listAccounts")
2.personal_newAccount:
創建用戶
var newAccount string
client.Call(&newAccount, "personal_newAccount", "12345678")
引數:
密碼
3.personal_lockAccount:
鎖定指定賬戶
var is_lock bool
client.Call(&is_lock, "personal_lockAccount", "賬戶地址")
//引數:
// 賬戶地址
4.personal_unlockAccount:
解鎖指定賬戶,有些操作必須解鎖賬戶才可以操作
var is_unlock bool
client.Call(&is_unlock, "personal_lockAccount", "賬戶地址","賬戶密碼")
引數:
賬戶地址
賬戶密碼
db介面
1.db_putString:
在本地資料庫中存入字串
var is_ok bool
client.Call(&is_ok, "db_putString", "db_name","key",""value")
引數:
資料庫名稱
key名
要存入的字串值
2.db_getString:
從本地資料庫讀取字串,
var val string
client.Call(&val, "db_getString", "db_name","key")
//引數:
// 資料庫名稱
// key名
最后
小生凡一,期待你的關注,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/292567.html
標籤:區塊鏈
上一篇:區塊鏈推進智慧城市建設邁上新臺階
