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