日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Solidity高级理论(二):Gas

發布時間:2024/8/24 编程问答 38 如意码农
生活随笔 收集整理的這篇文章主要介紹了 Solidity高级理论(二):Gas 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

solidity高級理論(二):Gas

關鍵字:Gas、結構體、節省小技巧

Gas是什么

在Solidity中,用戶想要執行DApp都需要支付一定量的Gas,Gas可以用以太幣購買,所以,用戶每次使用DApp都會發費以太幣。

一個 DApp 收取多少 gas 取決于功能邏輯的復雜程度。每個操作背后,都在計算完成這個操作所需要的計算資源,(比如,存儲數據就比做個加法運算貴得多), 一次操作所需要花費的 gas 等于這個操作背后的所有運算花銷的總和。

由于運行你的程序需要花費用戶的真金白銀,在以太坊中代碼的編程語言,比其他任何編程語言都更強調優化。同樣的功能,使用笨拙的代碼開發的程序,比起經過精巧優化的代碼來,運行花費更高,這顯然會給成千上萬的用戶帶來大量不必要的開銷。

gas是計算費用的方式。不過,這些費用仍然是以ether計算,這與gas不同。gas成本是工作量,如勞動時數,而gas價格就像您為完成工作付出的小時工資。 兩者的組合決定了您的總交易費用。如果您的gas價格太低,沒有人會處理您的交易。如果您的gas價格不錯,但交易的gas成本超過預算,交易失敗,但仍然被打包進區塊,勞動者工作了,您不會獲得退款。這樣確保沒有任何東西永遠運行,而且人們會對他們運行的代碼注意一點。 它使礦工和用戶都能安全避免錯誤的代碼!

節省Gas的小技巧

其實很多人覺得,使用uint變種會節省gas,如uin8,其實并不是,即使使用uint8,solidity還是會為它保留256位的存儲空間。

例如,使用uint8而不是使用uint256,消耗的gas是一樣的。

結構封裝(Struct packing)

有一種辦法可以節省gas,那就是把uint綁定到struct里面。

如果一個struct中有多個uint,則盡可能使用較小的uint,solidity會將這些uint打包在一起,從而占用較小的存儲空間。例如:

    struct da{
uint a;
uint b;
uint c;
}
strcut xiao{
uint32 a;
uint32 b;
uint c;
}
da normal = da(10, 20, 30);
xiao mini = xiao(10, 20, 30);
// 因為使用了結構打包,‘xiao’比‘da’占用的空間更少

這樣就符合大家的邏輯了,使用uint32比uint256節省了很多的gas。

所以,當 uint 定義在一個 struct 中的時候,盡量使用最小的整數子類型以節約空間。 并且把同樣類型的變量放一起(即在 struct 中將把變量按照類型依次放置),這樣 Solidity 可以將存儲空間最小化。例如,有兩個 struct:

uint c; uint32 a; uint32 b; 和 uint32 a; uint c; uint32 b;

前者比后者需要的gas更少,因為前者把uint32放一起了。

總結

以上是生活随笔為你收集整理的Solidity高级理论(二):Gas的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。