文章出于:http://wangxiaoming.com/blog/2016/06/22/e11/
賬戶在以太坊中發(fā)揮著中心作用。共有兩種賬戶類型:外部賬戶(EOAs)和合約賬戶。我們這里重點(diǎn)講一下外部賬戶,以下會(huì)簡稱為賬戶。合約賬戶簡稱為合約, 在合約章節(jié)具體討論。把外部賬戶和合約賬戶都?xì)w入到帳戶的一般概念是合理的,因?yàn)檫@些實(shí)體都是所謂的狀態(tài)對(duì)象。這些實(shí)體都有狀態(tài):賬戶有余額,合約既有余額也有合約儲(chǔ)存。所有賬戶的狀態(tài)正是以太坊網(wǎng)絡(luò)的狀態(tài),以太坊網(wǎng)絡(luò)和每個(gè)區(qū)塊一起更新,網(wǎng)絡(luò)需要達(dá)成關(guān)于以太坊的共識(shí)。對(duì)于用戶通過交易和以太坊區(qū)塊鏈互動(dòng)來說,賬戶是必不可少的。
如果我們把以太坊限制為只有外部賬戶,只允許外部賬戶之間進(jìn)行交易,我們就會(huì)進(jìn)入到"代幣"系統(tǒng),"代幣"系統(tǒng)不如比特幣本身有力,只能用于轉(zhuǎn)移以太幣。
賬戶代表著外部代理人(例如人物角色,挖礦節(jié)點(diǎn) ,或是自動(dòng)代理人)的身份。賬戶運(yùn)用公鑰加密圖像來簽署交易以便以太坊虛擬機(jī)可以安全地驗(yàn)證交易發(fā)送者身份。
每個(gè)賬戶都由一對(duì)鑰匙定義,一個(gè)私鑰和一個(gè)公鑰。 賬戶以地址為索引,地址由公鑰衍生而來,取公鑰的最后 20個(gè)字節(jié)。每對(duì)私鑰 /地址都編碼在一個(gè)鑰匙文件里。鑰匙文件是JSON文本文件,可以用任何文本編輯器打開和瀏覽。鑰匙文件的關(guān)鍵部分,賬戶私鑰,通常用你創(chuàng)建帳戶時(shí)設(shè)置的密碼進(jìn)行加密。鑰匙文件可以在以太坊節(jié)點(diǎn)數(shù)據(jù)目錄的keystore子目錄下找到。確保經(jīng)常給鑰匙文件備份!查看備份和恢復(fù)賬號(hào)章節(jié)了解更多。創(chuàng)建鑰匙和創(chuàng)建帳戶是一樣的。
當(dāng)然新賬戶不包含任何以太幣。但它將會(huì)是你的,你大可放心,沒有你的鑰匙和密碼,沒有人能進(jìn)入。
轉(zhuǎn)換整個(gè)目錄或任何以太坊節(jié)點(diǎn)之間的個(gè)人鑰匙文件都是安全的。
警告:請(qǐng)注意萬一你從一個(gè)不同的節(jié)點(diǎn)向另一個(gè)節(jié)點(diǎn)添加鑰匙文件, 賬戶的順序可能發(fā)生改變。確保不要回復(fù)或改變手稿中的索引或代碼片段。
警告:記住密碼并"備份鑰匙文件"。為了從賬號(hào)發(fā)送交易,包括發(fā)送以太幣,你必須同時(shí)有鑰匙文件和密碼。確保鑰匙文件有個(gè)備份并牢記密碼,盡可能安全地存儲(chǔ)它們。這里沒有逃亡路徑,如果鑰匙文件丟失或忘記密碼,就會(huì)丟失所有的以太幣。沒有密碼不可能進(jìn)入賬號(hào),也沒有忘記密碼選項(xiàng)。所以一定不要忘記密碼。
一旦安裝了geth客戶端,創(chuàng)建賬號(hào)就只是在終端執(zhí)行 geth account new指令的問題了。
注意不必運(yùn)行g(shù)eth客戶端或者和區(qū)塊鏈同步來使用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: {168bc315a2ee09042d83d7c5811b533620531f67}
對(duì)于非交互式使用,你可以提供純文本密碼文件作為—password標(biāo)志的變?cè)N募械臄?shù)據(jù)包含密碼的原始字節(jié),后面可選擇單獨(dú)跟著新的一行。
$ geth --password /path/to/password account new
警告:用—password標(biāo)志只是為了測(cè)試或在信任的環(huán)境中自動(dòng)操作。不建議將密碼保存在文件中或以任何其他方式暴露。如果你用密碼文件來使用—password標(biāo)志,要確保文件只對(duì)你自己可閱讀和列表。你可以在 Mac/Linux系統(tǒng)中通過以下指令實(shí)現(xiàn):
touch /path/to/password
chmod 600 /path/to/password
cat > /path/to/password
>I type my pass
要列出目前在你的keystore文件夾中的鑰匙文件的所有賬號(hào),使用 geth account指令的list子指令:
$ geth account list
account #0: {a94f5374fce5edbc8e2a8697c15331677e6ebf0b}
account #1: {c385233b188811c9f355d4caec14df86d6248235}
account #2: {7f444580bfef4b9bc7e14eb7fb2a029336b07c9d}
鑰匙文件的文件名格式為UTC—–
。賬號(hào)列出時(shí)是按字母順序排列,但是由于時(shí)間戳格式,實(shí)際上它是按創(chuàng)建順序排列。
為了用geth創(chuàng)建新賬號(hào),我們必須先在控制臺(tái)模式開啟geth(或者可以用 geth attach將控制臺(tái)依附在已經(jīng)運(yùn)行著的事例上):
> geth console 2>> file_to_log_output
instance: Geth/v1.4.0-unstable/linux/go1.5.1
coinbase: coinbase: [object Object]
at block: 865174 (Mon, 18 Jan 2016 02:58:53 GMT)
datadir: /home/USERNAME/.ethereum
控制臺(tái)使你能夠通過發(fā)出指令與本地節(jié)點(diǎn)互相作用。比如,試一下這個(gè)列出賬號(hào)的指令:
> eth.accounts
{
code: -32000,
message: "no keys in store"
}
這就表明你沒有賬號(hào)。你也可以從控制臺(tái)創(chuàng)建一個(gè)賬號(hào):
> personal.newAccount()
Passphrase:
Repeat passphrase:
"0xb2f69ddf70297958e582a0cc98bce43294f1007d"
注意:記得用一個(gè)安全性強(qiáng)、隨機(jī)生成的密碼。
我們剛剛創(chuàng)建了第一個(gè)賬號(hào)。如果我們?cè)俅卧囍谐鲑~號(hào),就可以看到新創(chuàng)建的賬號(hào)了。
> eth.accounts
["0xb2f69ddf70297958e582a0cc98bce43294f1007d"]
對(duì)于相反的命令行,現(xiàn)在有一個(gè)基于GUI的選項(xiàng)可以用來創(chuàng)建賬號(hào):"官方"Mist以太坊錢包。 Mist以太坊錢包,和它的父項(xiàng)目Mist, 是在以太坊基金會(huì)的贊助下開發(fā),因此是"官方"地位。錢包應(yīng)用有Linux, Mac OS X和Windows可用的版本。
警告:Mist錢包是試用軟件,使用需風(fēng)險(xiǎn)自擔(dān)。
用GUI Mist以太坊錢包創(chuàng)建賬號(hào)再容易不過了。事實(shí)上,第一個(gè)賬號(hào)在應(yīng)用安裝期間就創(chuàng)建出來了。
注意: Mist錢包仍在開發(fā)中,以上列出的具體步驟可能會(huì)隨著更新有所變更。