說明瓶盛,這里只是做一個(gè)記錄最欠,便于后續(xù)查詢示罗,沒有進(jìn)行深入的分析。需要說明的是芝硬,以太坊黃皮書中文字和公式的比例是1:1大概蚜点,如果你一直追著不放,估計(jì)一天都看不了多少拌阴,所以第一遍看绍绘,看個(gè)大概懂就可以了。有些不必深究迟赃。如果為了研究和深入開發(fā)陪拘,第二遍深究。第一遍看的目的是纤壁,對(duì)整體黃皮書的輪廓以及對(duì)整個(gè)以太坊的技術(shù)實(shí)現(xiàn)細(xì)節(jié)在概念上有一個(gè)直觀的映像左刽。
另外,由于黃皮書公式太多酌媒,不便于記錄欠痴。我會(huì)用自己的理解用白話說一下。
區(qū)塊狀態(tài)和交易
1.單位
最小單位wei秒咨,所有的貨幣值都按照wei的整數(shù)倍來記錄喇辽。一個(gè)以太幣等于10的18次方wei
2.交易
一個(gè)交易可能是一個(gè)消息或者是合約賬戶。他們的共同組成點(diǎn)
A拭荤。nonce茵臭,由交易發(fā)送者發(fā)送的交易數(shù)量
B。gasPrice舅世,為了執(zhí)行這個(gè)交易所需要的計(jì)算步驟總共所需花費(fèi)的gas價(jià)格旦委,用wei表示
C。gasLimit雏亚,為了執(zhí)行這個(gè)交易的最大gas限制
D缨硝。to,160位交易接受者地址
E罢低。value查辩,轉(zhuǎn)移或者接收的wei數(shù)量
F。v网持、r宜岛、s和交易有關(guān)的簽名
G。init功舀,evm代碼片段萍倡,這塊有疑問。辟汰,如下
如何理解
H列敲。data阱佛,不限制大小的字節(jié)數(shù)組用來表示,交易的數(shù)據(jù)戴而。
3.以太坊區(qū)塊頭結(jié)構(gòu)
A凑术。parentHash,父區(qū)塊頭的keccak256位hash
B所意。ommersHash淮逊,當(dāng)前區(qū)塊的ommers列表的keccak256的hash
C。beneficiary扁眯,挖到區(qū)塊獎(jiǎng)勵(lì)的接收地址壮莹。
D。stateRoot姻檀,所有交易執(zhí)行完成之后命满,定稿后的狀態(tài)樹的hash值
E。transactionsState绣版,區(qū)塊中所有交易組成的 樹結(jié)構(gòu)的根節(jié)點(diǎn)的默克爾hash
F胶台。receiptsRoot,當(dāng)前區(qū)塊中所有接收交易組成的樹結(jié)構(gòu)根節(jié)點(diǎn)的默克爾hash
G杂抽。logsBloom诈唬,當(dāng)前區(qū)塊中所有的交易的的可索引組成的bloom過濾器
H。difficultly缩麸,當(dāng)前去區(qū)塊的難度铸磅,它可以由前一個(gè)區(qū)塊的難度和時(shí)間戳通過計(jì)算獲得。
I杭朱。number阅仔,當(dāng)前區(qū)塊的祖先數(shù)量
j。gasLimit弧械,當(dāng)前區(qū)塊每個(gè)交易的gas上限
k八酒。gasused,當(dāng)前區(qū)塊的gas之和
L刃唐。timestamp羞迷,當(dāng)前區(qū)塊初始化的時(shí)間戳
M。extraData画饥,額外數(shù)據(jù)衔瓮,32個(gè)字節(jié)最多《陡剩可以存儲(chǔ)任何和當(dāng)前區(qū)塊有關(guān)的信息
N热鞍。mixHash,用來和nonce配合控制難度,說明區(qū)塊的產(chǎn)生經(jīng)過的足夠的計(jì)算量
O碍现。nonce,用來和mixHash配合控制難度米奸,說明區(qū)塊的產(chǎn)生經(jīng)過的足夠的計(jì)算量
4.交易有效性
為了讓交易信息對(duì)搜索昼接、零知識(shí)證明、索引都是高效且有用的悴晰。會(huì)將交易數(shù)據(jù)的關(guān)鍵信息提取并編碼為收據(jù)慢睡,并把收據(jù)構(gòu)建為一個(gè)以索引為鍵的樹種,樹的根節(jié)點(diǎn)放入?yún)^(qū)塊頭中铡溪。每筆交易的編碼收據(jù)提取的關(guān)鍵信息是:
A漂辐。當(dāng)前區(qū)塊交易發(fā)生之后累積的gas數(shù)量
B坚俗。交易過程中創(chuàng)建的日志集合氯质,
c。交易過程中的日志集合創(chuàng)建的bloom過濾器年叮,
d哈扮。交易的狀態(tài)碼
5.整體有效性
當(dāng)且僅當(dāng)一個(gè)區(qū)塊同時(shí)滿足以下幾個(gè)條件纬纪,才認(rèn)為它是有效的。
它必須由內(nèi)部一直的ommer和交易區(qū)塊的hash值所組成滑肉,且按照起始狀態(tài)(由前一個(gè)區(qū)塊繼承而來的)按順序執(zhí)行所有的給定交易后所達(dá)到的一個(gè)新的狀態(tài)包各。
6.區(qū)塊的序列化
首先需要定義一個(gè)嚴(yán)謹(jǐn)?shù)臄?shù)據(jù)結(jié)構(gòu),使得區(qū)塊頭和區(qū)塊內(nèi)容做好被序列化的準(zhǔn)備靶庙。
之后通過RLP函數(shù)把這個(gè)結(jié)構(gòu)轉(zhuǎn)換為一個(gè)可以在網(wǎng)絡(luò)傳輸或者本地存儲(chǔ)的字節(jié)序列问畅。
7.區(qū)塊頭驗(yàn)證
這塊公式太多,截圖只是其中一小部分公式六荒。
最后區(qū)塊頭驗(yàn)證函數(shù)是