Solidity

當使用者 A 呼叫合約 B 呼叫合約 C 呼叫合約庫 D 時,如何保留 msg.sender==B?

  • June 21, 2018

我有使用者 A 呼叫合約 B 呼叫合約 C 呼叫合約 D。

如何在保存的同時從合約 C 呼叫外部庫 D msg.sender==B ?當然,我不能使用,tx.origin因為tx.origin是 A。

使用者 A 創建了 C 的地址和 D 的地址,但沒有創建 B。

DELEGATECALL不是解決方案,不是嗎?

從合約 C 你可以將 adelegatecall變成 D,這將保留發件人 (B)

但它不會改變儲存,它會繼續訪問合約 C 的儲存。

這僅適用於合約 D 不需要儲存,或者它是為了從 C 訪問儲存而編寫的(例如,如果 D 是庫合約)。

這完全取決於您是否是所有這些契約的作者。您可以通過 的組合來實現此目的DELEGATECALL,請參閱 答案。但請始終注意,如果您不是唯一負責契約關鍵方面的人(例如,當它們具有代理功能時,有人可能會將呼叫重定向到意外程式碼),我不建議您依賴委託呼叫。另一種解決方案是msg.sender作為另一個合約的函式參數,並將該地址傳遞給下一個合約,依此類推。

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