From 5aaa4bb12e2b3164727e3a5ada2de4091e95909a Mon Sep 17 00:00:00 2001 From: samsamtrum Date: Sun, 31 May 2026 22:15:27 +0700 Subject: [PATCH] Only strip dataSuffix hex prefix --- .../smartAccount/writeContract.test.ts | 45 +++++++++++++++++++ .../actions/smartAccount/writeContract.ts | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packages/permissionless/actions/smartAccount/writeContract.test.ts diff --git a/packages/permissionless/actions/smartAccount/writeContract.test.ts b/packages/permissionless/actions/smartAccount/writeContract.test.ts new file mode 100644 index 00000000..0d0d6a97 --- /dev/null +++ b/packages/permissionless/actions/smartAccount/writeContract.test.ts @@ -0,0 +1,45 @@ +import { encodeFunctionData } from "viem" +import { beforeEach, describe, expect, test, vi } from "vitest" +import { sendTransaction } from "./sendTransaction.js" +import { writeContract } from "./writeContract.js" + +vi.mock("./sendTransaction.js", () => ({ + sendTransaction: vi.fn() +})) + +const abi = [ + { + type: "function", + name: "setBytes", + stateMutability: "nonpayable", + inputs: [{ name: "value", type: "bytes" }], + outputs: [] + } +] as const + +describe("writeContract", () => { + beforeEach(() => { + vi.mocked(sendTransaction).mockReset() + vi.mocked(sendTransaction).mockResolvedValue("0xhash") + }) + + test("only strips a 0x prefix from dataSuffix", async () => { + await writeContract( + {} as never, + { + abi, + address: "0x0000000000000000000000000000000000000001", + functionName: "setBytes", + args: ["0x"], + dataSuffix: "0x12340x5678" + } as never + ) + + expect(sendTransaction).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + data: `${encodeFunctionData({ abi, functionName: "setBytes", args: ["0x"] })}12340x5678` + }) + ) + }) +}) diff --git a/packages/permissionless/actions/smartAccount/writeContract.ts b/packages/permissionless/actions/smartAccount/writeContract.ts index ae63777a..bcb2865c 100644 --- a/packages/permissionless/actions/smartAccount/writeContract.ts +++ b/packages/permissionless/actions/smartAccount/writeContract.ts @@ -58,7 +58,7 @@ export async function writeContract< sendTransaction, "sendTransaction" )({ - data: `${data}${dataSuffix ? dataSuffix.replace("0x", "") : ""}`, + data: `${data}${dataSuffix ? dataSuffix.replace(/^0x/, "") : ""}`, to: address, ...request } as unknown as SendTransactionParameters<