日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] 介紹 在本系列文章中,我們已經(jīng)討論過作為分布式計(jì)算機(jī),以太坊是如何運(yùn)作的,以及使用者如何通過向系統(tǒng)發(fā)送交易與以太坊進(jìn)行交互(還談到交易手續(xù)費(fèi)的概念)。 在第一篇博文里,我們了解了

介紹

在本系列文章中,我們已經(jīng)討論過作為分布式計(jì)算機(jī),以太坊是如何運(yùn)作的,以及使用者如何通過向系統(tǒng)發(fā)送交易與以太坊進(jìn)行交互(還談到交易手續(xù)費(fèi)的概念)。

在第一篇博文里,我們了解了以太坊的狀態(tài)轉(zhuǎn)換函數(shù),還有以太坊如何通過連續(xù)的狀態(tài)轉(zhuǎn)換實(shí)現(xiàn)計(jì)算機(jī)的功能。

簡(jiǎn)單來說,狀態(tài)轉(zhuǎn)換函數(shù)使用當(dāng)前的狀態(tài)及交易作為輸入,計(jì)算出下一個(gè)狀態(tài)。

-以太坊狀態(tài)轉(zhuǎn)換函數(shù)-

在深入了解以太坊中的節(jié)點(diǎn)如何執(zhí)行交易之前,我們先聊聊一筆交易是如何被驗(yàn)證的。

交易驗(yàn)證

在執(zhí)行交易之前,節(jié)點(diǎn)會(huì)先驗(yàn)證該交易是否滿足一些基本(固有)規(guī)則。如果連這些基本規(guī)則都通過不了,節(jié)點(diǎn)就不會(huì)執(zhí)行該交易。

這些交易的固有規(guī)則如下:

滿足 RLP 編碼格式

具備合法簽名

具備合法 nonce (與交易發(fā)送方的當(dāng)前 nonce 值相同)

執(zhí)行交易的固有成本(intrinsic cost)小于該交易設(shè)置的 gas 上限交易

發(fā)送方的賬戶余額大于等于交易所需的預(yù)付款

還有一條規(guī)則,它不屬于交易固有規(guī)則——如果一系列已準(zhǔn)備好打包到區(qū)塊中的交易,加上這條交易之后,會(huì)使得所有交易的總 Gas Limit 超過區(qū)塊的 Gas 上限,那么該筆交易就不能和那些交易一起打包到一個(gè)區(qū)塊中。

讓我們展開每一條規(guī)則,來解釋這些規(guī)則如何運(yùn)作及為何存在。

交易必須符合合規(guī)的 RLP 編碼

這條規(guī)則可能最好直觀理解。RLP?(Recursive Length Prefix,又稱為遞歸長(zhǎng)度前綴編碼)是一種用于序列化以太坊中的對(duì)象的編碼方法;和其他方法相同,如果你不按照 RLP 對(duì)物件編碼,則無法對(duì)該物件進(jìn)行解碼,你也就無法通過數(shù)據(jù)編碼得到原始對(duì)象的信息。

該規(guī)則的目的是確保以太坊客戶端收到交易后,能夠成功解碼并執(zhí)行。

交易必須具備合法簽名

假設(shè)你的以太坊賬戶中有很多以太幣,現(xiàn)在有人試圖發(fā)起一筆交易,從你的帳戶把錢轉(zhuǎn)走以據(jù)為己有,你怎么看?你絕對(duì)不想看到有人冒充你,并偷走你的錢,這就是為什么我們需要交易簽名。

以太坊采用非對(duì)稱加密,確保只有實(shí)際控制者能夠從賬戶發(fā)起交易。與此同時(shí),這種密碼學(xué)工具還能讓其他人驗(yàn)證該交易的確是由賬戶的實(shí)際控制者發(fā)起。

我不會(huì)展開討論?ECDSA?(以太坊選擇的非對(duì)稱密碼算法)的細(xì)節(jié),因?yàn)槲覀冎恍枰雷罨A(chǔ)的概念就行。

