以太坊的賬戶模式
BTC系統(tǒng)是基于交易的賬本,這種模式下,系統(tǒng)中沒(méi)有顯式的記錄某個(gè)人有多少BTC,只能通過(guò)UTXO進(jìn)行推算。這種模式的好處是你有多少錢(qián),你自己都不一定清楚,但實(shí)際中,使用起來(lái)較為別扭,跟日常體驗(yàn)不太一樣呢:A轉(zhuǎn)給B錢(qián)的時(shí)候,需要說(shuō)明幣的來(lái)源。實(shí)際中只需要存錢(qián)說(shuō)明來(lái)源,花錢(qián)則不用。此外,賬戶中的錢(qián)在花的時(shí)候,必須一次性全部花出去,多的錢(qián)要自己轉(zhuǎn)到一個(gè)存錢(qián)的找零地址。
以太坊系統(tǒng)則采用了基于賬戶的模型,與現(xiàn)實(shí)中銀行賬戶相似。系統(tǒng)中顯式的記錄每個(gè)賬戶以太幣的數(shù)量,轉(zhuǎn)賬是否合法只需要查看轉(zhuǎn)賬者賬戶中以太幣是否足夠即可,同時(shí)也不需要每次全部轉(zhuǎn)賬。同時(shí),這也也天然地防范了雙花攻擊。
重放攻擊?
A向B轉(zhuǎn)賬,過(guò)一段時(shí)間,B將A的交易重新廣播一次,從而導(dǎo)致A賬戶被扣錢(qián)兩次。假設(shè)A給B轉(zhuǎn)錢(qián),雙花攻擊(double spending attack)是A不誠(chéng)實(shí),重放攻擊(replay attack)是B不誠(chéng)實(shí)。
為了防范重放攻擊,給賬戶交易添加計(jì)數(shù)器記錄該賬戶有史以來(lái)發(fā)布過(guò)多少次交易,轉(zhuǎn)賬時(shí)候?qū)⑥D(zhuǎn)賬次數(shù)計(jì)入交易的內(nèi)容中。?
如果此時(shí)如果B重放了這個(gè)交易,那么當(dāng)前A的nonce至少是大于等于21,那么顯然與下一筆合法交易要比當(dāng)前nonce+1不再滿足了??!
系統(tǒng)中全節(jié)點(diǎn)維護(hù)賬戶余額和該計(jì)數(shù)器的交易數(shù),從而防止本地篡改余額或進(jìn)行重放攻擊。
外部賬戶和合約賬戶
以太坊系統(tǒng)中存在兩類(lèi)賬戶:外部賬戶和合約賬戶。
外部賬戶:類(lèi)似于BTC系統(tǒng)中公私鑰對(duì)。存在賬戶余額balance和計(jì)數(shù)器nonce。
合約賬戶:不是通過(guò)公私鑰對(duì)控制。(不能主動(dòng)發(fā)起交易,以太坊規(guī)定所有的交易只能有外部賬戶才能發(fā)起,一個(gè)合約賬戶在接收到外部賬戶調(diào)用后才能發(fā)起交易或調(diào)用其他合約賬戶)其除了balance和nonce之外還有code(代碼)、storage(相關(guān)狀態(tài)-存儲(chǔ))。
如何調(diào)用一個(gè)合約賬戶?
創(chuàng)建合約賬戶的時(shí)候會(huì)返回一個(gè)地址,知道這個(gè)合約的地址就可以對(duì)其調(diào)用。調(diào)用過(guò)程中,代碼不變但狀態(tài)會(huì)發(fā)生改變。
為什么要做以太坊,更換為基于賬戶的模型而不是沿襲BTC系統(tǒng)?
比特幣中支持每次更換賬戶,但以太坊是為了支持智能合約,而合約簽訂雙方是需要明確且較少變化的。尤其是對(duì)于合約賬戶來(lái)說(shuō),需要保持賬戶的穩(wěn)定狀態(tài)。
參考資料
1.北京大學(xué)肖臻老師《區(qū)塊鏈技術(shù)與應(yīng)用》公開(kāi)課文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-459324.html
2.參考筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459324.html
到了這里,關(guān)于以太坊的賬戶的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!