[TOC]
## 9.1賬戶
賬戶在以太坊中發揮著中心作用。共有兩種賬戶類型:外部賬戶(EOAs)和合約賬戶。我們這里重點講一下外部賬戶,以下會簡稱為賬戶。合約賬戶簡稱為合約, 在合約章節具體討論。把外部賬戶和合約賬戶都歸入到帇戵的一般概念是合理的,因為這些實體都是戶謂的狀態對象。這些實體都有狀態:賬戶有余額,合約既有余額也有合約儲存。所有賬戶的狀態正是以太坊網絡的狀態,以太坊網絡和每個區塊一起更新,網絡需要達成關于以太坊的共識。對于用戶通過交易和以太坊區塊鏈互動來說,賬戶是必不可少的。
如果我們把以太坊限制為只有外部賬戶,只允許外部賬戶之間進行交易,我們就會進入到"代幣"系統,"代幣"系統不如比特幣本身有力,只能用于轉移以太幣。
賬戶代表著外部代理人(例如人物角色,挖礦節點 ,或是自動代理人)的身份。賬戶運用公鑰加密圖像來簽署交易以便以太坊虛擬機可以安全地驗證交易發送者身份。
## 9.2鑰匙文件
每個賬戶都由一對鑰匙定義,一個私鑰和一個公鑰。 賬戶以地址為索引,地址由公鑰衍生而來,取公鑰的最后 20 個字節。每對私鑰 /地址都編碼在一個鑰匙文件里。鑰匙文件是 JSON 文本文件,可以用任何文本編輯器打開和瀏覓。鑰匙文件的關鍵部分,賬戶私鑰,通常用你創建帇戵時設置的密碼進行加密。
鑰匙文件可以在以太坊節點數據目彔的 keystore 子目彔下找到。確保絆常給鑰匙文件備份!查看備份和恢復賬號章節了解更多。創建鑰匙和創建賬戶是一
樣的。
* 不必告訴任何人你的操作。
* 不必和區塊鏈同步。
* 不必運行客戶端。
* 甚至不必連接到網絡。
當然新賬戶不包含任何以太幣。但它將會是你的,你大可放心,沒有你的鑰匙和密碼,沒有人能進入。
轉換整個目彔或任何以太坊節點之間的個人鑰匙文件都是安全的。
**警告:請注意萬一你僅一個不同的節點向另一個節點添加鑰匙文件, 賬戶的順序可能發生改變。確保不要回復或改變手稿中的索引或代碼片段。**
## 9.3創建賬號
警告:記住密碼并"備份鑰匙文件"。為了僅賬號發送交易,包括發送以太幣,你必項同時有鑰匙文件和密碼。確保鑰匙文件有個備份并牢記密碼,盡可能安全地存儲它們。這里沒有逃亡路徑,如果鑰匙文件丟失或忘記密碼,就會丟失所有的以太幣。沒有密碼不可能進入賬號,也沒有忘記密碼選頃。所以一定不要忘記密碼。
## 9.4使用geth account new
一旦安裝了 geth 客戶端,創建賬號就只是在終端執行 geth account new 指令的問題了。注意不必運行 geth 客戶端或者和區塊鏈同步來使用 geth account 指令。
```
$ geth account new
Your new account is locked with a password Please give a password.Do not forget this password.
Passphrase:
Repeat Passphrase:
Address:{168bc315a2ee09042d****************}
```
對于非交互式使用,你可以提供純文本密碼文件作為一password標志的變元。文件中的數據包含密碼的原始字節,后面可選擇單獨跟著新的一行。
```
$ geth --password /path/to/password account new
```
警告:用—password 標志只是為了測試或在信任的環境中自動操作。不建議將密碼保存在文件中或以任何其他方式暴露。如果你用密碼文件來使用—
password 標志,要確保文件只對你自己可閱讀和列表。你可以在 Mac/Linux 系統中通過以下指令實現:
```
$ touch /path/to/password
$ chmod 600 /path/to/password
$ cat > /path/to/password
>I type my pass
```
要列出目前在你的keystore文件夾中的鑰匙文件的所欲賬號,使用get account指令的list子指令:
```
$ geth account list
```
鑰匙文件的文件名格式為 UTC—–。賬號列出時是按字母順序排列,但是由于時間戳格式,實際上它是按創建順序排列。
## 9.5使用geth控制臺
為了用 geth 創建新賬號,我們必項先在控制臺模式開啟 geth(或者可以用 geth attach 將控制臺依附在已經運行著的事例上):
```
> geth console 2>> file_to_log_output instance:
Geth/v1.4.0-unstable/linux/go1.5.1 coinbase:
coinbase:[objiect Object] at block : 865174(Mon,18 Jan 2016 02:58:53 GMT) datadir:
/home/USERNAME/.ethereum
```
控制臺使你能夠通過發出指令不本地節點于相作用。比如,試一下這個列出賬號的指令:
```
> eth.accounts
```
這就表明你沒有賬號,你和可以從控制臺創建一個賬號:
````
>personal.newAccount()
````
注意:記得用一個安全性強、隨機生成的密碼。
我們剛剛創建了第一個賬號。如果我們再次試著列出賬號,就可以看到新創建的賬號了。
````
>eth.accounts
["0xb2f69ddf70297958e582a0cc98bce43294f1007d"]
````
## 9.6使用 Mist 以太坊錢包
對于相反的命令行,現在有一個基于 GUI 的選頃可以用來創建賬號:"官方
"Mist 以太坊錢包。 Mist 以太坊錢包,和它的父項目 Mist, 是在以太坊基金會的贊劣下開發,因此是"官方"地位。錢包應用有 Linux, Mac OS X 和
Windows 可用的版本。
警告:Mist 錢包是試用軟件,使用需風險自擔。
用 GUI Mist 以太坊錢包創建賬號再容易不過了。事實上,第一個賬號在應用
安裝期間就創建出來了。
1. 根據你的操作程序下載錢包應用最新版本。由于你實際上會運行一個完整的 geth 節
點,打開錢包應用就會開始同步復制你電腦上的整個以太坊區塊鏈。
2. 解鎖下載的文件夾,運行以太坊錢包可執行文件。
3. 等徃區塊鏈完全同步,按照屏幕上的說明操作,第一個賬號就創建出來了。
4. 第一次登彔 Mist 以太坊錢包,你會看到自己在安裝過程中創建的賬號。它會被默認
命名為主賬號(以太庫)
5. 再另外創建賬號徑容易;只需點擊應用主界面上的添加賬號,輸入戶需的密碼即可。
注意: Mist錢包仄在開發中,以上列出的具體步驟可能會隨著更新有所變更。