Skip to content

Commit b0cb4b9

Browse files
committed
Update Chinese Traditional (zh-tw) Foundational docs bucket
1 parent cd688e5 commit b0cb4b9

File tree

13 files changed

+1546
-1
lines changed

13 files changed

+1546
-1
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
---
2+
title: 以太坊帳戶
3+
description: 以太坊帳戶釋義 — 帳戶的資料結構以及和金鑰組密碼學的關係。
4+
lang: zh-tw
5+
---
6+
7+
以太坊帳戶是一個擁有以太幣 (ETH) 餘額且可以在以太坊上發送交易的實體。 帳戶可以為使用者控制的帳戶,或為智慧型合約形式的帳戶。
8+
9+
## 基本資訊 {#prerequisites}
10+
11+
為了讓你更容易理解本頁,建議你先通讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)
12+
13+
## 帳戶類型 {#types-of-account}
14+
15+
以太坊有兩種帳戶類型:
16+
17+
- 外部帳戶 (EOA) – 由任何持有私密金鑰的人控制
18+
- 合約帳戶 – 部署在網路上的智慧型合約,由程式碼控制。 瞭解[智慧型合約](/developers/docs/smart-contracts/)
19+
20+
這兩種帳戶類型都能:
21+
22+
- 接收、存放和發送以太幣和代幣
23+
- 與部署的智慧型合約互動
24+
25+
### 主要差異 {#key-differences}
26+
27+
**外部帳戶**
28+
29+
- 建立帳戶是免費的
30+
- 能夠發起交易
31+
- 外部帳戶之間的交易只能是以太幣/代幣轉賬
32+
- 由密碼學金鑰組組成:公開以及私密金鑰控制帳戶活動
33+
34+
**合約帳戶**
35+
36+
- 建立帳戶會佔用網絡存儲因此會產生費用
37+
- 只能在接受到交易時發送交易
38+
- 從外部帳戶向合約帳戶發送的交易能觸發程式碼,並能執行多種不同操作:例如傳送代幣,甚至建立新合約。
39+
- 合約帳戶沒有私密金鑰。 但它們由智慧型合約程式碼的邏輯控制
40+
41+
## 帳戶檢視 {#an-account-examined}
42+
43+
以太坊帳戶有四個欄位:
44+
45+
- `nonce` – 一個計數器,指示外部帳戶發送的交易數量或合約帳戶建立的合約數量。 對於每個帳戶,一筆特定 Nonce 的交易只能執行一次,這是未了防範重放攻擊,即不斷地廣播並重覆執行已簽署的交易。
46+
- `balance` – 該地址擁有的 Wei 的數量。 Wei 是以太幣的面額,1 以太幣等於 1e+18 個 Wei。
47+
- `codeHash` -- 此雜湊值指帳戶於以太坊虛擬機 (EVM) 上的*程式碼*。 包含了程式碼片段的合約帳戶可以執行不同操作。 對帳戶進行訊息調用時,執行此以太坊虛擬機程式碼。 不同於帳戶的其他欄位,此欄位無法更改。 所有此等程式碼片段都包含於狀態資料庫中其對應的雜湊值下,以便日後擷取。 此雜湊值稱為 codeHash。 對於外部帳戶,codeHash 欄位是空字串的雜湊值。
48+
- `storageRoot` – 有時稱為存儲雜湊值。 梅克爾帕特里夏樹之根節點的 256 位雜湊值,它對帳戶的存儲內容進行編碼(256 位整數值之間的映射),在樹形資料結構中編碼成 256 位整數鍵的雜湊值到 RPL 編碼的 256 位整數值之間的映射。 該樹形資料結構對此帳戶的存儲內容的雜湊值進行編碼,且默認為空白。
49+
50+
![顯示帳戶組成結構的圖表](./accounts.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_
51+
52+
## 外部帳戶和金鑰組 {#externally-owned-accounts-and-key-pairs}
53+
54+
帳戶由加密金鑰組組成:公開金鑰及私密金鑰。 金鑰組有助於證明交易確實由發送者簽署,並可防止偽造。 私密金鑰用於簽署交易,為你授予與帳戶相關的資金的監管權。 你從未真正持有加密貨幣,你持有的是私密金鑰 – 資金始終處於以太坊帳本中。
55+
56+
這樣可防止惡意行為者廣播假造交易,因為你始終都能驗證交易的發送者。
57+
58+
假設 Alice 想從自己的帳戶給 Bob 的帳戶發送以太幣,她須建立交易請求並發送到網路上進行驗證。 以太坊採用公開金鑰加密,這能確保 Alice 可以證明是她自己最初發起了該交易請求。 如果沒有加密機制,惡意對手 Eve 就能輕鬆廣播一個請求,例如「從 Alice 的帳戶給 Eve 的帳戶發送 5 以太幣」。沒有人能夠驗證這個請求不是 Alice 發送的。
59+
60+
## 建立帳戶 {#account-creation}
61+
62+
當你想建立一個帳戶時,大多數程式庫會為你產生一個隨機私密金鑰。
63+
64+
私密金鑰由 64 個十六進位字元組成並且能夠使用密碼加密。
65+
66+
範例:
67+
68+
`fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f`
69+
70+
公開金鑰是使用[橢圓曲線數位簽名演算法](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)從私密金鑰產生的。 你的帳戶的公開地址由公開金鑰 Keccak-256 雜湊值的後 20 位在開頭加上 `0x` 組成。
71+
72+
下面的範例展示如何使用一種簽名工具 [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) 來產生一個新帳戶。 Clef 是一種與以太坊用戶端 [Geth](https://geth.ethereum.org) 綁定的帳戶管理與簽名工具。 `clef newaccount` 命令建立一個新的金鑰組並將其存儲於加密的密鑰庫。
73+
74+
```
75+
> clef newaccount --keystore <path>
76+
77+
Please enter a password for the new account to be created:
78+
> <password>
79+
80+
------------
81+
INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a120
82+
WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120
83+
WARN [10-28|16:19:09.306] Please remember your password!
84+
Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120
85+
```
86+
87+
[Geth 文件](https://geth.ethereum.org/docs)
88+
89+
可以透過私密金鑰衍生出公開金鑰,但無法使用公開金鑰衍生出私密金鑰。 顧名思義,**私密**意味著保障私密金鑰安全很重要。
90+
91+
你需要使用私密金鑰來簽署訊息和交易,並輸出一個簽章。 之後,其他人能夠使用該簽章衍生出你的公開金鑰,證明你是這條訊息的創作者。 在你的應用程式中,你可以使用 JavaScript 程式庫將交易發送至網路。
92+
93+
## 合約帳戶 {#contract-accounts}
94+
95+
合約帳戶亦有一個含有 42 個字元的 16 進位地址:
96+
97+
案例:
98+
99+
`0x06012c8cf97bead5deae237070f9587f8e7a266d`
100+
101+
當在以太坊區塊鏈上部署一個合約時,通常給出合約地址。 合約地址由創作者地址及該地址發送的交易數量組成(「nonce」)。
102+
103+
## 驗證者金鑰 {#validators-keys}
104+
105+
以太坊還有另一種金鑰,是在以太坊的共識機制從工作量證明過渡到權益證明時引入的。 它們是「BLS」金鑰,且被用於識別驗證者。 這些金鑰能有效地聚合起來,從而降低網路達成共識所需的帶寬。 如果沒有此等金鑰聚合,成為驗證者所需的最低質押量會高出許多。
106+
107+
[更多驗證者金鑰相關資訊](/developers/docs/consensus-mechanisms/pos/keys/)
108+
109+
## 關於錢包的備註 {#a-note-on-wallets}
110+
111+
帳戶並非錢包。 帳戶是使用者持有的以太坊帳戶的金鑰組。 錢包則是一個介面或應用程式,讓你能夠和你的以太坊帳戶互動。
112+
113+
## 視覺範例 {#a-visual-demo}
114+
115+
觀看 Austin 為你全面講解雜湊函式和金鑰組。
116+
117+
<YouTube id="QJ010l-pBpE" />
118+
119+
<YouTube id="9LtBDy67Tho" />
120+
121+
## 延伸閱讀 {#further-reading}
122+
123+
- [了解以太坊帳戶](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan
124+
125+
_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_
126+
127+
## 相關主題 {#related-topics}
128+
129+
- [智慧型合約](/developers/docs/smart-contracts/)
130+
- [異動](/developers/docs/transactions/)
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
---
2+
title: 區塊
3+
description: 以太坊區塊鏈之區塊概要 -- 資料結構、必要性及生成方式。
4+
lang: zh-tw
5+
---
6+
7+
區塊為區塊鏈上擁有前一個區塊之雜湊值的交易批次。 透過這種方式,區域連結起來形成區塊鏈,因為雜湊值是透過加密方式從區塊資料中衍生得來的。 這樣就防止了假造,因為對歷史記錄中的任何區塊進行一處變更將會使其後的所有區塊無效,後面的所有雜湊值都會改變,並且所有運行區塊鏈的人都會注意到。
8+
9+
## 基本資訊 {#prerequisites}
10+
11+
區塊是一個非常簡單易懂的主題。 為了讓你更容易理解本頁,建議你先閱讀[帳戶](/developers/docs/accounts/)[交易](/developers/docs/transactions/)及我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)
12+
13+
## 為何需要區塊? {#why-blocks}
14+
15+
為確保所有以太坊網路參與者擁有同步狀態並一致同意明確的交易歷史記錄,我們將交易分批打包成區塊。 此代表數十個(或數百個)交易將同時被提交、同意及同步。
16+
17+
![顯示區塊中的交易導致狀態產生變化的圖表](./tx-block.png) _此圖源於[以太坊 EVM 圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_
18+
19+
透過將交易提交間隔分開,所有網路參與者能有足夠時間來達成共識:即便每秒有大量交易請求提出,但在以太坊上,僅以大約 12 秒的時間建立並提交一次區塊。
20+
21+
## 區塊如何運作? {#how-blocks-work}
22+
23+
為了保持交易歷史記錄,區塊嚴格按照順序排列(新建立區塊包含父區塊之參照),而區塊內的交易也是嚴格按照順序排列。 除極個別情形外,在任何給定時間點,所有網路參與者都一致同意區塊的準確數量及歷史記錄,並致力於將當前的即時交易請求批次打包到下一個區塊中。
24+
25+
當隨機挑選的驗證者在網路上生成一個區塊後,區塊將被廣播至全網路;所有節點將此新區塊添加於它們的區塊鏈尾端,接著,挑選一個新的驗證者來產生下一個區塊。 目前區塊生成、提交/共識流程是由以太坊之「權益證明」協議規定的。
26+
27+
## 權益證明協議 {#proof-of-work-protocol}
28+
29+
權益證明指的是:
30+
31+
- 驗證節點必須質押 32 個以太幣至存款合約,做為抵押品以避免惡意行為。 這會幫助保護網路,因為不誠信的活動一經證實會導致部分或全部質押被銷毀。
32+
- 在每個時隙(12 秒間隔),會隨機挑選一位驗證者做為區塊的提交者。 他們將交易打包、執行並決定新的「狀態」。 他們將此資訊包裝進區塊並傳送給其他驗證者。
33+
- 其他驗證者接到此新區塊後,重新執行這些交易,以確保他們同意新提交的全域狀態變更。 如果該區塊是有效的,他們將其加入自己的資料庫。
34+
- 如果驗證者在同一時隙接到兩個衝突的區塊,他們會透過分叉選擇演算法選擇有最多質押以太幣支援的區塊。
35+
36+
[更多詳情關於質押證明(PoS)](/developers/docs/consensus-mechanisms/pos)
37+
38+
## 區塊中有什麼? {#block-anatomy}
39+
40+
區塊內有很多資訊。 在最高層級,區塊包含以下欄位:
41+
42+
| 欄位 | 描述 |
43+
| :--------------- | :--------------------------- |
44+
| `時隙` | 區塊所屬的時隙 |
45+
| `proposer_index` | 提出區塊的驗證者的識別碼 |
46+
| `parent_root` | 前一個區塊的雜湊值 |
47+
| `state_root` | 狀態物件的根雜湊值 |
48+
| `主旨` | 包含多個欄位的物件,定義如下 |
49+
50+
區塊的 `body` 包含以下幾個欄位:
51+
52+
| 欄位 | 描述 |
53+
| :------------------- | :--------------------------- |
54+
| `randao_reveal` | 用於選擇下一個區塊提出者的值 |
55+
| `eth1_data` | 關於存款合約的資訊 |
56+
| `塗鴉` | 用於標記區塊的任意資料 |
57+
| `proposer_slashings` | 將被罰沒的驗證者清單 |
58+
| `attester_slashings` | 將被罰沒的驗證者清單 |
59+
| `證明` | 支持當前區塊的證明清單 |
60+
| `存款` | 存款合約的新增存款清單 |
61+
| `voluntary_exits` | 離開網路的驗證者清單 |
62+
| `sync_aggregate` | 服務輕量用端的驗證者子集 |
63+
| `execution_payload` | 執行用户端傳送來的交易 |
64+
65+
`attestations` 欄位包含區塊中所有證明的清單。 每個證明都有自己的資料類型並包含一些資料。 每個證明包含:
66+
67+
| 欄位 | 描述 |
68+
| :----------------- | :----------------------- |
69+
| `aggregation_bits` | 參與過此證明的驗證者清單 |
70+
| `數據資料` | 包含多個子欄位的容器 |
71+
| `signature` | 所有證明驗證者的聚合簽名 |
72+
73+
`attestation` 中的 `data` 欄位包含:
74+
75+
| 欄位 | 描述 |
76+
| :------------------ | :----------------------------- |
77+
| `時隙` | 與證明相關的時隙 |
78+
| `索引` | 證明驗證者的索引 |
79+
| `beacon_block_root` | 包含此物件的信標區塊的根雜湊值 |
80+
| `來源` | 最後一個合法檢查點 |
81+
| `target` | 最新時期的邊界區塊 |
82+
83+
執行 `execution_payload` 中的交易會更新全域狀態。 所有用戶端都重新執行 `execution_payload` 中的交易,以確保新的狀態與新區塊中 `state_root` 欄位中的狀態相符。 這就是用戶端辨別新區塊是否有效並可以安全添加至其區塊鏈中的方式。 `execution payload` 自身是一個有許多欄位的物件。 還有一個 `execution_payload_header` 欄位,其中包含了關於執行資料的重要摘要資訊。 這些資料結構組織方式如下:
84+
85+
`xecution_payload_header` 包含以下欄位:
86+
87+
| 欄位 | 描述 |
88+
| :------------------ | :--------------------------------------- |
89+
| `家長_雜湊值` | 父區塊的雜湊值 |
90+
| `fee_recipient` | 用於支付交易費的帳戶地址 |
91+
| `state_root` | 在應用此區塊中的變更後全域狀態的根雜湊值 |
92+
| `receipts_root` | 交易收據樹的雜湊值 |
93+
| `logs_bloom` | 包含事件記錄的資料結構 |
94+
| `prev_randao` | 用於隨機選擇驗證者的值 |
95+
| `block_number` | 目前區塊號碼 |
96+
| `gas_limit` | 此區塊允許的最高燃料用量 |
97+
| `gas_used` | 此區塊實際消耗的燃料用量 |
98+
| `時間戳` | 區塊時間 |
99+
| `extra_data` | 原始字節位元組格式的任意額外資料 |
100+
| `base_fee_per_gas` | 基本費用的值 |
101+
| `block_hash` | 執行區塊的雜湊值 |
102+
| `transactions_root` | 有效負載中交易的根雜湊值 |
103+
| `withdrawal_root` | 有效負載中提款的根雜湊值 |
104+
105+
`execution_payload` 自身包含了以下欄位(請注意,這些欄位與標頭相同,只是它不包含交易的根雜湊值,而是包含實際的交易清單和提款資訊):
106+
107+
| 欄位 | 描述 |
108+
| :--------------------- | :--------------------------------------- |
109+
| `家長_雜湊值` | 父區塊的雜湊值 |
110+
| `fee_recipient` | 用於支付交易費的帳戶地址 |
111+
| `state_root` | 在應用此區塊中的變更後全域狀態的根雜湊值 |
112+
| `receipts_root` | 交易收據樹的雜湊值 |
113+
| `logs_bloom` | 包含事件記錄的資料結構 |
114+
| `prev_randao` | 用於隨機選擇驗證者的值 |
115+
| `block_number` | 目前區塊號碼 |
116+
| `gas_limit` | 此區塊允許的最高燃料用量 |
117+
| `gas_used` | 此區塊實際消耗的燃料用量 |
118+
| `時間戳` | 區塊時間 |
119+
| `extra_data` | 原始字節位元組格式的任意額外資料 |
120+
| `base_fee_per_gas` | 基本費用的值 |
121+
| `block_hash` | 執行區塊的雜湊值 |
122+
| `交易(transactions)` | 要執行交易的清單 |
123+
| `提款` | 提款物件清單 |
124+
125+
`withdrawals` 清單包含 `withdrawals` 物件,具下列結構:
126+
127+
| 欄位 | 描述 |
128+
| :--------------- | :--------------- |
129+
| `地址` | 已提款的帳戶地址 |
130+
| `amount` | 提款金額 |
131+
| `索引` | 提款索引值 |
132+
| `validatorIndex` | 驗證者索引值 |
133+
134+
## 區塊時間 {#block-time}
135+
136+
區塊時間指的是分隔區塊的時間。 在以太坊上,時間被分割成 12 秒的單位,稱為「時隙」。 在每個時隙中,都會選擇一個驗證者來提交區塊。 假設所有驗證者都在線且功能完整,那每個時隙中都會有一個區塊,表示區塊時間為 12 秒。 然而,偶爾,當被要求提交區塊時驗證者可能下線,這表示時隙有時候會是空白的。
137+
138+
這種實作與基於工作量證明的系統不同,在工作量證明系統中,區塊時間是機率性的,並根據協議的目標挖礦難度調整。 以太坊的[平均區塊時間](https://etherscan.io/chart/blocktime)就是個完美的範例,可以透過一致性的 12 秒區塊時間清楚地推斷出,已經由工作量證明過渡到權益證明了。
139+
140+
## 區塊大小 {#block-size}
141+
142+
最後一個重要事項:區塊本身具大小限制。 每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 區塊中所有交易消耗的總燃料用量須少於區塊燃料限制。 這一點非常重要,因其確保區塊不能成為任意大小。 若區塊可以任意大,由於空間及速度方面的要求,那些效能一般的全節點可能逐漸跟不上網路。 區塊愈大,在下一個時隙中及時處理它們所需的算力就愈多。 這是一種中心化力量,可以透過限制區塊大小來抵制。
143+
144+
## 衍生閱讀 {#further-reading}
145+
146+
_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_
147+
148+
## 相關主題 {#related-topics}
149+
150+
- [交易](/developers/docs/transactions/)
151+
- [燃料](/developers/docs/gas/)
152+
- [權益證明(PoS)](/developers/docs/consensus-mechanisms/pos)

0 commit comments

Comments
 (0)