Library

一個庫可以使用另一個庫嗎?

  • February 5, 2019

是否可以在庫中使用庫?

library L2 {
 //...
}

library L1 {
 using L2 for *;
 //...
}

這編譯並執行得很好,但我真正想知道的是 L1 是否引用了一個已經部署的 L2,或者它的字節碼是否被重新部署為 L1 的一部分。我問是因為我能夠在不部署 L2 的情況下部署 L1。此外,當我查看 L1 的字節碼時,L2 的地址沒有 L2__________________________________。

應該是 L1 只使用 L2 中“內聯”的函式。

例如 OpenZeppelin 的 SafeMath 函式是內部的,它們是“內聯的”,您不必連結到 SafeMath。


當我說“內聯”時,它意味著函式的程式碼從庫複製到編譯器生成的程式碼中。

假設你的合約使用add了 SafeMath。

uint a = balance.add(msg.value).

當編譯器內聯一個函式時,它就像它從合約中的庫中複製程式碼一樣。

function __add__(uint r, uint s) private returns (uint) { /* code from SafeMath */ }

uint a = __add__(balance, msg.value);

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