以太坊中有兩類帳戶,它們共用同一個地址空間。web
外部帳戶的地址是由公鑰決定的,合約帳戶的地址是在建立該合約時肯定的。函數
合約帳戶存儲了代碼,外部帳戶則沒有,除了這點之外,這兩類帳戶對於EVM來講是同樣的。 每一個帳戶有一個key-value形式的持久化存儲。其中key和value的長度都是256比特,名字叫作storage.區塊鏈
另外,每一個帳戶都有一個以太幣餘額(單位是「Wei"),該帳戶餘額能夠經過向它發送帶有以太幣的交易來改變。ui
使用web3.eth.getCode()方法能夠判斷一個給定的地址的帳戶是外部帳戶,仍是合約帳戶。這個函數返回指定地址的代碼,因爲外部帳戶沒有代碼,所以僅僅會返回0x
,而合約帳戶將會返回0x
開頭的16進制代碼字符串。例如:spa
var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8") if(code === '0x') console.log('外部帳戶') else console.log('合約帳戶')
在合約內,能夠使用EVM彙編代碼來獲取指定地址處的代碼大小,顯然,普通帳戶地址將返回0
:.net
contract EzDemo { function isContract(address addr) returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } } |
推薦兩個以太坊相關的實戰教程:3d
更多的內容能夠訪問博客:code
http://blog.hubwiz.com/2018/02/12/how-to-check-ethereum-address/blog