diff --git a/.changeset/funny-facts-beam.md b/.changeset/funny-facts-beam.md new file mode 100644 index 00000000000..ce67b1a51aa --- /dev/null +++ b/.changeset/funny-facts-beam.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Handle serialized bigints for packing userops diff --git a/packages/thirdweb/src/wallets/smart/lib/packUserOp.ts b/packages/thirdweb/src/wallets/smart/lib/packUserOp.ts index d4cc6277f87..b20a5220125 100644 --- a/packages/thirdweb/src/wallets/smart/lib/packUserOp.ts +++ b/packages/thirdweb/src/wallets/smart/lib/packUserOp.ts @@ -12,19 +12,19 @@ function getInitCode(unpackedUserOperation: UserOperationV07) { function getAccountGasLimits(unpackedUserOperation: UserOperationV07) { return concat([ - pad(toHex(unpackedUserOperation.verificationGasLimit), { + pad(toHex(BigInt(unpackedUserOperation.verificationGasLimit)), { size: 16, }), - pad(toHex(unpackedUserOperation.callGasLimit), { size: 16 }), + pad(toHex(BigInt(unpackedUserOperation.callGasLimit)), { size: 16 }), ]) as Hex; } function getGasLimits(unpackedUserOperation: UserOperationV07) { return concat([ - pad(toHex(unpackedUserOperation.maxPriorityFeePerGas), { + pad(toHex(BigInt(unpackedUserOperation.maxPriorityFeePerGas)), { size: 16, }), - pad(toHex(unpackedUserOperation.maxFeePerGas), { size: 16 }), + pad(toHex(BigInt(unpackedUserOperation.maxFeePerGas)), { size: 16 }), ]) as Hex; } @@ -34,13 +34,13 @@ function getPaymasterAndData(unpackedUserOperation: UserOperationV07) { unpackedUserOperation.paymaster as Hex, pad( toHex( - unpackedUserOperation.paymasterVerificationGasLimit || BigInt(0), + BigInt(unpackedUserOperation.paymasterVerificationGasLimit || 0), ), { size: 16, }, ), - pad(toHex(unpackedUserOperation.paymasterPostOpGasLimit || BigInt(0)), { + pad(toHex(BigInt(unpackedUserOperation.paymasterPostOpGasLimit || 0)), { size: 16, }), unpackedUserOperation.paymasterData || ("0x" as Hex), @@ -53,11 +53,11 @@ export const getPackedUserOperation = ( ): PackedUserOperation => { return { sender: userOperation.sender, - nonce: userOperation.nonce, + nonce: BigInt(userOperation.nonce), initCode: getInitCode(userOperation), callData: userOperation.callData, accountGasLimits: getAccountGasLimits(userOperation), - preVerificationGas: userOperation.preVerificationGas, + preVerificationGas: BigInt(userOperation.preVerificationGas), gasFees: getGasLimits(userOperation), paymasterAndData: getPaymasterAndData(userOperation), signature: userOperation.signature,