diff --git a/.changeset/tiny-trainers-love.md b/.changeset/tiny-trainers-love.md new file mode 100644 index 0000000000..eaa40201dd --- /dev/null +++ b/.changeset/tiny-trainers-love.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/devtools-evm": patch +--- + +Add fix so call is enforced instead of delegatecall for gnosis safe batch tx signing diff --git a/packages/devtools-evm/src/signer/sdk.ts b/packages/devtools-evm/src/signer/sdk.ts index a263a146bd..9237821337 100644 --- a/packages/devtools-evm/src/signer/sdk.ts +++ b/packages/devtools-evm/src/signer/sdk.ts @@ -11,8 +11,6 @@ import { type OmniTransaction, type OmniPoint, } from '@layerzerolabs/devtools' -import assert from 'assert' - import { ethers } from 'ethers' export abstract class OmniSignerEVMBase extends OmniSignerBase implements OmniSigner { @@ -99,10 +97,11 @@ export class GnosisOmniSignerEVM extends } async signAndSendBatch(transactions: OmniTransaction[]): Promise { - assert(transactions.length > 0, `signAndSendBatch received 0 transactions`) + if (transactions.length === 0) { + throw new Error('/signAndSendBatch received 0 transactions') + } const safeTransaction = await this.#createSafeTransaction(transactions) - return this.#proposeSafeTransaction(safeTransaction) } @@ -141,7 +140,8 @@ export class GnosisOmniSignerEVM extends return safeSdk.createTransaction({ safeTransactionData: transactions.map((transaction) => this.#serializeTransaction(transaction)), options: { nonce }, - }) + onlyCalls: true, + } as any) } #serializeTransaction(transaction: OmniTransaction): MetaTransactionData { diff --git a/packages/devtools-evm/test/signer/sdk.test.ts b/packages/devtools-evm/test/signer/sdk.test.ts index f949dbe84c..9ef5e309d6 100644 --- a/packages/devtools-evm/test/signer/sdk.test.ts +++ b/packages/devtools-evm/test/signer/sdk.test.ts @@ -283,6 +283,7 @@ describe('signer/ethers', () => { operation: OperationType.Call, })), options: { nonce }, + onlyCalls: true, }) expect(apiKit.getNextNonce).toHaveBeenCalledWith(safeAddress)