【译】Economics of Fees and Gas
今天我將特別討論氣體模型在特定條件下鼓勵(lì)什么樣的事情,以及這種事情的一些意想不到的后果。
存儲(chǔ)成本
因此,永久存儲(chǔ)是以太坊區(qū)塊鏈中最昂貴的資源。 將任何大量數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈中是完全不切實(shí)際的。 在當(dāng)前的網(wǎng)絡(luò)環(huán)境下,1Kb的數(shù)據(jù)大約是2.50美元,具體取決于您希望確認(rèn)的速度。 這意味著1Mb超過(guò)$ 2,000。 因此,將任何重要數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈中都是不切實(shí)際的。 但是,這是針對(duì)傳統(tǒng)存儲(chǔ)的。 Ethereum的框架有非傳統(tǒng)的替代方案。 我將介紹總共5種存儲(chǔ)方式,以及各種行為,成本和收益:
外部代碼
這基本上就是您在Ethereum中使用CREATE操作碼創(chuàng)建新合同帳戶的原因。 您可以將所需的任何數(shù)據(jù)存儲(chǔ)為新創(chuàng)建的合同的合同字節(jié)碼。 這可能是將數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈上最浪費(fèi)的方式,因?yàn)橐坏┐鎯?chǔ)數(shù)據(jù),就很少有動(dòng)機(jī)在數(shù)據(jù)不再需要時(shí)包含數(shù)據(jù)。
這是一種半易失性存儲(chǔ)方法。 一旦數(shù)據(jù)被存儲(chǔ),它就不能被更新,而不需要從新創(chuàng)建。 對(duì)于大型數(shù)據(jù)塊來(lái)說(shuō),最好不要在以后更新,或者只需要非常少地更新。 加載這些數(shù)據(jù)一次寫入就會(huì)非常便宜,將傳統(tǒng)存儲(chǔ)打了一個(gè)數(shù)量級(jí)。
內(nèi)部代碼
對(duì)于某些用例而言,這是一個(gè)明顯的選擇,并在Solidity生成的字節(jié)碼內(nèi)部使用。 基本上,如果有一些數(shù)據(jù)可以在構(gòu)造函數(shù)和緩存中生成,那么計(jì)算它通常便宜得多,然后直接將其存儲(chǔ)在部署的合約字節(jié)碼中,而不是將大量數(shù)據(jù)包含在創(chuàng)建事務(wù)本身中。 假設(shè)數(shù)據(jù)不需要更新,這是最好的使用方法,因?yàn)樗彩羌虞d數(shù)據(jù)的最便宜方式。
存儲(chǔ)
這是由Ethereum提供的傳統(tǒng)存儲(chǔ)模型。 它細(xì)化,允許每個(gè)單獨(dú)的32字節(jié)字在存儲(chǔ)中更新,與寫入新存儲(chǔ)相比,降低了更新成本。 也有一些激勵(lì)措施來(lái)保持這個(gè)區(qū)域干凈整潔,因?yàn)榍謇韨}(cāng)庫(kù)實(shí)際上可以為合同提供天然氣津貼。 這個(gè)區(qū)域很容易更新,易于閱讀,但在大多數(shù)情況下是訪問(wèn)和寫入最昂貴的方法。
交易
這是一種完全不穩(wěn)定的數(shù)據(jù)存儲(chǔ)方法,盡管它實(shí)際上不存儲(chǔ)合同可直接訪問(wèn)的持久數(shù)據(jù)。 不是將數(shù)據(jù)存儲(chǔ)在EVM本身內(nèi),而是通過(guò)發(fā)送合同數(shù)據(jù)將數(shù)據(jù)提供給合同。 合約然后散列數(shù)據(jù)以確保它是正確的并且匹配預(yù)期的合同狀態(tài)。 這種方法有一些缺點(diǎn),最大的缺點(diǎn)是交易數(shù)據(jù)非常昂貴。 它是迄今為止“訪問(wèn)”中最昂貴的,這要求將數(shù)據(jù)放在一個(gè)調(diào)用合同的交易中。 然而,它也是實(shí)際“寫入”和更新的最便宜的(除內(nèi)部代碼之外),因?yàn)樗鼘?shí)際上并不存儲(chǔ)在區(qū)塊鏈本身中。 此方法可以擴(kuò)展為使用類似結(jié)構(gòu)的散列樹(shù),以便提供給合同的數(shù)據(jù)非常細(xì)化,從而減少浪費(fèi)寶貴的交易空間。 但是,這種方法也有一個(gè)主要缺點(diǎn)。 數(shù)據(jù)競(jìng)賽必須考慮在內(nèi)。 如果另一個(gè)用戶向合同發(fā)送調(diào)用,導(dǎo)致數(shù)據(jù)更新,那么它會(huì)使任何未決事務(wù)中的數(shù)據(jù)無(wú)效。 這與數(shù)據(jù)訪問(wèn)的大量昂貴成本一起嚴(yán)重限制了此方法的潛在用例。
那么,這些方法如何綜合成本呢?
請(qǐng)注意,“實(shí)際”交易成本與其他方法一起顯示。 這基本上是用多少數(shù)量的數(shù)據(jù)實(shí)際調(diào)用合同的成本。
這些圖表為我們清楚了一些事情:
- 對(duì)于任何大于128字節(jié)的數(shù)據(jù),外部代碼都是可取的,這些數(shù)據(jù)永遠(yuǎn)不需要更新
- 內(nèi)部代碼應(yīng)該隨時(shí)使用純粹的常量數(shù)據(jù),并且在部署時(shí)已知
- 存儲(chǔ)應(yīng)該用于任何通常更新的數(shù)據(jù)
- 交易數(shù)據(jù)在某些情況下是可用的,盡管有些比賽,但如果不止一次使用合同,總體成本很快就會(huì)變得非常高。
存儲(chǔ)經(jīng)濟(jì)學(xué)
關(guān)于背后的博弈論和經(jīng)濟(jì)學(xué)的話題,整體區(qū)塊鏈?zhǔn)欠窀玫貙⒎且资詳?shù)據(jù)存儲(chǔ)在合同字節(jié)碼中而非存儲(chǔ)數(shù)據(jù)庫(kù)中? 我想這取決于幾個(gè)因素。 隨著更多賬戶被創(chuàng)建,訪問(wèn)賬戶數(shù)據(jù)變得更加昂貴嗎? 我沒(méi)有答案,但我可以保證使用這種方法進(jìn)行易失性存儲(chǔ)不僅更昂貴,而且有點(diǎn)浪費(fèi)。 我的圖表包括基本上部署新合同的成本,但是從燃?xì)獬杀局锌鄢N毀約19000天然氣的舊數(shù)據(jù)合同給出的退款。 這確實(shí)對(duì)圖表左側(cè)的圖形產(chǎn)生了可測(cè)量的影響,但在約320字節(jié)之后,除了成為一個(gè)好的區(qū)塊鏈公民之外,它變得毫無(wú)意義。
那么,合約存儲(chǔ)的缺點(diǎn)是如此昂貴? 主要缺點(diǎn)是它可能會(huì)鼓勵(lì)執(zhí)行可能更便宜的數(shù)據(jù)計(jì)算,這些計(jì)算實(shí)際上需要更多時(shí)間來(lái)執(zhí)行,以防止將存儲(chǔ)用作緩存層。
這些成本在某些情況下也會(huì)鼓勵(lì)在每筆交易中發(fā)送數(shù)據(jù)。 這可能是最有害的條件。 存儲(chǔ)合同數(shù)據(jù)的數(shù)據(jù)庫(kù)在某些方面實(shí)際上是協(xié)議級(jí)別的區(qū)塊鏈的免費(fèi)資源。 除了SPV(Qtum)或“快速”(以太坊)同步方法之外,此數(shù)據(jù)庫(kù)的大小與實(shí)際區(qū)塊鏈的大小以及處理需要多長(zhǎng)時(shí)間無(wú)關(guān)。 最后這個(gè)數(shù)據(jù)庫(kù)的大小被折疊成一個(gè)叫做stateRootHash的單個(gè)256位SHA3哈希。 可以說(shuō),區(qū)塊鏈最直接的資源成本不是這種存儲(chǔ),而是所有附加到交易的數(shù)據(jù)。 如果沒(méi)有某些安全隱患,此交易數(shù)據(jù)不能被丟棄或忽略。
對(duì)于存在于Qtum中的輕量級(jí)錢包和節(jié)點(diǎn),實(shí)際上對(duì)于整體用戶體驗(yàn)而言,將數(shù)據(jù)存儲(chǔ)在帳戶字節(jié)碼數(shù)據(jù)中而不是直接存儲(chǔ)在存儲(chǔ)器中會(huì)更加不利。 檢索和驗(yàn)證與單個(gè)帳戶關(guān)聯(lián)的所有存儲(chǔ)很容易。 但是,如果此合同為了數(shù)據(jù)目的而訪問(wèn)多個(gè)單獨(dú)帳戶,那么這是一個(gè)完全不確定的過(guò)程,會(huì)造成嚴(yán)重的延遲。 在不下載所有合同字節(jié)碼的情況下,不可能一次性檢索和驗(yàn)證這些數(shù)據(jù)。 所以,你必須開(kāi)始執(zhí)行合同,然后返回到網(wǎng)絡(luò),檢索另一個(gè)帳戶,驗(yàn)證它等等,然后最終繼續(xù)執(zhí)行。 對(duì)于這樣的1份數(shù)據(jù)合同,可能沒(méi)有太大的影響,但由于這些數(shù)據(jù)的便宜性,除了固定的32,000天然氣平臺(tái)創(chuàng)建費(fèi)外,沒(méi)有使用多個(gè)合同沒(méi)有明顯的好處。 事實(shí)上,在某個(gè)特定點(diǎn)之后,特別是對(duì)于半揮發(fā)性數(shù)據(jù),我們極力鼓勵(lì)將這些數(shù)據(jù)保持在細(xì)粒度。
因此,基本上存儲(chǔ)的高成本源于保持區(qū)塊鏈易于與輕量級(jí)錢包進(jìn)行交互的需要。 但是,合同開(kāi)發(fā)人員可以使用這條路線來(lái)規(guī)避這種成本,并且傷害輕量級(jí)錢包比直接將大量數(shù)據(jù)直接存儲(chǔ)在存儲(chǔ)中更受影響。
計(jì)算成本
現(xiàn)在讓我們來(lái)談?wù)勔蕴惶烊粴饽P偷牟惶黠@的開(kāi)支。 幾乎每個(gè)計(jì)算操作碼都有一些相關(guān)的成本。 這些成本遠(yuǎn)遠(yuǎn)低于存儲(chǔ)或直接資源,但是在EVM中執(zhí)行基本操作需要多少操作碼,這些成本會(huì)快速增加。 我最喜歡的例子之一是比較兩個(gè)字符串以確定它們是否相等的代價(jià)。 所以,我構(gòu)建了這個(gè)基本的測(cè)試合同:
contract GasTest{ using strings for *; function StringUtilsEqual(string tmp1, string tmp2) constant returns (bool){ return StringUtils.equal(tmp1, tmp2); } function SliceEquals(string tmp1, string tmp2) constant returns (bool){ return tmp1.toSlice().equals(tmp2.toSlice()); } function NaiveEquals(string tmp1, string tmp2) constant returns (bool){ if(bytes(tmp1).length != bytes(tmp2).length) return false; uint256 max=bytes(tmp1).length; for(uint256 i=0;i<max;i++){ if(bytes(tmp1)[i] != bytes(tmp2)[i]){ return false; } } return true; } function Sha3Equals(string tmp1, string tmp2) constant returns (bool){ return sha3(tmp1) == sha3(tmp2); } }這測(cè)量比較字符串的氣體成本4種方式:
在我進(jìn)入圖表之前,普通計(jì)算機(jī)上最慢的方法是SHA3方法。 SHA3??價(jià)格便宜,但即使使用非常優(yōu)化的庫(kù)和快速機(jī)器,它也會(huì)在0.028s或28ms內(nèi)散列大約100個(gè)字節(jié)。這意味著2個(gè)散列大約需要64ms。 同時(shí),比較(舊)64位處理器上的2個(gè)字符串大約需要0.00183s或0.0183ms。 如果我們基于天然氣成本計(jì)算和執(zhí)行操作需要多長(zhǎng)時(shí)間,則使用傳統(tǒng)方法比較2個(gè)字符串應(yīng)該會(huì)更便宜。 所以,下面是這些不同方法的氣體成本圖:
外賣
所以,在這一點(diǎn)上,我認(rèn)為預(yù)計(jì)我會(huì)談?wù)撘蕴坏奶烊粴馊粘瘫硎嵌嗝吹目膳隆?/span> 但是,不,問(wèn)題不在于使用的值,而在于整個(gè)模型。 我不會(huì)假裝知道這個(gè)問(wèn)題的一些完美答案。 這絕對(duì)是一個(gè)復(fù)雜的。
如果您曾經(jīng)研究過(guò)英特爾手冊(cè),這些手冊(cè)描述了臺(tái)式機(jī)x86處理器中各種操作碼的操作和時(shí)序,然后去測(cè)量這些操作碼的實(shí)際性能,那么記錄的時(shí)序和實(shí)際時(shí)序之間的比較就會(huì)變化。 。 很多。 這是因?yàn)楝F(xiàn)代處理器是非常復(fù)雜和優(yōu)化的硅片。 有多個(gè)流水線,緩存級(jí)別,分支預(yù)測(cè)器,寄存器緩存集等。基本上,所有這些都允許一組可能需要1ms的操作碼,在緊密的循環(huán)中操作,并在2ms內(nèi)執(zhí)行100次操作,而是超過(guò)100ms。 這種復(fù)雜的緩存,管道和分支預(yù)測(cè)結(jié)構(gòu)顯然不可能在孤立的虛擬機(jī)中表示。 氣體模型必須適用于各種處理器,包括不同體系結(jié)構(gòu)的處理器,以及不同的位數(shù)(即64位與32位)。 所以,氣體模型最好是適用于所有處理器的近似值。
然而,盡管沒(méi)有可能的完美解決方案,但我肯定有一些想法可以改善這種情況,這些都是我將在為Qtum中x86虛擬機(jī)的氣體模型設(shè)計(jì)(2018年即將開(kāi)始!
豐富和可預(yù)測(cè)的標(biāo)準(zhǔn)庫(kù)
提供豐富的標(biāo)準(zhǔn)庫(kù)和定價(jià)氣體可能是在沒(méi)有大量風(fēng)險(xiǎn)的情況下立即改善情況的最佳途徑之一。 這個(gè)標(biāo)準(zhǔn)庫(kù)不需要在沒(méi)有虛擬機(jī)的情況下實(shí)際執(zhí)行,但如果虛擬機(jī)足夠有效,就沒(méi)有任何傷害。 重要的是執(zhí)行該功能所需的氣體速率應(yīng)該由合理的人來(lái)設(shè)定。 這允許測(cè)量分支預(yù)測(cè)和緩存等事情,并因此直接考慮到天然氣價(jià)格。 以太坊為一組非常有限的操作(如SHA3)執(zhí)行此操作。 SHA3??的基本成本是30瓦斯,然后每個(gè)32字節(jié)數(shù)據(jù)字的3瓦斯散列。 所以,可以想象一個(gè)內(nèi)置的StringEqual操作,它可能有5個(gè)氣體的基本氣體成本,然后每個(gè)字節(jié)比較1個(gè)氣體。
這種方法最大的問(wèn)題是使用以太坊模式,這需要使用預(yù)編譯的合同或添加新的EVM操作碼。 在x86虛擬機(jī)中,我想能夠使用本地x86代碼(可能在內(nèi)部進(jìn)行預(yù)編譯),然后以某種方式檢測(cè)虛擬機(jī)何時(shí)進(jìn)入這個(gè)“特殊氣體”內(nèi)存區(qū)域。 這絕對(duì)是一個(gè)想法。 但是增加和改變這些操作的成本將需要分叉或其他網(wǎng)絡(luò)中斷。 Qtum在這方面的一大優(yōu)勢(shì)是,我們可以擴(kuò)展分散治理協(xié)議來(lái)涵蓋這一功能,以便輕松調(diào)整這些操作的基本成本和費(fèi)率成本。 然而,在這種專門的天然氣成本模型下添加新功能的方式仍然是一個(gè)正在進(jìn)行的問(wèn)題。
分支和內(nèi)存的成本,而不是操作碼
一種可能是前進(jìn)方向的想法是不收取操作碼,而是收取分支和內(nèi)存訪問(wèn)費(fèi)用。 這種方法背后的主要觀點(diǎn)是大多數(shù)操作速度非常快,時(shí)間差異不明顯,因此大多數(shù)操作可能具有固定成本或甚至零成本。 然后,唯一的代價(jià)是分支(可能只有后向分支)和內(nèi)存分配。 現(xiàn)代處理器上最昂貴的操作不是明確的操作碼,而是緩存未命中和錯(cuò)誤預(yù)測(cè)的分支。 因此,這種模式旨在在任何可能的時(shí)候?yàn)檫@些條件收取一筆攤銷成本。 這將極大地鼓勵(lì)循環(huán)展開(kāi),這在某些條件下更快......有時(shí)。 如果循環(huán)展開(kāi)過(guò)多,則由于填充緩存而導(dǎo)致性能下降,但展開(kāi)循環(huán)的額外存儲(chǔ)成本可能會(huì)超過(guò)此壓力。
這種方法需要大量的研究來(lái)確定它是否可行,哪些邊緣案例需要特別關(guān)注。 這種方法的主要優(yōu)點(diǎn)是與當(dāng)前的模型相比,可以使燃?xì)獬杀咀兊梅浅?深A(yù)測(cè)。 我相信這種模式本身并不是一個(gè)可行的解決方案,但將這一概念與另一種天然氣概念相結(jié)合可以為智能合同開(kāi)發(fā)人員帶來(lái)可預(yù)測(cè)性。
包括氣體模型中的宏觀操作
由于現(xiàn)代編譯器生成的代碼如此之多(即他們找出了編譯常見(jiàn)操作的最有效的方法),將不僅包括原始操作碼納入氣體模型,而且還包括一系列“宏觀操作”。 這些宏觀經(jīng)營(yíng)需要仔細(xì)評(píng)估和定價(jià),并用一種??方法來(lái)預(yù)測(cè)其執(zhí)行的時(shí)間成本。 困難的部分是,通用執(zhí)行環(huán)境非常不穩(wěn)定,完全預(yù)測(cè)時(shí)間成本可能幾乎不可能。 然而,這個(gè)模型中的任何漏洞都是潛在的攻擊者可用的DoS攻擊。
所有這一切的問(wèn)題
在某個(gè)時(shí)候,通過(guò)在區(qū)塊鏈共識(shí)系統(tǒng)中放置越來(lái)越多的代碼,以便正確測(cè)量執(zhí)行的真實(shí)資源成本,實(shí)際上您會(huì)比執(zhí)行代碼花費(fèi)更多的時(shí)間。 這是一般氣體模型中最難的問(wèn)題之一。 您希望能夠在各種實(shí)現(xiàn)中保持一致的一致性,同時(shí)還能防止廉價(jià)的攻擊,并且最終對(duì)各種虛擬機(jī)優(yōu)化(包括預(yù)編譯和JIT執(zhí)行)都很友好。 這些方面聚集在一起,真正形成了整個(gè)話題中最困難的部分。 這絕對(duì)是它仍然是一個(gè)開(kāi)放性研究問(wèn)題的原因之一。 圖靈完備性的問(wèn)題在于,在實(shí)際執(zhí)行智能合約之前,不可能測(cè)量智能合約的成本。 最好的辦法是測(cè)量各種代碼,然后你至少可以知道一段代碼的天然氣價(jià)格,直到下一個(gè)分支。 這實(shí)際上是智能合約x86架構(gòu)的弱點(diǎn)之一。 代碼是數(shù)據(jù),可以被突變和覆蓋。 在最終的實(shí)現(xiàn)中,最終可能會(huì)有更好的混合氣體模型,這樣內(nèi)部恒定的(即像EVM代碼那樣加載的)字節(jié)碼具有更強(qiáng)大的模型,但是隨后代碼將以讀寫方式動(dòng)態(tài)加載和執(zhí)行,執(zhí)行內(nèi)存使用的計(jì)算成本較低(盡管不太精確/經(jīng)濟(jì)上較昂貴)可以即時(shí)使用的氣體模型。
結(jié)論
天然氣很難,沒(méi)有銀彈,區(qū)塊鏈很難。
筆記
燃?xì)獬杀居?jì)算:
memory(size) = 3 * (size/32) + (size/32) * (size/32) / 512 # Gas costs of loading existing data in EVM (assuming memory is already allocated) (not accounting for memory costs to store the data in) ## external code (semi-volatile) 200 + 700 + (3 * size) sload + extcodecopy + (copy * size) ## internal code (constant) 3 * size copy * size ## storage (mutable) 200 * size sload * size ## Transaction (mutable) 200 + (68 * (size * 32)) + 30 + (6 * size) ## note: zero data is only 4 gas sload + (txnonzeroByte * (size * 32)) + sha3 + (sha3word * size) # Gas costs of storing data initially to EVM (not accounting for memory costs data is initially stored in) ## external code (semi-volatile) 32000 + 20000 + (200 * size * 32) + memory(size) + 10 create + sstore + (createByte * (size * 32)) + memory(size) + overhead ## internal code (constant) (200 * (size * 32)) (createByte * (size * 32)) ## storage (mutable) 20000 * size sstore * size ## Transaction (mutable) 20000 + 30 + (6 * size) ## note: zero data is only 4 gas sstore + sha3 + (sha3word * size) # Gas costs of updating data in EVM (not accounting for memory costs of updated data to store) ## external code (semi-volatile) 32000 + 5000 + (200 * size * 32) + memory(size) + 10 create + sstoreReset + (createByte * (size * 32)) + memory(size) + overhead ## internal code (constant) N/A (technically could be possible, but would greatly complicated contract design) ## storage (mutable) 5000 * size sstoreReset * size ## Transaction (mutable) 5000 + 30 + (6 * size) ## note: zero data is only 4 gas sstoreReset + sha3 + (sha3word * size)測(cè)試合約字節(jié)碼,包括庫(kù)等:
6060604052341561000f57600080fd5b610f488061001e6000396000f30060606040523615610081576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633a96fdd71461008657806346bdca9a1461013a5780635d62fdf5146101f2578063674ff51b146102aa57806388ee0b2a146103625780638a0807b71461041a578063ef5a8374146104ce575b600080fd5b341561009157600080fd5b610124600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610586565b6040518082815260200191505060405180910390f35b341561014557600080fd5b6101d8600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061084a565b604051808215151515815260200191505060405180910390f35b34156101fd57600080fd5b610290600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610860565b604051808215151515815260200191505060405180910390f35b34156102b557600080fd5b610348600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610874565b604051808215151515815260200191505060405180910390f35b341561036d57600080fd5b610400600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506108a1565b604051808215151515815260200191505060405180910390f35b341561042557600080fd5b6104b8600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506109eb565b6040518082815260200191505060405180910390f35b34156104d957600080fd5b61056c600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610d17565b604051808215151515815260200191505060405180910390f35b6000610590610eee565b610598610eee565b6000808693508592508351915081835110156105b357825191505b600090505b818110156107f65782818151811015156105ce57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561064957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610840565b82818151811015156106f257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110151561076d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611156107e95760019450610840565b80806001019150506105b8565b825184511015610828577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610840565b82518451111561083b5760019450610840565b600094505b5050505092915050565b6000806108578484610586565b14905092915050565b600061086c838361084a565b905092915050565b600061089961088283610df0565b61088b85610df0565b610e1e90919063ffffffff16565b905092915050565b6000806000835185511415156108ba57600092506109e3565b84519150600090505b818110156109de5783818151811015156108d957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916858281518110151561095457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156109d157600092506109e3565b80806001019150506108c3565b600192505b505092915050565b60006109f5610eee565b6109fd610eee565b600080869350859250600184511080610a17575060018351105b80610a23575083518351115b15610a50577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610d0d565b6fffffffffffffffffffffffffffffffff84511115610a91577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610d0d565b60009150600090505b8351811015610ce957826000815181101515610ab257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610b2d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610cdc57600191505b825182108015610bb757508351828201105b8015610cb857508282815181101515610bcc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838301815181101515610c4957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610cca578180600101925050610ba5565b8251821415610cdb57809450610d0d565b5b8080600101915050610a9a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b5050505092915050565b6000816040518082805190602001908083835b602083101515610d4f5780518252602082019150602081019050602083039250610d2a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916836040518082805190602001908083835b602083101515610db65780518252602082019150602081019050602083039250610d91565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614905092915050565b610df8610f02565b600060208301905060408051908101604052808451815260200182815250915050919050565b600080610e2b8484610e34565b14905092915050565b60008060008060008060008060008a6000015197508a600001518a600001511015610e6157896000015197505b8a60200151965089602001519550600094505b87851015610ed25786519350855192508284141515610ebb57600185896020030160080260020a03199150818316828516039050600081141515610eba57809850610ee0565b5b602087019650602086019550602085019450610e74565b89600001518b600001510398505b505050505050505092915050565b602060405190810160405280600081525090565b6040805190810160405280600081526020016000815250905600a165627a7a72305820fcb471f7522e763de8c06e6eba885f81d32bc8128e364dc46a35fd7e6c960bb50029原料氣體測(cè)量值:
Gas used for string "x" 1 StringUtilsEqual 23884 SliceEquals 23928 NaiveEquals 23433 Sha3Equals 23708 Gas used for string "foobar123" 9 StringUtilsEqual 28268 SliceEquals 24952 NaiveEquals 26385 Sha3Equals 24732 Gas used for string "foobarxxx124529898453ifdf" 25 StringUtilsEqual 37036 SliceEquals 27000 NaiveEquals 32289 Sha3Equals 26780 Gas used for string "jhkfdfdsfsdgfdsgdsffgfdsgrsehsfrhfrdggewrrtrewgfdsaffvdsfgdsf" 61 StringUtilsEqual 57032 SliceEquals 32006 NaiveEquals 45841 Sha3Equals 31859 Gas used for string "hjfhjdskhjglkhdsjlkghjlkdshjkglhjdsfkhjglfdsjhgjhldsfhgjlkdsfhjkghjfdsklhgjlkfdsjhgfdsgfdshgfds" 95 StringUtilsEqual 75932 SliceEquals 36756 NaiveEquals 58655 Sha3Equals 36682 Gas used for string "hgjkghjdskhgjlserijhlktjiurewihuygtiuserhjkgfhfdsjkvgfhjklfdshjghfdsjghufdshgjlkfdshjlkghfdsjlkghjlkfdshgjlkhfdseulkghfdslkjhgulkijfdshg" 136 StringUtilsEqual 98936 SliceEquals 42801 NaiveEquals 74320 Sha3Equals 42872http://earlz.net/view/2017/10/02/1550/economics-of-fees-and-gas
總結(jié)
以上是生活随笔為你收集整理的【译】Economics of Fees and Gas的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 以太坊智能合约安全 Dasp Top10
- 下一篇: 【译】Thoughts and Goal