Ethereum學習(1)—— 基本介紹
1 開發環境安裝
安裝Ethereum 協議的Go語言的最新實現。
git clone https://github.com/ethereum/go-ethereum.git
make all
cd build/bin
sudo cp * /usr/local/bin/
2 Ethereum組成
Ethereum包含以下幾大模組。
模組 | 介紹 |
---|---|
geth |
基於命令列的Ethereum客戶端。使用JSON RPC格式,基於HTTP、WebSocket或者IPC(Inter-process Communications )方式. |
abigen |
原始碼生成工具。將Ethereum 合約轉換為Go原始碼包,供其它Go模組呼叫. |
bootnode |
bootnode是一個超簡化版的Ethereum客戶端,相比正常的客戶端,它只執行節點發現協議,而不執行任何其它更高階的協議。 |
evm |
開發環境下的Ethereum虛擬機器。 |
gethrpctest |
支援RPC測試的一個模組。 |
rlpdump |
RLP資料解析器,在開發環境中常用。 |
swarm |
一個分散式儲存平臺以及內容分發服務. |
puppeth |
基於命令列的嚮導,輔助建立一個新得Ethereum網路. |
2.1 geth
基於命令列的Ethereum客戶端。使用JSON RPC格式,基於HTTP、WebSocket或者IPC(Inter-process Communications )方式.
通過命令能夠進入JavaScript 互動環境:
geth attach ipc:/home/testuser0/.ethereum/privatechain/geth.ipc
2.2 abigen
原始碼生成工具。將Ethereum 合約轉換為Go原始碼包,供其它Go模組呼叫. 輸入為智慧合約,輸出為Go原始碼包。 使用示例:
$ abigen --abi token.abi --pkg main --type Token --out token.go
2.3 bootnode
bootnode是一個超簡化版的Ethereum客戶端,相比正常的客戶端,它只執行節點發現協議,而不執行任何其它更高階的協議。 從用途上來講,** bootnode是一個節點發現工具 ** 。Ethereum節點在啟動時需要告之至少一個對等節點,這樣才能接入整個以太坊網路,bootnode相當於一個第三方的中介,node在啟動時會將自己的資訊註冊到bootnode的路由中,並且會從bootnode得到其它節點的路由資訊,一旦有了對等節點資訊後就可以不需要連線bootnode。
注意:公有鏈的節點硬編碼了一些bootnode節點地址;在私鏈中該模組也常常用於引導發現p2p節點。
2.4 evm
開發環境下的Ethereum虛擬機器。 該模組可以隔離執行位元組程式碼,用於Ethereum位元組程式碼(EVM opcodes)除錯。
例如除錯位元組程式碼"60ff60ff",可以看到gas消耗和記憶體變化。
[email protected]:~/temp/testeth$ evm --code 60ff60ff --debug run
0x
#### TRACE ####
PUSH1 pc=00000000 gas=10000000000 cost=3
PUSH1 pc=00000002 gas=9999999997 cost=3
Stack:
00000000 00000000000000000000000000000000000000000000000000000000000000ff
STOP pc=00000004 gas=9999999994 cost=0
Stack:
00000000 00000000000000000000000000000000000000000000000000000000000000ff
00000001 00000000000000000000000000000000000000000000000000000000000000ff
#### LOGS ####
2.5 gethrpctest
2.6 rlpdump
RLP格式二進位制程式碼的解析器。 這裡可以查詢RLP格式. 因為通常環境下RLP資料長度都不太長,熟悉RLP格式的可以自行解析。 示例是解析一個RLP格式的交易資料:
[email protected]:~/temp/testeth$ rlpdump --hex f9016c827542843b9aca008344aa209407deced930a6a10ea7bd0b64519287cec8ada9a580b90104a1478ed0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004033323033383138346365346334356163393463353066343838336364336530383433616161653238353933333462626461336630633536613466633031303632000000000000000000000000000000000000000000000000000000000000002e516d5444374b57386f48686f6a554e3147477a3577766366656d415a547072706b6137615357796a4656467876420000000000000000000000000000000000001ba0a03389252c276ac036c8c392cfcc8dd1b26c28eeed4ea970e0a628cf151ccc51a067d49a382372b04b9d5dac3f00769f0e36dc3ebe7c9e1a4206710e7755c007bf
[
"uB",
3b9aca00,
44aa20,
07deced930a6a10ea7bd0b64519287cec8ada9a5,
"",
a1478ed0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000004033323033383138346365346334356163393463353066343838336364336530383433616161653238353933333462626461336630633536613466633031303632000000000000000000000000000000000000000000000000000000000000002e516d5444374b57386f48686f6a554e3147477a3577766366656d415a547072706b6137615357796a465646787642000000000000000000000000000000000000,
1b,
a03389252c276ac036c8c392cfcc8dd1b26c28eeed4ea970e0a628cf151ccc51,
67d49a382372b04b9d5dac3f00769f0e36dc3ebe7c9e1a4206710e7755c007bf,
]
2.7 swarm
swarm是一個分散式儲存平臺以及內容分發服務,是一個以太坊Web3棧的一個本土服務層。swarm的最主要目標是為以太坊公共記錄,尤其是Dapp程式碼與資料以及區塊資料提供一個足夠去中心化以及足夠重複的儲存。 這裡查詢Swarm 工程的更多資訊. 這裡有一個Swarm簡易教程.
2.8 puppeth
基於命令列的嚮導,輔助建立一個新的Ethereum網路。