Solidity

如果你連結委託呼叫會發生什麼?

  • September 21, 2017

Solidity 文件說“只使用給定地址的程式碼,所有其他方面(儲存、餘額……)都取自目前合約。” 這在創建庫時很有用。

但是如果你連結delegatecall()會發生什麼?

Chains ofdelegatecall(..)仍將保留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.

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