Transactions
從賬戶的地址是否可以判斷該賬戶是合約賬戶還是外部擁有的合約?
我正在嘗試視覺化乙太坊的交易,目前,我知道有諸如Etherscan.io和Etherchain.org之類的區塊鏈瀏覽器,但是我不想繼續呼叫他們的 API 來獲取數據,而是使用我自己的完整節點來獲取我需要的所有數據,因為它給了我更大的控制權。
所以我建立了一個完整的節點並使用 Web3JS 庫來獲取塊和交易。但是,Web3JS 沒有通過給定地址獲取帳戶的選項(除非我弄錯了)。所以,一旦我有了交易對象,我就可以弄清楚發送者和接收者是誰,但我也想知道發送者或接收者是合約還是賬戶。我知道在 etherchain 的 API 上我們可以使用地址獲取帳戶,是否可以使用 geth 和 Web3Js 來做同樣的事情?
乙太坊的黃皮書提到每個賬戶都有一個nonce、balance、storageHash和codeHash,所以我認為可以使用區塊鏈中的地址來獲取一個賬戶。請幫助我們弄清楚如何在不使用上述區塊鏈瀏覽器的情況下確定給定地址是合約還是帳戶?
不,僅從地址無法確定它是合約賬戶還是外部擁有的賬戶。
請參閱上一篇關於如何生成合約地址的文章:
此外,預計最終所有賬戶都將是合約(這稱為賬戶抽象):
- https://github.com/ethereum/EIPs/issues/28
- https://blog.ethereum.org/2015/12/24/understanding-serenity-part-i-abstraction/
您可以使用 web3.js 函式
web3.eth.getCode
來獲取與地址關聯的 EVM 字節碼。假定對於外部擁有的帳戶,它將返回0x0
。