Gnosis-Safe

多重發送合約中的“Out of gas”恢復

  • January 14, 2022

我得到了refundReceiver(一直將單獨的交易傳遞給encodeMulti函式,而不是將交易數組傳遞給createTransaction),但是無論我似乎在裡面使用什麼參數組合,我都會在multisend合約中得到一個“用盡的氣體”恢復createTransaction 和 executeTransaction 是。我想我仍然對在 createTransaction 和 executeTransaction 函式中使用哪些參數感到困惑。此時我想要執行的事務沒有發生。我想讓這項工作正常進行,並為簽名者償還他們正在執行的交易的確切汽油費金額。

無論我嘗試了什麼,對 multisend 合約的委託呼叫似乎都將 gas 限制設置為 0:

https://rinkeby.etherscan.io/tx/0x72a6491ff9dc8294d14620c41e4baa25b5b3d0e5c0929b3ce7cbe1008dfe50e0#internal

 const txOptions = {
   gasPrice: getGasPrice,
   gasToken: "0x0000000000000000000000000000000000000000",
   refundReceiver: signer.address,
   safeTxGas: 1000000,
   baseGas: 1000000,
   gasLimit: 10000000,
 };
 const safeTransaction = await safeSdk.createTransaction(
   multiSendTx,
   txOptions
 );

 const execOptions = {
   gasLimit: 10000000,
 };

 const executeTxResponse = await safeSdk.executeTransaction(
   safeTransaction,
   execOptions
 );

謝謝!

在您連結的交易中,safeTxGas參數為 0,因此它將 0 gas 傳遞給基礎交易。safeTxGas因此,在使用 gas 退款時,您需要通過參數為基礎交易指定正確的 gas 數量。

對於特定的片段,您需要移動safeTxGas到選項對象,因為當您為多發送傳遞一組事務時,它希望它位於第二個options參數中。

檢查文件multisend transactions部分:

https ://github.com/gnosis/safe-core-sdk/tree/63df6c6c770f387f8e4939c4c75112ceb490b3b8/packages/safe-core-sdk

有過同樣的問題。看起來safe-core-sdkgithub 上的問題可能會導致SafeTxGas為 0,無論它在選項中是什麼。

https://github.com/gnosis/safe-core-sdk/issues/139

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