From 7ec5ad644d72e148773267bc1095734935ddee9e Mon Sep 17 00:00:00 2001 From: Adel Akbar Date: Fri, 4 Jul 2025 22:32:22 +0000 Subject: [PATCH 1/2] Add fix so call is enforced instead of delegatecall for gnosis safe batch tx signing --- .changeset/tiny-trainers-love.md | 5 +++++ packages/devtools-evm/src/signer/sdk.ts | 8 ++------ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 .changeset/tiny-trainers-love.md 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..d6abbe3fb9 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,7 @@ export class GnosisOmniSignerEVM extends } async signAndSendBatch(transactions: OmniTransaction[]): Promise { - assert(transactions.length > 0, `signAndSendBatch received 0 transactions`) - const safeTransaction = await this.#createSafeTransaction(transactions) - return this.#proposeSafeTransaction(safeTransaction) } @@ -141,7 +136,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 { From a6b0635521ce84a9bf72b69cdeae7c637f476db3 Mon Sep 17 00:00:00 2001 From: Adel Akbar Date: Fri, 4 Jul 2025 23:49:35 +0000 Subject: [PATCH 2/2] fixed tests --- packages/devtools-evm/src/signer/sdk.ts | 4 ++++ packages/devtools-evm/test/signer/sdk.test.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/packages/devtools-evm/src/signer/sdk.ts b/packages/devtools-evm/src/signer/sdk.ts index d6abbe3fb9..9237821337 100644 --- a/packages/devtools-evm/src/signer/sdk.ts +++ b/packages/devtools-evm/src/signer/sdk.ts @@ -97,6 +97,10 @@ export class GnosisOmniSignerEVM extends } async signAndSendBatch(transactions: OmniTransaction[]): Promise { + if (transactions.length === 0) { + throw new Error('/signAndSendBatch received 0 transactions') + } + const safeTransaction = await this.#createSafeTransaction(transactions) return this.#proposeSafeTransaction(safeTransaction) } 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)