Library
一個庫可以使用另一個庫嗎?
是否可以在庫中使用庫?
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);