在非對(duì)稱密碼學(xué)中,公鑰和私鑰是成對(duì)存在的。私鑰應(yīng)該完全保密,而公鑰可以分享給任何人;私鑰可以用來進(jìn)行簽名,這個(gè)簽名可以用對(duì)應(yīng)的公鑰加以驗(yàn)證。在以太坊上簽署一筆由你發(fā)起的交易,就相當(dāng)于為在一封你寫的信上簽名,不同之處在于密碼學(xué)簽名比手寫簽名還要難偽造得多!

在以太坊上,賬戶地址根據(jù)個(gè)人的公鑰來生成。當(dāng)發(fā)送一筆交易時(shí),私鑰被用來簽署交易(還記得 v 、r 、s 這幾個(gè)包含在交易里的值嗎?),接著所有節(jié)點(diǎn)就能確定這筆交易是不是真的由關(guān)聯(lián)賬戶的私鑰所有者簽署的。

不具備合法簽名的交易沒有任何執(zhí)行的意義,因此必須有合法簽名就成了交易的固有規(guī)則之一。

交易 nonce 和賬戶 nonce 必須匹配

在以太坊中,賬戶 nonce 值代表該賬戶發(fā)送的交易數(shù)量(如果是合約賬戶,則 nonce 值指的是賬戶所創(chuàng)建的合約數(shù)量)。如果沒有 nonce ,同一筆交易可能被錯(cuò)誤地執(zhí)行多次(也就是所謂的 “重放攻擊”)。考慮到以太坊的分布式特性,不同的節(jié)點(diǎn)可能會(huì)試圖把同一筆交易打包進(jìn)不同的區(qū)塊,將重復(fù)的交易上鏈。假設(shè)一筆你把錢轉(zhuǎn)給某人的交易被誤打包了兩次,導(dǎo)致你重復(fù)轉(zhuǎn)了兩次錢,你心里一定很不是滋味。

每當(dāng)用戶創(chuàng)建一筆新的交易,他們必須設(shè)置能匹配當(dāng)前賬戶 nonce 值的交易 nonce 值,當(dāng)執(zhí)行交易時(shí),節(jié)點(diǎn)會(huì)檢查交易 nonce 是否匹配賬戶 nonce 。

如果因?yàn)槟承┰?,?dǎo)致同一筆交易被重復(fù)提交給節(jié)點(diǎn),此時(shí),因?yàn)橘~戶 nonce 值已經(jīng)增加,所以重復(fù)提交的交易會(huì)被視為不合法。

以太坊強(qiáng)制要求交易 nonce 值與賬戶 nonce 值匹配,這么做除了能避免重放攻擊,還能確保一筆交易只會(huì)執(zhí)行及改變狀態(tài)一次。

交易的固有成本必須小于該交易設(shè)置的 gas 上限

在前一篇博文中,我們說明了為什么使用以太坊需要付費(fèi),以及?gas 的概念。總的來說,每一筆交易都有與之關(guān)聯(lián)的 gas ——發(fā)送一筆交易的成本包含兩部分:固有成本和執(zhí)行成本。

執(zhí)行成本根據(jù)該交易需要使用多少以太坊虛擬機(jī)(EVM)的資源來運(yùn)算而定,執(zhí)行一筆交易所需的操作越多,則它的執(zhí)行成本就越高。

固有成本由交易的負(fù)載( payload )決定,交易負(fù)載分為以下三種負(fù)載:

如果該交易是為了創(chuàng)建智能合約,則負(fù)載就是創(chuàng)建智能合約的 EVM 代碼

如果該交易是為了調(diào)用智能合約的函數(shù),則負(fù)載就是執(zhí)行消息的輸入數(shù)據(jù)

如果該交易只是單純?cè)趦蓚€(gè)賬戶間轉(zhuǎn)賬,則負(fù)載為空

假設(shè) Nzeros 代表交易負(fù)載中,字節(jié)為 0 的字節(jié)總數(shù);Nnonzeros 代表交易負(fù)載中,字節(jié)不為 0 的字節(jié)總數(shù)??梢酝ㄟ^下列公式計(jì)算出該交易的固有成本(黃皮書 6.2 章,方程式 54、55 和 56):

固有成本 =?Gtransaction + Gtxdatazero * Nzeros + Gtxdatanonzero * Nnonzeros + Gtxcreate

