1. 程式人生 > >如何判斷一個以太坊地址是合約還是普通賬戶?

如何判斷一個以太坊地址是合約還是普通賬戶?

以太坊 地址 合約 普通賬戶 區別

如果你希望馬上開始學習以太坊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;
  }
}

如何判斷一個以太坊地址是合約還是普通賬戶?