以太坊中的賬戶 Account

2021-08-19 20:47:41 字數 2661 閱讀 8408

1. 什麼是賬戶?

乙太坊是乙個p2p網路,任何人只要有一台可以聯網的電腦,都可以參與到這個網路中。

普通使用者參與到乙太坊網路中,最常見的目的,就是進行乙太幣交易。比方說a要把100個eth轉給b,這就會生成一比交易。這筆交易會被打包到乙個區塊中,由礦工將其加入區塊鏈中。礦工做這件事的過程就是記賬,或者稱之為挖礦。當然,礦工不是義務勞動,是需要收取手續費的,並且還會得到獎勵。

當然,還有另外一種目的,那就是部署智慧型合約,這是一種更高階的玩法,可以在a和b之間形成乙個在某種條件下可以強制執行的合約。舉個簡單的例子,a和b之間部署了這麼一種合約,合約規定:1)2023年1月1號,a和b分別往合約賬號中充值價值100美元的eth。簡單起見,比方說乙個eth價值1美元,那麼每個人,都會衝100eth到合約賬戶中;2)2023年2月1號時,合約賬戶向a轉移價值100美元的eth,剩下的eth全部轉給b。

這個合約乍一看有點繞,但是仔細想想,邏輯很清晰:如果相對於1月1號,2月1號時eth公升值了,比方說漲到了2美元,那麼a只能從合約賬戶中得到50個eth,而剩下的150eth會全部轉給b。說得更白話一些,這其實是乙個對沖合約:a是看跌的,b是看漲的。因為漲的時候,b可以得到更多的eth,而跌的時候,a可以得到更多的eth。

如果2月1號時,eth漲到了2美元,a想反悔怎麼辦?對不起,合約**已經寫到了區塊鏈中,2月1號會強制觸發,a只能怪自己沒有判斷對形勢,b只顧數錢就行了,不用擔心a會耍賴。

說了這麼多,我們要回到本文的主題。在以上兩種目的中,參與者a和b,其實就是乙太坊中的最常見的賬戶,我們稱為外部賬戶(eoa: externally owned account)。我們提到的合約,也被維護在是乙個賬戶中,即合約賬戶(ca: contract account)。

在乙太坊網路中,賬戶的狀態資訊是全域性的,這些狀態會被一種特殊的資料結果(mpt:默克爾字首樹)儲存到每乙個區塊中,比方說賬戶a的位址,餘額,交易的次數等等,比方說合約賬戶的位址,餘額,合約**等等。

今天我們詳細說一下外部賬戶eoa,合約賬戶放到下一章來說。

2. 公鑰和私鑰

每個賬戶都會由一對私鑰和公鑰組成。

每個賬戶都有乙個位址,而這個位址,就是交易時用的位址。a往b轉100eth,其實就是b的位址轉100eth。這個位址,就像我們的銀行卡號一樣,可以公開的隨便告訴別人(不告訴別人,別人怎麼把錢轉給你?)。

私鑰經過一種雜湊演算法(橢圓曲線演算法

ecdsa-secp256k1)計算生成公鑰,然後取公鑰的最後160位二進位制(通常表現為40位的16進製制字串)形成了位址。

其中,公鑰和位址都是可以公布的,而私鑰,你只能自己悄悄的藏起來,不要丟失,因為你的賬戶中的資產也會跟著丟掉;不要被別人盜取,因為賬戶中的資產也會隨著被盜取。所以,私鑰的儲存非常重要。

在位元幣世界中,私鑰的儲存方式是:把一串很長的私鑰用你能想到最可靠的辦法儲存起來,比方說寫到一張紙條上然後把它藏到喜馬拉雅之顛;私鑰的儲存,甚至催生一條產業鏈和一批創業公司,比方說電子硬體錢包,專門幫你儲存私鑰到乙個便攜的裝置中。

在乙太坊的世界中,私鑰的表現形式和儲存方式又不一樣了:它由乙個密碼和乙個keyfile組成。這個密碼就是我們通常在網際網路上註冊賬戶時用的密碼,就像你的**賬戶密碼。當然你最好把這個密碼設定得盡量複雜一些,造成別用生日,手機號,或者1111111,以防輕易被他人破解。而keyfile則是乙個明文的json格式檔案,裡面儲存的是私鑰的加密資訊。乙太坊的客戶端,可以通過密碼和keyfile,解密出私鑰。

意思是說:耶!我們不用記那一串的私鑰了!

但是,我們要記住密碼,並且把keyfile儲存好了!如果丟了密碼和keyfile的任何乙個,諾!聽說最高的樓在那邊,看到了嗎?對前面500公尺左轉就是。

3. 賬戶的建立

建立乙個賬戶,其實就是要建立乙個密碼加乙個keyfile。當然,通過密碼和keyfile,程式也會自動生成公鑰和賬戶位址。

這裡要說一件有意思的事情,當你在乙太坊建立乙個賬戶時,有一些與傳統的中心化的系統截然不同的現象:

(1)你的賬戶(包括私鑰,密碼,keyfile,公鑰和位址)不會被記錄到乙太坊系統的資料庫中(也就是區塊鏈中)

(2)你不需要告訴任何人你建立了乙個賬戶,他們也不需要知道,除非有人要給你轉賬。

(3)你也不需要執行乙太坊的客戶端

(4)你甚至不用聯網,離線的建立

你所要做的,就是儲存好你的密碼和keyfile,然後當別要給你轉賬時,把你的賬戶位址(40位的字串)告訴別人就行了。剩下的,就交給乙太坊。

當有人往你的位址轉了一筆eth後,你只需開啟乙太坊的錢包,用你的密碼和keyfile恢復賬號(恢復步驟),然後就能看到這筆錢了。

下面,我們看一下如何建立賬號,簡單得不能再簡單了,執行如下命令:

geth account new
這個命令會提示你輸入密碼。完成後,會提示你keyfile的儲存路徑,並提示你儲存。

使用如下命令可以檢視建立好的賬戶:

$ geth account list

account #0:

account #1:

account #2:

以太坊 賬戶

1 概述 位元幣 bitcoin 去中心化的貨幣 decentralized money 以太坊 etherem 去中心化的合約 decentralized contract 2 賬戶 可以很好的防禦double spending attack,因為每花費一筆錢,就扣除,更新餘額,不需要說明幣的 但...

以太坊 預設賬戶

以太坊私鏈的預設賬戶,是在生成創世區塊依賴的genesis.json檔案中的alloc中進行配置,下面就是如何定義自己預設賬戶的方法。步驟一 執行 geth console 進入js控制台。personal.newaccount passwd 建立賬戶 exit 步驟二 執行 rm ethereum...

2 2 以太坊賬戶

以太坊使用256位加密。以太坊私鑰 公鑰是乙個256位數。因為處理器不能表示這麼大的數,所以它被編譯成長度為64的十六進製制字串。每個賬戶用乙個位址表示。有了金鑰之後,就需要生成位址。從公鑰生成位址的過程如下 1 生成公鑰的keccak 256雜湊。它將給出乙個256位的數字。2 丟棄前面的96位,...