溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

以太坊賬戶類型怎么判斷

發(fā)布時(shí)間:2022-01-15 14:49:06 來(lái)源:億速云 閱讀:144 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“以太坊賬戶類型怎么判斷”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

以太坊中有兩類賬戶,它們共用同一個(gè)地址空間。

  • 外部賬戶,該類賬戶被公鑰-私鑰對(duì)控制(人類)。

  • 合約賬戶,該類賬戶被存儲(chǔ)在賬戶中的代碼控制。

外部賬戶的地址是由公鑰決定的,合約賬戶的地址是在創(chuàng)建該合約時(shí)確定的。

合約賬戶存儲(chǔ)了代碼,外部賬戶則沒有,除了這點(diǎn)以外,這兩類賬戶對(duì)于EVM來(lái)說是一樣的。 每個(gè)賬戶有一個(gè)key-value形式的持久化存儲(chǔ)。其中key和value的長(zhǎng)度都是256比特,名字叫做storage.

另外,每個(gè)賬戶都有一個(gè)以太幣余額(單位是“Wei"),該賬戶余額可以通過向它發(fā)送帶有以太幣的交易來(lái)改變。

web3實(shí)現(xiàn)

使用web3.eth.getCode()方法可以判斷一個(gè)給定的地址的賬戶是外部賬戶,還是合約賬戶。這個(gè)函數(shù)返回指定地址的代碼,由于外部賬戶沒有代碼,因此僅僅會(huì)返回0x,而合約賬戶將會(huì)返回0x開頭的16進(jìn)制代碼字符串。例如:

var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8")
if(code === '0x') console.log('外部賬戶')
else console.log('合約賬戶')

在solidity中實(shí)現(xiàn)

在合約內(nèi),可以使用EVM匯編代碼來(lái)獲取指定地址處的代碼大小,顯然,普通賬戶地址將返回0

contract EzDemo {
    function isContract(address addr) returns (bool) {
    uint size;
    assembly { size := extcodesize(addr) }
    return size > 0;
  }
}

“以太坊賬戶類型怎么判斷”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI