以太坊中的賬戶(hù)、交易、Gas和區(qū)塊Gas Limit等基本概念

什么是賬戶(hù)

以太坊賬戶(hù)與我們所知的賬戶(hù)概念有一定相似之處,卻又有很大的區(qū)別,更不同于比特幣中UTXO。

賬戶(hù)分兩類(lèi):

- 外部擁有賬戶(hù)(EOA),也就是普通賬戶(hù)

- 合約賬戶(hù)

普通賬戶(hù)

所謂的普通賬戶(hù)就是我們存放以太幣的賬戶(hù),可以隨意生成,它具有以下特性:

?- 擁有以太幣余額(以太幣存放的地方,與比特幣的UTXO模式不同)的balance。

?- 用于確定每筆交易只能被處理一次的計(jì)數(shù)器(nonce)。

?- 發(fā)送交易(以太幣轉(zhuǎn)賬、發(fā)布合約、調(diào)用智能合約)

- 通過(guò)私鑰控制

- 沒(méi)有相關(guān)聯(lián)的代碼

合約賬戶(hù)

合約賬戶(hù)也是最激動(dòng)人心的概念和底層代碼實(shí)現(xiàn),它是功能和數(shù)據(jù)的集合,存在于以太坊的特定地址(發(fā)布智能合約的地址上),擁有以下特性:

- 擁有以太幣余額

- 有相關(guān)聯(lián)的代碼

- 通過(guò)交易或消息調(diào)用的方式觸發(fā)并由以太坊虛擬機(jī)(EVM)解釋執(zhí)行

- 當(dāng)被執(zhí)行時(shí):

- 運(yùn)行在隨機(jī)復(fù)雜度(圖靈完備性)

- 只能操作其擁有的特定儲(chǔ)存,例如可以擁有其永久state

- 可以call其他合約

所有以太坊區(qū)塊鏈上的操作都是由各賬戶(hù)發(fā)起的交易來(lái)出發(fā)。智能合約賬戶(hù)收到一筆交易,交易所帶的參數(shù)都會(huì)成為代碼的入?yún)ⅰ:霞s代碼會(huì)被以太坊虛擬機(jī)(EVM)在每一個(gè)參與網(wǎng)絡(luò)的節(jié)點(diǎn)上運(yùn)行,以作為它們新區(qū)塊的驗(yàn)證。

交易和消息

交易

“交易”術(shù)語(yǔ)通俗來(lái)講就是一個(gè)賬戶(hù)向另外一個(gè)賬戶(hù)發(fā)送一筆被簽名的消息數(shù)據(jù)包的過(guò)程,區(qū)塊鏈會(huì)記錄并存儲(chǔ)相應(yīng)的數(shù)據(jù)。延伸一下,調(diào)用智能合約改變一個(gè)合約賬戶(hù)的數(shù)據(jù)狀態(tài),也是一筆交易,同樣需要花費(fèi)手續(xù)費(fèi)。

交易包括:?

- 消息的發(fā)送者

- 消息的接收者

- 簽名信息,用來(lái)證明發(fā)送者有意向通過(guò)區(qū)塊鏈向接收者發(fā)送消息

- 價(jià)值域,從發(fā)送方轉(zhuǎn)移到接受方的以太幣的數(shù)量

- 可選的數(shù)據(jù)域,用來(lái)儲(chǔ)存智能合約或調(diào)用智能合約的代碼

- gasLimit,該交易的執(zhí)行時(shí)使用gas的上限

- gasPrice,交易發(fā)送者愿意支付的gas費(fèi)用的價(jià)格。一個(gè)單位的gas表示了執(zhí)行一個(gè)基本指令,例如一個(gè)計(jì)算步驟。

消息

合約具有發(fā)送”消息”到其他合約的能力。

消息是一個(gè)永不串行且只在以太坊執(zhí)行環(huán)境中存在的虛擬對(duì)象。它們可以被理解為函數(shù)調(diào)用(function calls)。曾有人咨詢(xún),智能合約是否可以調(diào)用比特幣轉(zhuǎn)賬,這里的解釋已經(jīng)給出了明確的答復(fù)。

消息包括:

?- 消息發(fā)送者

- 消息的接收者

- 可選的數(shù)據(jù)域,合約實(shí)際上的輸入數(shù)據(jù) - gasLimit,同交易。

總體來(lái)說(shuō),一個(gè)消息就是一筆交易,除了它不是由外部賬戶(hù)生成,而是合約賬戶(hù)生成。當(dāng)合約正在執(zhí)行的代碼中運(yùn)行了call 或者delegatecall這兩個(gè)命令時(shí),就會(huì)生成一個(gè)消息。消息有的時(shí)候也被稱(chēng)為”內(nèi)部交易”。與一個(gè)交易類(lèi)似,一個(gè)消息會(huì)引導(dǎo)接收的賬戶(hù)運(yùn)行它的代碼。因此,合約賬戶(hù)可以與其他合約賬戶(hù)發(fā)生關(guān)系。

什么是gas

以太坊的運(yùn)行環(huán)境,也被稱(chēng)為以太坊虛擬機(jī)(EVM)。每個(gè)參與到網(wǎng)絡(luò)的節(jié)點(diǎn)都會(huì)運(yùn)行EVM作為區(qū)塊驗(yàn)證協(xié)議的一部分。每個(gè)網(wǎng)絡(luò)中的全節(jié)點(diǎn)都會(huì)進(jìn)行相同的計(jì)算并儲(chǔ)存相同的值。合約執(zhí)行會(huì)在所有節(jié)點(diǎn)中被多次重復(fù),而且任何人都可以發(fā)布執(zhí)行合約,這使得合約執(zhí)行的消耗非常昂貴,所以為防止以太坊網(wǎng)絡(luò)發(fā)生蓄意攻擊或?yàn)E用的現(xiàn)象,以太坊協(xié)議規(guī)定交易或合約調(diào)用的每個(gè)運(yùn)算步驟都需要收費(fèi)。。這筆費(fèi)用以gas作為單位計(jì)數(shù),也就是俗稱(chēng)的燃料。

gas和交易消耗的gas

每筆交易都包含gas limit和gas price。礦工可以有選擇的打包這些交易并收取這些費(fèi)用。gasprice 會(huì)影響到該筆交易被打包所需等待的時(shí)間。如果該交易的操作所使用的gas數(shù)量小于或等于所設(shè)置的gas limit,交易會(huì)被處理。但如果gas總消耗超過(guò)gas limit,所有的操作都會(huì)被重置,但手續(xù)費(fèi)依舊會(huì)被收取。區(qū)塊鏈會(huì)顯示這筆交易完成嘗試,但因?yàn)闆](méi)有提供足夠的gas導(dǎo)致所有的合約命令都被復(fù)原。交易完成之后沒(méi)有被使用的gas會(huì)以以太幣的形式返還給發(fā)起者。gas消耗只是一個(gè)預(yù)估值,所以許多用戶(hù)會(huì)超額支付gas來(lái)保證他們的交易會(huì)被接受。

估算交易消耗

交易費(fèi)由兩部分組成:

gasUsed:該交易消耗的總gas數(shù)量

gasPrice:該交易中單位gas的價(jià)格(用以太幣計(jì)算)

交易費(fèi) = gasUsed * gasPrice

gasUsed

每個(gè)EVM中的命令都被設(shè)置了相應(yīng)的gas消耗值。gasUsed是所有被執(zhí)行的命令的gas消耗值總和。如果希望估算gasUsed,可以web3.eth.estimateGas。

gasPrice

用戶(hù)可以自行設(shè)置的gasPrice的價(jià)格。由于網(wǎng)絡(luò)擁堵等多種情況,此價(jià)格會(huì)動(dòng)態(tài)變化,可根據(jù)交易字節(jié)數(shù)和當(dāng)前區(qū)塊中打包的平均值進(jìn)行大概的預(yù)估。

交易案例

可以將gasLimit理解為你汽車(chē)油箱的上限。同時(shí)將gasPrice理解為油價(jià)。

對(duì)于一輛車(chē)來(lái)說(shuō),油價(jià)可能是2.5(價(jià)格)每升(單位)。在以太坊中,就是20GWei(價(jià)格)每gas(單位)。為了填滿(mǎn)你的"油箱",需要10升 2.5(價(jià)格)每升(單位)。在以太坊中,就是20GWei(價(jià)格)每gas(單位)。為了填滿(mǎn)你的"油箱",需要10升2.5(價(jià)格)每升(單位)。在以太坊中,就是20 GWei(價(jià)格)每gas(單位)。為了填滿(mǎn)你的"油箱",需要 10升2.5的油 = $25。同樣的,21000個(gè)20 GWei的gas = 0.00042 ETH。

以太幣單位換算

gas limit

區(qū)塊gas limit是單個(gè)區(qū)塊允許的最多gas總量,以此可以用來(lái)決定單個(gè)區(qū)塊中能打包多少筆交易。

例如,我們有5筆交易的gas limit分別是10、20、30、40和50.如果區(qū)塊gas limit是100,那么前4筆交易就能被成功打包進(jìn)入這個(gè)區(qū)塊。礦工有權(quán)決定將哪些交易打包入?yún)^(qū)塊。所以,另一個(gè)礦工可以選擇打包最后兩筆交易進(jìn)入這個(gè)區(qū)塊(50+40),然后再將第一筆交易打包(10)。如果你嘗試將一個(gè)會(huì)使用超過(guò)當(dāng)前區(qū)塊gas limit的交易打包,這個(gè)交易會(huì)被網(wǎng)絡(luò)拒絕,你的以太坊客戶(hù)端會(huì)反饋錯(cuò)誤”交易超過(guò)區(qū)塊gas limit”。

目前使用的gas limit為21000。

區(qū)塊的gas limit是由在網(wǎng)絡(luò)上的礦工決定的。與可調(diào)整的區(qū)塊gas limit協(xié)議不同的是一個(gè)默認(rèn)的挖礦策略,即大多數(shù)客戶(hù)端默認(rèn)最小區(qū)塊gas limit為4,712,388。

以太坊網(wǎng)絡(luò)上的”DoS”攻擊

最近有些評(píng)論表示以太坊網(wǎng)絡(luò)正在慢慢減速,變得擁堵甚至無(wú)法使用。這些評(píng)論把這個(gè)減速的過(guò)程稱(chēng)為對(duì)以太坊網(wǎng)絡(luò)的”DoS”攻擊。當(dāng)以太坊網(wǎng)絡(luò)上持續(xù)地出現(xiàn)全滿(mǎn)區(qū)塊并且有大量交易在網(wǎng)絡(luò)上待處理時(shí)就會(huì)出現(xiàn)所謂的DoS情況。同時(shí),礦工有權(quán)利根據(jù)交易費(fèi)選擇打包哪些交易。如果當(dāng)時(shí)隊(duì)列中(交易池中)有上千筆交易正在等待打包,那么就有可能造成幾個(gè)小時(shí)的非正常交易延遲。DDoS可能是惡意的也有可能是非惡意的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容