Solidity

我可以在事務中使用委託呼叫嗎?

  • June 10, 2017

我對在單個交易中執行多個發送/合約呼叫的技術感興趣,但發起交易的 EOA 仍然是所有操作的發送者(不是錢包合約或其他非 EOA 帳戶)。

在solidity 或EVM 組裝中是否有可能讓交易(而不是合約間呼叫)使用委託呼叫? 如果 EOA 可以將圖書館契約的操作聲明為自己的,同時保留 EOA 的 msg.sender 和 msg.value,那就太好了。

範例流程:

我的外部擁有的 secp256k1 帳戶委託呼叫合約庫 X,其可靠程式碼 a) 呼叫其他合約 Y 以檢查某個變數是否等於某個值,然後 b) 當且僅當它呼叫不同合約 Z 的方法即,發送 1 ETH。

呼叫 Y 以檢查 a) 中的變數,以及呼叫 b) 中的 Z 方法都應該讓 msg.sender 成為我的外部擁有的 secp256k1 帳戶,並且 b) 中的向外發送/呼叫應該花費我的外部擁有的 secp256k1 帳戶。X 和 Y 都不應該認為發生了任何不同的事情,而不僅僅是他們被我的 EOA 直接呼叫。

DELEGATECALL 是 EVM 解釋的指令。因此,要執行 DELEGATECALL,您必須有一個在 EVM 上執行的程序(合約)。

DELEGATECALL 有六個操作數,其中一個是被呼叫的地址。所以它只能呼叫已部署的合約。請注意,所謂的庫只是一個特殊的契約,它使用 DELEGATECALL 呼叫操作。

因此,按照我的理解直接回答您的問題:不 - 不可能從外部帳戶執行任意程式碼。

不過,您可以做的是創建一個合約來實現您想要的邏輯,並在呼叫其他合約時使用 DELEGATECALL 來保留發送者和價值。

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