Solidity

我應該使用嵌入式庫(內部)還是連結庫(外部)來節省氣體?

  • September 16, 2022

我知道在solidity中有兩種類型的庫。

  1. 嵌入式庫:如果智能合約使用的庫僅具有內部功能,則 EVM 只需將庫嵌入到合約中。它不使用委託呼叫來呼叫函式,而是簡單地使用 JUMP 語句(普通方法呼叫)。在這種情況下不需要單獨部署庫。
  2. 連結庫:另一方面,如果庫包含公共或外部函式,則需要部署庫。庫的部署將在區塊鏈中生成唯一的地址。該地址需要與呼叫合約關聯。

從我所見,如果有一個功能/程式碼在許多智能合約上都是相同的,我們應該編寫連結庫以避免程式碼重複,從而節省氣體。我們部署了這樣一個庫並將其連結到所有需要使用其邏輯的合約。

那麼嵌入式庫的意義是什麼?

因為,據我所知,我們不部署嵌入式庫,因為編譯器基本上會將其程式碼複製粘貼到所有使用它的智能合約中。那麼為什麼不直接在 SC 中編寫程式碼並省去麻煩呢?(我想它可以讓你的程式碼看起來更乾淨,但僅此而已)

或者我在這裡錯過了什麼?目前,Linked Library似乎有一個明顯的案例,而我找不到任何可以使用Embedded Library的情況。所以我希望有更多經驗的人能給我解釋一下。

連結到相關文章 ->關於 Solidity 庫你應該知道的一切

另一篇關於如何使用庫縮小智能合約的好文章

答案並不簡單,一個不一定比另一個好

嵌入式庫的部署成本更高,因為程式碼包含在每個合約部署中,但實際執行程式碼會更便宜。連結庫將相反,它們將使您的合約部署更便宜,因為您沒有重新部署該字節碼,但使用它們也會增加執行成本,因為連結庫delegatecall中有額外的 s

這是執行成本和部署成本之間的權衡。如果您計劃部署一組每次只執行幾次的合約,那麼您應該使用連結庫。如果您正在部署一組將執行很多次的合約,您應該使用嵌入式庫

引用自:https://ethereum.stackexchange.com/questions/135747