您好,登錄后才能下訂單哦!
本篇內(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.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('合約賬戶')
在合約內(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í)用文章!
免責(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)容。