以太坊中有兩類賬戶,它們共用同一個位址空間。
- 外部賬戶,該類賬戶被公鑰-私鑰對控制(人類)。
- 合約賬戶,該類賬戶被存儲在賬戶中的代碼控制。
外部賬戶的位址是由公鑰決定的,合約賬戶的位址是在建立該合約時确定的。
合約賬戶存儲了代碼,外部賬戶則沒有,除了這點以外,這兩類賬戶對于EVM來說是一樣的。 每個賬戶有一個key-value形式的持久化存儲。其中key和value的長度都是256比特,名字叫做storage.
另外,每個賬戶都有一個以太币餘額(機關是“Wei"),該賬戶餘額可以通過向它發送帶有以太币的交易來改變。
web3實作
使用web3.eth.getCode()方法可以判斷一個給定的位址的賬戶是外部賬戶,還是合約賬戶。這個函數傳回指定位址的代碼,由于外部賬戶沒有代碼,是以僅僅會傳回
0x
,而合約賬戶将會傳回
0x
開頭的16進制代碼字元串。例如:
var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")
if(code === '0x') console.log('外部賬戶')
else console.log('合約賬戶')
在solidity中實作
在合約内,可以使用EVM彙編代碼來擷取指定位址處的代碼大小,顯然,普通賬戶位址将傳回
:
|
推薦兩個以太坊相關的實戰教程:
- 區塊鍊初學者 : 以太坊 DApp 實戰開發入門
- 區塊鍊開發進階:去中心化以太坊 DApp 電商平台實戰開發
更多的内容可以通路部落格:
http://blog.hubwiz.com/2018/02/12/how-to-check-ethereum-address/
版權聲明:本文為CSDN部落客「weixin_33859231」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_33859231/article/details/92415142