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`文件中。