1. 程式人生 > 實用技巧 >以太坊的賬戶----外部賬戶和合約賬戶

以太坊的賬戶----外部賬戶和合約賬戶

以太坊賬戶:外部賬戶和合約賬戶

以太坊有兩種賬戶,它們共用同一個地址空間:

  • 外部賬戶(externally owned accounts),由金鑰控制。
  • 合約賬戶(contract accounts),由智慧合約的程式碼控制。

在這裡插入圖片描述

什麼是外部賬戶?

外部賬戶,該類賬戶被公鑰-私鑰對控制(人類)。以太坊地址代表一個帳戶。對於外部賬戶,地址是作為控制該賬戶的公鑰的最後20個位元組匯出的。

例如:0x71C7656EC7ab88b098defB751B7401B5f6d8976F。這是一個十六進位制格式(基數為16的表示法),通常通過向地址附加0x來明確指出。

外部賬戶的地址是由公鑰加密後生成的,所以使用者需要謹慎對待私鑰,私鑰用來檢視和處理我們賬戶中的資產,一旦丟失,資產將永遠丟失。

什麼是合約賬戶?

合約賬戶(contract accounts),由智慧合約的程式碼控制。只有合約賬戶才有程式碼,其中儲存的是 codeHash(這個賬戶的以太坊虛擬機器程式碼的雜湊值)。這個欄位在生成後是不可修改的,這意味著智慧合約程式碼是不可修改的。

以太坊的賬戶包括四個欄位:一個隨機數、賬戶的餘額、合約程式碼(如果有的話)、儲存(通常為空)。

外部賬戶可以觸發交易,而合約賬戶不能主動發起交易,只能在被觸發後按預先編寫的智慧合約程式碼執行。

合約賬戶可以設定多重簽名(multisign),比如一個簡單示例是:現有一個合約賬戶,它要求一個轉賬由發起轉賬的人(Alice)和另一個人(Charles)簽名均可。因此,當 Alice 通過這個合約向 Bob 轉賬 20 個 ETH 時,合約會通知 Charles 簽名,在他簽名後,Bob 才可以收到這 20 個 ETH(見下圖)。

在這裡插入圖片描述

外部賬戶和合約賬戶的區別

以太坊的賬戶包括四個欄位:一個隨機數、賬戶的餘額、合約程式碼(如果有的話)、儲存(通常為空)。

外部賬戶:有賬戶餘額;無程式碼;能觸發交易(轉賬或執行智慧合約);由私鑰控制。

合約賬戶:有賬戶餘額;有程式碼;能被觸發執行智慧合約程式碼;在智慧合約建立後自動執行。

外部賬戶的地址是由公鑰決定的。

合約賬戶的地址是在建立合約時確定的(這個地址由合約建立者的地址和該地址發出過的交易數量計算得到)。