在黃皮書的附錄 G 中,可以看到一份創(chuàng)建和執(zhí)行交易的相關(guān)成本的費(fèi)用表。與固有成本相關(guān)的內(nèi)容如下:

Gtransaction = 21,000 Wei

Gtxcreate = 32,000 Wei

Gtxdatazero = 4 Wei

Gtxdatanonzero = 68 Wei (在伊斯坦布爾升級(jí)時(shí)會(huì)改為 16 wei)

當(dāng)我們了解固有成本是什么,就能理解為什么一旦交易的固有成本高于 Gas 限制,則該交易就會(huì)被視為非法。Gas Limit 規(guī)定了一筆交易在執(zhí)行時(shí),能夠消耗掉的 Gas 上限;如果還沒開始執(zhí)行該交易前,我們就知道它的固有成本高于 Gas 上限,那我們就沒有理由執(zhí)行這筆交易。

交易發(fā)送方的賬戶余額必須大于等于交易所需的預(yù)付款

交易預(yù)付款指的是在交易執(zhí)行前,從交易發(fā)送方賬戶,預(yù)先扣除的 Gas 數(shù)量。

我們可以通過下面的公式算出交易預(yù)付款:

預(yù)付款 = gasLimit * gasPrice + value

一筆交易的 Gas Limit,指的是交易發(fā)送方愿意花在執(zhí)行該交易上的 Gas 最大值;Gas Price 指的是每一單位 Gas 的單價(jià);交易 Value 指的是發(fā)給消息接收者的 Wei 的數(shù)量(例如轉(zhuǎn)賬金額),或是投入要?jiǎng)?chuàng)建的合約中的準(zhǔn)備金。如果要進(jìn)一步了解什么是 Gas ,以及為什么執(zhí)行交易要耗費(fèi) Gas,可以看我們前一篇博文。

因?yàn)榻灰最A(yù)付款在交易執(zhí)行前就會(huì)先扣除,所以一旦交易發(fā)送方的賬戶余額少于預(yù)扣額,這筆交易就沒有執(zhí)行的必要了。

交易的 Gas Limit 必須小于等于區(qū)塊的 Gas 上限

這條規(guī)則不屬于固有規(guī)則,不過這是節(jié)點(diǎn)在選擇要打包的交易時(shí),需要遵守的基本要求。區(qū)塊 Gas 上限是能夠 “裝在” 該區(qū)塊中的交易所用總 Gas 數(shù)的上限。

當(dāng)節(jié)點(diǎn)在選擇要打包的交易時(shí),節(jié)點(diǎn)必須確保加入這筆交易后,區(qū)塊里的交易所用總 Gas 數(shù)不會(huì)超過區(qū)塊 Gas 上限。對(duì)于要被打包的交易來說,其 Gas Limit 加上其他交易的 Gas Limit 總和,必須小于等于區(qū)塊 Gas 上限。當(dāng)然,如果有一筆交易不能被打包進(jìn)入當(dāng)前區(qū)塊,它還是有機(jī)會(huì)被后面的區(qū)塊打包的。

執(zhí)行交易

驗(yàn)證完交易之后,是時(shí)候執(zhí)行它了。在以太坊中,執(zhí)行交易會(huì)改變狀態(tài)——好幾筆交易被打包進(jìn)一個(gè)區(qū)塊,每個(gè)區(qū)塊就相當(dāng)一個(gè)交易列表;當(dāng)交易被順序執(zhí)行后,會(huì)輸出新的合法狀態(tài)。

交易按照以下步驟執(zhí)行:

將發(fā)送者賬戶 nonce 值加 1

從發(fā)送者賬戶扣除交易預(yù)付額( gasLimit * gasPrice )

確定該交易能夠用于執(zhí)行的 gas 值(gasLimit - intrinsic cost)

執(zhí)行該交易包含的操作(轉(zhuǎn)賬、調(diào)用或創(chuàng)建智能合約)

通過 SELFDESTRUCT 和 SSTORE 函數(shù)對(duì)發(fā)送者退款

退還交易發(fā)送者任何未使用的 gas

