指令執(zhí)行需要消耗的gas計(jì)算方式,不同類型的指令價(jià)格不同。
根據(jù)價(jià)格不同,將指令劃分了不同的登記,如下圖:
公式1表示根據(jù)內(nèi)存來(lái)計(jì)算價(jià)格,公式2是固定的價(jià)格,a表示當(dāng)前狀態(tài)激活的內(nèi)存使用量,以字為計(jì)量單位,公式3說(shuō)明需要消耗的gas價(jià)格與內(nèi)存使用量的平方有關(guān)。
公式4,5,6,7會(huì)在具體的虛擬機(jī)及指令中使用到,是指令對(duì)應(yīng)操作公式的一部分,下圖是指令對(duì)應(yīng)的意義和操作方式。
虛擬機(jī)的圖靈完備的編程語(yǔ)言solidity在編寫完成后會(huì)編程如表中第一列這樣的操作代碼,他們對(duì)應(yīng)的助記符一般是應(yīng)用在公式的表達(dá)中,如上表第二列,第三列表示該操作需要出棧的數(shù)據(jù)個(gè)數(shù)和入棧的數(shù)據(jù)個(gè)數(shù),最后一列表示對(duì)應(yīng)該操作嗎的公式,我們以第二行加法為例。
該加法操作的將當(dāng)前棧上的2個(gè)數(shù)據(jù)進(jìn)行加法運(yùn)算,然后將結(jié)果作為棧頂元素壓入。虛擬機(jī)的匯編指令的操作基本上全部是以這樣出棧壓棧的方式執(zhí)行的。下圖是部分虛擬機(jī)指令的定義和對(duì)棧數(shù)據(jù)的運(yùn)算規(guī)則,有興趣的同學(xué)可以研究一下黃皮書的具體內(nèi)容,在附錄里面有詳細(xì)的解釋。