公式31表示對(duì)于第n個(gè)全局狀態(tài),其處理過程是在前一個(gè)狀態(tài)的基礎(chǔ)上,對(duì)最新區(qū)塊的交易進(jìn)行狀態(tài)遷移,得到新的全局狀態(tài),公式32表示累計(jì)的gas使用的計(jì)算公式,公式37表示交易日志的產(chǎn)生公式,公式38表示交易狀態(tài)碼產(chǎn)生的公式,我認(rèn)為這個(gè)公式的表達(dá)是有問題的,交易的狀態(tài)碼是無(wú)需與歷史交易狀態(tài)碼關(guān)聯(lián)的,因?yàn)槭〉慕灰撞粦?yīng)該進(jìn)入?yún)^(qū)塊并且用于計(jì)算。公式39表示最終的狀態(tài)是對(duì)當(dāng)前的交易順利完成狀態(tài)遷移之后,通過與當(dāng)前區(qū)塊的鏈接和運(yùn)算得到最終有效的區(qū)塊鏈全局狀態(tài)。
公式41是通過pow函數(shù)計(jì)算得到兩個(gè)值,一個(gè)是mixHash,另一個(gè)是滿足不等式的n,這個(gè)n是用來(lái)檢驗(yàn)當(dāng)前區(qū)塊生成者有效性的標(biāo)志。
變量表:
公式42表示計(jì)算當(dāng)前世紀(jì)的方式,根據(jù)上表中,一個(gè)世紀(jì)是30000個(gè)區(qū)塊鏈,因此根據(jù)當(dāng)前區(qū)塊的高度就可以計(jì)算出當(dāng)前的世紀(jì)。
公式43根據(jù)當(dāng)前的世紀(jì)數(shù),初始狀態(tài)的數(shù)據(jù)的大小,計(jì)算當(dāng)前區(qū)塊數(shù)據(jù)的大小,公式44根據(jù)當(dāng)前世紀(jì)數(shù),計(jì)算當(dāng)前緩存數(shù)據(jù)的大小。
公式44表示,如果能夠整除,則計(jì)算結(jié)束,否則多減去一個(gè)調(diào)節(jié)參數(shù),這樣做的目的是為了使得數(shù)據(jù)的大小和緩存的大小都成為素?cái)?shù)。
Cache的數(shù)據(jù)一般用于輕客戶端使用,data一般是礦機(jī)和全節(jié)點(diǎn)客戶端使用。
公式46,47表示一個(gè)種子hash的計(jì)算方式,如果是創(chuàng)世紀(jì),則,這個(gè)seed的函數(shù)值是0的KEC值,其中公式50表示32字節(jié)的0序列。公式49表示,隨著時(shí)間的推移,每個(gè)世紀(jì)的seed的hash值都會(huì)根據(jù)前一個(gè)seed的hash做KEC運(yùn)算。公式51到55是為了定義cache的初始數(shù)據(jù)公式56(C')的生成方式,首先計(jì)算每個(gè)64字節(jié)的序列的內(nèi)容如公式52和53,然后把他們作為cache初始數(shù)據(jù)的一項(xiàng),組成一個(gè)新的序列。
公式57是根據(jù)初始cache的數(shù)據(jù)內(nèi)容,做Jcacherounds輪的RandMemoHash,公式58定義了多輪hash的數(shù)學(xué)實(shí)現(xiàn)方式。公式62是對(duì)分公式的詳細(xì)定義,其中n就是公式55計(jì)算得來(lái)的個(gè)數(shù);公式63是對(duì)62中分函數(shù)的定義,需要注意的是這里用到了XOR運(yùn)算,即異或運(yùn)算。公式64是對(duì)63中用到的x的變形函數(shù)的定義,對(duì)于比當(dāng)前下表小的元素,再將原數(shù)據(jù)內(nèi)容應(yīng)用一次公式63.當(dāng)著西公式運(yùn)行完成,緩存Cache的數(shù)據(jù)就生成了。
公式65定義了全節(jié)點(diǎn)數(shù)據(jù)的生成方式,對(duì)于每一個(gè)元素使用公式67來(lái)生成,整個(gè)數(shù)據(jù)生成的公式都是標(biāo)準(zhǔn)的數(shù)學(xué)引用,沒有特別需要說明的地方,里面的調(diào)用時(shí)候,每一個(gè)參數(shù)的含義要么非常明確,要么就是對(duì)另一個(gè)函數(shù)的調(diào)用。公式66表示對(duì)y進(jìn)行異或運(yùn)算之后拼接在x的后面;公式68根據(jù)P值的不同,將公式分為2中情況,一種是遞歸調(diào)用如公式69,另一種是公式71對(duì)于p=0的情況使用KEC運(yùn)算,否則運(yùn)用公式66,并且其中第二個(gè)參數(shù)還進(jìn)行了遞歸調(diào)用。
公式74給出了pow的算法具體細(xì)節(jié),公式75,76,77給出了在POW中用到的公式實(shí)現(xiàn)方式,這些公式已經(jīng)是具體的數(shù)學(xué)公式,KEC,RLP這些公式在較早的章節(jié)中已經(jīng)給出詳細(xì)定義,公式77指的是講數(shù)據(jù)倒敘,公式76里面的加號(hào)表示將字節(jié)拼接起來(lái)。
公式78給出了變量的計(jì)算方式,公式79到84給出了詳細(xì)的技術(shù)細(xì)節(jié),這些數(shù)學(xué)函數(shù)的定義相對(duì)清晰,沒有需要特別解釋的地方。這里需要提醒的就是兩個(gè)地方,第一個(gè)是POW的第一個(gè)參數(shù)指的是沒有nonce和mixhash的情況下的區(qū)塊鏈頭信息的hash值,LH函數(shù)在之前的章節(jié)已經(jīng)給出定義,指的是區(qū)塊鏈頭各個(gè)元素的組合:
LH(H) ≡ ( Hp,Ho,Hc,Hr,Ht,He,Hb,Hd, Hi,Hl,Hg,Hs,Hx,Hm,Hn )
至此關(guān)于以太坊的技術(shù)解釋都已經(jīng)結(jié)束,接下來(lái)就需要以此技術(shù)為基礎(chǔ),結(jié)合IPFS制作一個(gè)簡(jiǎn)易可用的測(cè)試網(wǎng)絡(luò),并且會(huì)穿插的時(shí)間講解橢圓函數(shù)和Storj的相關(guān)知識(shí),謝謝大家關(guān)注。