Solidity
如果你連結委託呼叫會發生什麼?
Solidity 文件說“只使用給定地址的程式碼,所有其他方面(儲存、餘額……)都取自目前合約。” 這在創建庫時很有用。
但是如果你連結delegatecall()會發生什麼?
Chains of
delegatecall(..)
仍將保留msg.sender
呼叫合約中的原始、儲存、餘額等值。contract A { function indirect() { B.doit(); } function direct() { C.doit(); } } library B { function doit() { C.doit(); } } library C { function doit() { msg.sender.send(this.balance); } }
在上面的一組合約中,
A.direct()
將A.indirect()
表現相同。唯一的區別是這A.indirect()
將涉及額外的堆棧深度增加,因為它連結A > B > C
而不是直接從A > C
.