github.com/bearnetworkchain/go-bearnetwork@v1.10.19-0.20220604150648-d63890c2e42b/README.md (about) 1 ## Go Ethereum 繁體中文說明文件 2 3 4 以太坊協議的官方 Golang 實現。 5 6 [![API Reference]( 7 https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667 8 )](https://pkg.go.dev/github.com/bearnetworkchain/go-bearnetwork?tab=doc) 9 [![Go Report Card](https://goreportcard.com/badge/github.com/bearnetworkchain/go-bearnetwork)](https://goreportcard.com/report/github.com/bearnetworkchain/go-bearnetwork) 10 [![Travis](https://travis-ci.com/ethereum/go-ethereum.svg?branch=master)](https://travis-ci.com/ethereum/go-ethereum) 11 [![Discord](https://img.shields.io/badge/discord-join%20chat-blue.svg)](https://discord.gg/nthXNEv) 12 13 自動構建可用於穩定版本和不穩定的主分支。二進制 14 15 檔案發佈於 https://geth.ethereum.org/downloads/. 16 17 ## 構建源 18 19 有關先決條件和詳細的構建說明,請閱讀 [Installation Instructions](https://geth.ethereum.org/docs/install-and-build/installing-geth). 20 21 建立 `geth` 需要 Go(1.16 或更高版本)和 C 編譯器。你可以安裝 22 他們使用你最喜歡的包管理器。安裝依賴項後,運行 23 24 ```shell 25 make geth 26 ``` 27 28 或者,構建全套實用程序: 29 30 ```shell 31 make all 32 ``` 33 34 ## 可執行文件 35 36 go-ethereum 項目附帶了幾個包裝器/可執行文件,位於 `cmd` 37 目錄。 38 39 | Command | Description | 40 | :-----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 41 | **`geth`** | 我們的主要以太坊 CLI 客戶端。 它是以太坊網絡(主網、測試網或私有網)的入口點,能夠作為完整節點(默認)、存檔節點(保留所有歷史狀態)或輕節點(實時檢索數據)運行。 它可以被其他進程用作通過在 HTTP、WebSocket 和/或 IPC 傳輸之上暴露的 JSON RPC 端點進入以太坊網絡的網關。 `geth --help` 和 [CLI page](https://geth.ethereum.org/docs/interface/command-line-options) 用於命令行選項。 | 42 | `clef` | 獨立的簽名工具,可用作後端簽名者`geth`. | 43 | `devp2p` | 與網絡層上的節點交互的實用程序,無需運行完整的區塊鏈。 | 44 | `abigen` | 源代碼生成器,用於將以太坊合約定義轉換為易於使用、編譯時類型安全的 Go packages。 它在plain上運行[Ethereum contract ABIs](https://docs.soliditylang.org/en/develop/abi-spec.html)如果合約字節碼也可用,則具有擴展功能。 但是,它也接受 Solidity 源文件,使開發更加精簡。 請參閱我們的 [Native DApps](https://geth.ethereum.org/docs/dapp/native-bindings) 頁面了解詳情。 | 45 | `bootnode` | 我們的以太坊客戶端實現的精簡版本,它只參與網絡節點發現協議,但不運行任何更高級別的應用程序協議。 它可以用作輕量級引導節點,以幫助在專用網絡中找到對等點。 | 46 | `evm` | EVM(以太坊虛擬機)的開發者實用程序版本,能夠在可配置的環境和執行模式中運行字節碼片段。 其目的是允許對 EVM 操作碼進行隔離、細粒度的調試 (e.g. `evm --code 60ff60ff --debug run`). | 47 | `rlpdump` | 用於轉換二進制 RLP 的開發人員實用工具 ([Recursive Length Prefix](https://eth.wiki/en/fundamentals/rlp)) 轉儲(以太坊協議在網絡和共識方面使用的數據編碼)到用戶友好的分層表示 (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). | 48 | `puppeth` | 幫助創建新的以太坊網絡的 CLI 嚮導。 | 49 50 ## 啟動(Running) `geth` 51 52 遍歷所有可能的命令行標誌超出了這裡的範圍(請諮詢我們的 53 [CLI Wiki page](https://geth.ethereum.org/docs/interface/command-line-options)), 54 但我們列舉了一些常見的參數組合,讓您快速上手 55 關於如何運行自己的 `geth` 實例。 56 57 ### 電腦硬體要求 58 59 最低限度: 60 61 * CPU with 2+ cores 62 * 4GB RAM 63 * 1TB 用於同步主網的可用存儲空間 64 * 8 MBit/sec 下載網路服務 65 66 推薦規格: 67 68 * Fast CPU with 4+ cores 69 * 16GB+ RAM 70 * 具有至少 1TB 可用空間的高性能 SSD 71 * 25+ MBit/sec 下載網路服務 72 73 ### 以太坊主網絡上的全節點 74 75 到目前為止,最常見的場景是人們想要簡單地與以太坊交互 76 網絡:創建帳戶; 轉移資金; 部署並與合約交互。 為了這 77 用戶不關心多年歷史數據的特定用例,所以我們可以 78 快速同步到網絡的當前狀態。 為此: 79 80 ```shell 81 $ geth console 82 ``` 83 84 該命令將: 85 * 開始 `geth` 在快照同步模式下(默認,可以用 `--syncmode` 旗幟flag ), 86 導致它下載更多數據以換取避免處理整個歷史記錄 87 以太坊網絡,這是非常容易造成CPU高鋒運行的。 88 * 啟動 `geth` 內置交互 [JavaScript console](https://geth.ethereum.org/docs/interface/javascript-console), 89 (通過追縱 `console` 子命令) 通過它您可以使用 [`web3` methods](https://github.com/ChainSafe/web3.js/blob/0.20.7/DOCUMENTATION.md) 90 (注意: `web3` 捆綁的版本 `geth` 很舊,而且官方文檔不是最新的), 91 as well as `geth`'s own [management APIs](https://geth.ethereum.org/docs/rpc/server). 92 此工具是可選的,如果您不使用它,您可以隨時附加到已經運行的 93 `geth` 實例與 `geth attach`. 94 95 ### Görli 測試網絡上的完整節點 96 97 向開發人員過渡,如果您想嘗試創建以太坊 98 合同,您幾乎可以肯定希望在不涉及任何實際資金的情況下這樣做,直到 99 你得到了整個系統的竅門。 換句話說,而不是附加到主 100 網絡,你想用你的節點加入**test**網絡,完全等價於 101 主網絡,但只有 play-Ether。 102 103 ```shell 104 $ geth --goerli console 105 ``` 106 107 `console` 子命令與上面的含義完全相同,它們同樣 108 在測試網上也很有用。 如果您跳過此處,請參閱上面的解釋。 109 110 然而,指定 `--goerli` 標誌會稍微重新配置你的 `geth` 實例: 111 112 * 客戶端將連接到 Görli,而不是連接以太坊主網絡 113 測試網絡,它使用不同的 P2P 引導節點、不同的網絡 ID 和起源 114 狀態。 115 * 不使用默認數據目錄(例如 Linux 上的`~/.ethereum`),`geth` 116 將自己嵌套到更深一層的 `goerli` 子文件夾(`~/.ethereum/goerli` on 117 Linux)。 注意,在 OSX 和 Linux 上,這也意味著附加到正在運行的測試網節點 118 需要使用自定義端點,因為 `geth attach` 將嘗試附加到 119 默認情況下生產節點端點,例如,`geth attach <datadir>/goerli/geth.ipc`。 Windows 用戶不受此影響。 120 121 *注:雖然有一些內部保護措施來防止交易 122 在主網和測試網之間交叉,你應該確保總是 123 為虛擬貨幣和真實貨幣使用不同的賬戶。 除非你手動移動 124 帳戶,`geth` 默認情況下會正確分離兩個網絡,並且不會產生任何 125 他們之間可用的帳戶。* 126 127 ### Rinkeby 測試網絡上的完整節點 128 129 Go Ethereum 還支持連接到舊的基於權威證明的測試網絡 130 名為 [*Rinkeby*](https://www.rinkeby.io),由社區成員運營。 131 132 ```shell 133 $ geth --rinkeby console 134 ``` 135 136 ### Ropsten 測試網絡上的完整節點 137 138 除了 Görli 和 Rinkeby,Geth 還支持古老的 Ropsten 測試網。 這 139 Ropsten 測試網絡基於 Ethash 工作量證明共識算法。 像這樣, 140 它有一定的額外開銷,並且更容易受到重組攻擊,因為 141 網絡的低難度/安全性。 142 143 ```shell 144 $ geth --ropsten console 145 ``` 146 147 *注意:較舊的 Geth 配置將 Ropsten 數據庫存儲在 `testnet` 子目錄中。* 148 149 ### 配置 150 151 作為將大量標誌傳遞給“geth”二進製文件的替代方法,您還可以傳遞一個 152 配置文件通過: 153 154 ```shell 155 $ geth --config /path/to/your_config.toml 156 ``` 157 158 要了解文件的外觀,您可以使用 `dumpconfig` 子命令 159 導出現有配置: 160 161 ```shell 162 $ geth --your-favourite-flags dumpconfig 163 ``` 164 165 *Note: This works only with `geth` v1.6.0 and above.* 166 167 #### Docker 快速開始 168 169 在你的機器上啟動和運行以太坊的最快方法之一是使用 170 Docker: 171 172 ```shell 173 docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \ 174 -p 8545:8545 -p 30303:30303 \ 175 ethereum/client-go 176 ``` 177 178 這將以快照同步模式啟動“geth”,DB 內存允許為 1GB,就像 179 上面的命令可以。 它還將在您的主目錄中創建一個持久卷,用於 180 保存您的區塊鏈並映射默認端口。 還有一個`alpine`標籤 181 可用於圖像的苗條版本。 182 183 如果您想從其他容器訪問 RPC,請不要忘記 `--http.addr 0.0.0.0` 184 和/或主機。 默認情況下,`geth` 綁定到本地接口並且 RPC 端點不 185 可從外部訪問。 186 187 ### 以編程方式連接“geth”節點 188 189 作為開發人員,您遲早會想要開始與 `geth` 和 190 以太坊網絡通過您自己的程序而不是手動通過控制台。 191 為此,`geth` 內置了對基於 JSON-RPC 的 API 的支持([標準 API](https://eth.wiki/json-rpc/API) 192 和 [`geth` 特定的 API](https://geth.ethereum.org/docs/rpc/server))。 193 這些可以通過 HTTP、WebSockets 和 IPC(基於 UNIX 的 UNIX 套接字)公開 194 平台和 Windows 上的命名管道)。 195 196 IPC 接口默認啟用,並暴露 `geth` 支持的所有 API, 197 而 HTTP 和 WS 接口需要手動啟用並且只暴露一個 198 由於安全原因,API 的子集。 這些可以打開/關閉並配置為 199 你會期待的。 200 201 基於 HTTP 的 JSON-RPC API 選項: 202 203 * `--http` 啟用 HTTP-RPC 服務器 204 * `--http.addr` HTTP-RPC 服務器監聽接口(默認:`localhost`) 205 * `--http.port` HTTP-RPC 服務器監聽端口(默認:`8545`) 206 * `--http.api` API 通過 HTTP-RPC 接口提供(默認值:`eth,net,web3`) 207 * `--http.corsdomain` 逗號分隔的接受跨域請求的域列表(瀏覽器強制) 208 * `--ws` 啟用 WS-RPC 服務器 209 * `--ws.addr` WS-RPC 服務器監聽接口(默認:`localhost`) 210 * `--ws.port` WS-RPC 服務器監聽端口(默認:`8546`) 211 * `--ws.api` API 通過 WS-RPC 接口提供(默認值:`eth,net,web3`) 212 * `--ws.origins` 接受 websockets 請求的來源 213 * `--ipcdisable` 禁用 IPC-RPC 服務器 214 * `--ipcapi` API 通過 IPC-RPC 接口提供(默認:`admin,debug,eth,miner,net,personal,shh,txpool,web3`) 215 * `--ipcpath` 數據目錄中 IPC 套接字/管道的文件名(顯式路徑轉譯它) 216 217 您需要使用自己的編程環境的功能(庫、工具等)來 218 通過 HTTP、WS 或 IPC 連接到配置了上述標誌的“geth”節點,您將 219 需要在所有傳輸上使用 [JSON-RPC](https://www.jsonrpc.org/specification)。 你 220 可以為多個請求重用相同的連接! 221 222 **注意:請理解開放基於 HTTP/WS 的安全隱患 223 運輸之前這樣做! 互聯網上的黑客正在積極嘗試顛覆 224 帶有暴露 API 的以太坊節點! 此外,所有瀏覽器選項卡都可以在本地訪問 225 運行 Web 服務器,因此惡意網頁可能會嘗試破壞本地可用的APIs!** 226 227 ### 設置私有鏈 228 229 維護自己的專用網絡需要更多的配置,因為需要進行大量配置 230 在官網授予需要手動設置。 231 232 #### 設置私有鏈創世狀態 233 234 首先,您需要創建網絡的創世狀態,所有節點都需要這樣做 235 了解並同意。 這由一個小的 JSON 文件組成(例如,稱之為 `genesis.json`): 236 237 ```json 238 { 239 "config": { 240 "chainId": <arbitrary positive integer>, 241 "homesteadBlock": 0, 242 "eip150Block": 0, 243 "eip155Block": 0, 244 "eip158Block": 0, 245 "byzantiumBlock": 0, 246 "constantinopleBlock": 0, 247 "petersburgBlock": 0, 248 "istanbulBlock": 0, 249 "berlinBlock": 0, 250 "londonBlock": 0 251 }, 252 "alloc": {}, 253 "coinbase": "0x0000000000000000000000000000000000000000", 254 "difficulty": "0x20000", 255 "extraData": "", 256 "gasLimit": "0x2fefd8", 257 "nonce": "0x0000000000000042", 258 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", 259 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 260 "timestamp": "0x00" 261 } 262 ``` 263 264 上述字段對於大多數用途應該沒問題,儘管我們建議更改 265 將“nonce”設置為某個隨機值,以防止未知的遠程節點能夠 266 連接到你。 267 268 如果您想預先為一些帳戶提供資金以便於測試,請創建 269 帳戶並使用其地址填充“分配”字段。 270 271 ```json 272 "alloc": { 273 "0x0000000000000000000000000000000000000001": { 274 "balance": "111111111" 275 }, 276 "0x0000000000000000000000000000000000000002": { 277 "balance": "222222222" 278 } 279 } 280 ``` 281 282 使用上述 JSON 文件中定義的創世狀態,您需要初始化 **every** 283 `geth` 節點在啟動之前使用它,以確保所有區塊鏈參數正確 284 set: 285 286 ```shell 287 $ geth init path/to/genesis.json 288 ``` 289 290 #### 創建集合點 291 292 將要運行的所有節點初始化為所需的創世狀態,您需要 293 啟動一個引導節點,其他人可以使用該節點在您的網絡中和/或以上找到彼此 294 網路。 乾淨的方法是配置和運行一個專用的引導節點: 295 296 ```shell 297 $ bootnode --genkey=boot.key 298 $ bootnode --nodekey=boot.key 299 ``` 300 301 當 bootnode 在線時,它會顯示一個 [`enode` URL](https://eth.wiki/en/fundamentals/enode-url-format) 302 其他節點可以用來連接到它並交換對等點信息。 確保 303 用您的外部替換顯示的 IP 地址信息(很可能是 `[::]`) 304 可訪問的 IP 以獲取實際的 `enode` URL。 305 306 *注意:您也可以使用成熟的 `geth` 節點作為引導節點,但它是較少的 307 推薦的方式。* 308 309 #### 啟動你的成員節點 310 311 引導節點可操作且可從外部訪問(您可以嘗試 312 `telnet <ip> <port>` 以確保它確實可以訪問),啟動每個後續的 `geth` 313 node 通過 `--bootnodes` 標誌指向引導節點以進行對等發現。 它會 314 可能還需要保持私有網絡的數據目錄分開,所以 315 還要指定一個自定義的 `--datadir` 標誌flag. 316 317 ```shell 318 $ geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above> 319 ``` 320 321 *注意:由於您的網絡將與主網絡和測試網絡完全斷開,您將 322 還需要配置礦工來處理交易並為您創建新塊。* 323 324 #### 運行私人礦工 325 326 在公共以太坊網絡上挖礦是一項複雜的任務,因為它只能使用 GPU, 327 需要啟用 OpenCL 或 CUDA 的“ethminer”實例。 有關此類的信息 328 設置,請參考[EtherMining subreddit](https://www.reddit.com/r/EtherMining/) 329 和 [ethminer](https://github.com/ethereum-mining/ethminer) 存儲庫。 330 331 然而,在私有鏈設置中,單個CPU礦工實例足以滿足實用目的, 332 因為它可以以正確的間隔產生穩定的區塊不需要大量資源(考慮在單個線程上運行,也不需要多個)。 333 要啟動一個 `geth` 實例進行挖掘,請使用所有常用標誌運行它,擴展如下: 334 335 ```shell 336 $ geth <usual-flags> --mine --miner.threads=1 --miner.etherbase=0x0000000000000000000000000000000000000000 337 ``` 338 339 它將開始在單個CPU線程上挖掘塊和交易,將所有對`--miner.etherbase`指定的帳戶進行處理。 340 您可以進一步調整挖礦通過更改默認氣體限制塊收斂到 (`--miner.targetgaslimit`) 和價格 341 (`--miner.gasprice`) 接受交易。 342 343 ## 貢獻 344 345 感謝您考慮幫助提供源代碼!我們歡迎來自網路上的任何人投稿 346 ,並感謝即使是最小的修復! 347 348 如果您想為 go-ethereum 做出貢獻,請分叉、修復、提交並發送拉取請求 349 供維護人員審查並合併到主代碼庫中。如果您想提交更複雜的更改, 350 請先在 [我們的 Discord 服務器](https://discord.gg/invite/nthXNEv) 上與核心開發人員聯繫 351 確保這些更改符合項目的總體理念和/或獲得一些早期反饋可以使您的努力和我們的審查變得更加輕鬆 352 并快速簡單地合併程序。 353 354 請確保您的貢獻符合我們的編碼指南: 355 356 * 代碼必須遵守 Go 官方 [格式](https://golang.org/doc/effective_go.html#formatting) 357 指南(即使用 [gofmt](https://golang.org/cmd/gofmt/))。 358 * 代碼必須按照官方 Go [註釋](https://golang.org/doc/effective_go.html#commentary) 記錄在案 359 指導方針。 360 * 拉取請求需要基於 `master` 分支並針對其打開。 361 * 提交消息應該以他們修改的包為前綴。 362 * 例如“eth,rpc:使跟踪配置可選” 363 364 請參閱[開發者指南](https://geth.ethereum.org/docs/developers/devguide) 365 有關配置環境、管理項目依賴項的更多詳細信息,以及測試程序。 366 367 ## 許可證 368 369 go-ethereum 庫(即 `cmd` 目錄之外的所有代碼)在 370 [GNU 小通用公共許可證 v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), 371 也包含在我們存儲庫的“COPYING.LESSER”文件中。 372 373 go-ethereum 二進製文件(即 `cmd` 目錄中的所有代碼)在 374 [GNU 通用公共許可證 v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html),也 375 包含在我們的存儲庫中的`COPYING`文件中。