如何判斷一個以太坊地址是合約還是普通賬戶?
阿新 • • 發佈:2018-04-24
以太坊 地址 合約 普通賬戶 區別
如果你希望馬上開始學習以太坊DApp開發,可以訪問匯智網提供的出色的在線互動教程:
- 以太坊DApp實戰入門教程
- 以太坊去中心化電商應用開發實戰
在以太坊中,不管是普通賬戶,還是合約賬戶,地址看起來都是類似的一串16進制碼流。那麽,應該如何區分一個給定的以太坊地址是普通賬戶還是合約賬戶?
使用web3.js
web3.eth.getCode()方法返回指定地址上代碼的16進制字符串,由於普通賬戶地址處沒有代碼,因此將僅返回16進制前綴0x
。利用這個我們可以進行判斷,例如:
var code = web3.eth.getCode("0xbfb2e296d9cf3e593e79981235aed29ab9984c0f") if(code === ‘0x‘) console.log(‘普通賬戶‘) else console.log(‘合約賬戶‘)
在solidity中實現
在合約內,可以使用EVM匯編代碼來獲取指定地址處的代碼大小,顯然,普通賬戶地址將返回0
:
contract EzDemo {
function isContract(address addr) returns (bool) {
uint size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}
如何判斷一個以太坊地址是合約還是普通賬戶?