向受益人賬戶(通常屬于挖出包含該交易的區(qū)塊的礦工)轉(zhuǎn)入挖礦收益

增加發(fā)送者賬戶的 nonce 值

每當(dāng)發(fā)送一筆交易,發(fā)送者賬戶 nonce 就會(huì)增加。這個(gè)操作在交易執(zhí)行之初就會(huì)完成,如果交易執(zhí)行失敗,則賬戶 nonce 值回滾。

從發(fā)送者賬戶扣除交易預(yù)付額

我們會(huì)從發(fā)送者賬戶余額里扣除交易預(yù)付額,這個(gè)機(jī)制很簡(jiǎn)單——由發(fā)送者為自愿付出的執(zhí)行交易成本(gasLimit * gasPrice)付費(fèi)。

計(jì)算可用于執(zhí)行交易的 gas

交易的 gas 總額(gas limit)扣掉固有成本后,剩下的就是可用于執(zhí)行交易的 gas 。

執(zhí)行該交易所包含的操作

執(zhí)行交易還涉及 EVM 的操作列表,其中唯一完全不需要 EVM 操作的交易——就是普通轉(zhuǎn)賬。

每一項(xiàng) EVM 操作都有對(duì)應(yīng)的 gas 成本;在交易執(zhí)行過程中,每做了一項(xiàng) EVM 操作,就會(huì)從可用 gas 中扣掉對(duì)應(yīng)的 gas 成本。直到下列兩種情況中的一種出現(xiàn)才停止:

可用 gas 被耗盡,執(zhí)行失敗

執(zhí)行結(jié)束后可用 gas 還有剩,或是剛好為零

通過 SELFDESTRUCT 和 SSTORE 函數(shù)對(duì)發(fā)送者退款

在以太坊中,SELFDESTRUCT 操作碼用于銷毀不再需要的智能合約。每銷毀一個(gè)合約,執(zhí)行者能夠收取 24,000 Wei 。

同樣的,當(dāng)使用 SSTORE 操作碼寫入 0 (有效刪除值)的時(shí)候,操作者每寫入一個(gè) 0 ,就能收取 1500 Wei 。

關(guān)于退款,有件有趣的事情是,退款也有上限。該上限確保礦工可以算出執(zhí)行交易所需的計(jì)算時(shí)間的上界。(更多關(guān)于 gas 費(fèi)用和退款的詳細(xì)說明,可以在以太坊的設(shè)計(jì)合理性一文中找到)。

還有一個(gè)重點(diǎn)是,必須在交易所包含的操作都執(zhí)行結(jié)束后,才會(huì)進(jìn)行退款。因此任何應(yīng)該返還的 gas 都不會(huì)被交易執(zhí)行過程所消耗,從而避免了可能出現(xiàn)的永遠(yuǎn)不會(huì)耗盡 gas 的交易。

退還交易發(fā)送者任何未使用的 gas

如果用于交易的預(yù)付款超過交易所使用的 gas,則發(fā)送方有權(quán)在執(zhí)行交易后收回剩余的 gas。

向受益人賬戶支付礦工費(fèi)用

執(zhí)行交易所使用的所有 Gas 被視為交易手續(xù)費(fèi),由礦工獲得。這種機(jī)制激勵(lì)礦工持續(xù)出塊,并在網(wǎng)絡(luò)安全層面永續(xù)合作。

結(jié)語

在本文中,我們?cè)敿?xì)討論了交易的驗(yàn)證及執(zhí)行(黃皮書第 6 章內(nèi)容)。在第 7 、8 章會(huì)介紹更多類型的交易(合約創(chuàng)建及調(diào)用),我后會(huì)繼續(xù)更新關(guān)于這幾個(gè)章節(jié)的博文。

我相信,想要徹底了解交易驗(yàn)證及執(zhí)行的細(xì)節(jié),最好的方法就是閱讀隨便一個(gè)實(shí)現(xiàn)協(xié)議的以太坊客戶端源碼。作為?Besu?的貢獻(xiàn)者,我很熟悉它的實(shí)現(xiàn),所以我建議即使你不是非常精通 Java ,你還是可以看看它的源碼。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