Skip to content

Commit 7790dfa

Browse files
committed
Refactor signTransaction endpoint to simplify transaction hash handling
- Removed the txHash parameter and associated validation logic for improved clarity. - Streamlined the resolveNetworkId function to enhance address handling. - Adjusted transaction submission logic to ensure proper state management without relying on provided transaction hashes.
1 parent 194ef8e commit 7790dfa

File tree

1 file changed

+26
-55
lines changed

1 file changed

+26
-55
lines changed

src/pages/api/v1/signTransaction.ts

Lines changed: 26 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ export default async function handler(
7676
signature?: unknown;
7777
key?: unknown;
7878
broadcast?: unknown;
79-
txHash?: unknown;
8079
};
8180

8281
const {
@@ -86,7 +85,6 @@ export default async function handler(
8685
signature,
8786
key,
8887
broadcast: rawBroadcast,
89-
txHash: rawTxHash,
9088
} = (req.body ?? {}) as SignTransactionRequestBody;
9189

9290
if (typeof walletId !== "string" || walletId.trim() === "") {
@@ -289,66 +287,44 @@ export default async function handler(
289287
}
290288
})();
291289

292-
const providedTxHash =
293-
typeof rawTxHash === "string" && rawTxHash.trim() !== ""
294-
? rawTxHash.trim()
295-
: undefined;
296-
297-
let normalizedProvidedTxHash: string | undefined;
298-
if (providedTxHash) {
299-
try {
300-
normalizedProvidedTxHash = normalizeHex(providedTxHash, "txHash");
301-
} catch (error: unknown) {
302-
console.error("Invalid txHash payload", toError(error));
303-
return res.status(400).json({ error: "Invalid txHash format" });
304-
}
305-
306-
if (normalizedProvidedTxHash.length !== 64) {
307-
return res.status(400).json({ error: "Invalid txHash length" });
308-
}
309-
310-
if (normalizedProvidedTxHash !== txHashHex) {
311-
return res
312-
.status(400)
313-
.json({ error: "Provided txHash does not match transaction body" });
314-
}
315-
}
316-
317290
let nextState = transaction.state;
318-
let finalTxHash = normalizedProvidedTxHash ?? transaction.txHash ?? undefined;
291+
let finalTxHash = transaction.txHash ?? undefined;
319292
let submissionError: string | undefined;
320293

321-
const resolveNetworkId = async (): Promise<number> => {
322-
const primarySignerAddress = wallet.signersAddresses.find(
323-
(candidate) => typeof candidate === "string" && candidate.trim() !== "",
324-
);
325-
if (primarySignerAddress) {
326-
return addressToNetwork(primarySignerAddress);
294+
const resolveNetworkId = (): number => {
295+
const candidateAddresses = Array.isArray(wallet.signersAddresses)
296+
? wallet.signersAddresses
297+
: [];
298+
299+
for (const candidate of candidateAddresses) {
300+
if (typeof candidate !== "string") {
301+
continue;
302+
}
303+
const trimmed = candidate.trim();
304+
if (!trimmed) {
305+
continue;
306+
}
307+
try {
308+
return addressToNetwork(trimmed);
309+
} catch (error: unknown) {
310+
console.warn("Unable to resolve network from wallet signer address", {
311+
walletId,
312+
candidate: trimmed,
313+
error: toError(error),
314+
});
315+
}
327316
}
328317

329-
const walletRecord = await db.wallet.findUnique({
330-
where: { id: walletId },
331-
select: { signersAddresses: true },
332-
});
333-
334-
const fallbackAddress = walletRecord?.signersAddresses?.find(
335-
(candidate) => typeof candidate === "string" && candidate.trim() !== "",
336-
);
337-
if (fallbackAddress) {
338-
return addressToNetwork(fallbackAddress);
339-
}
340-
341-
return addressToNetwork(address);
318+
throw new Error("Unable to determine network from wallet data");
342319
};
343320

344321
if (
345322
shouldAttemptBroadcast &&
346323
threshold > 0 &&
347-
updatedSignedAddresses.length >= threshold &&
348-
!normalizedProvidedTxHash
324+
updatedSignedAddresses.length >= threshold
349325
) {
350326
try {
351-
const network = await resolveNetworkId();
327+
const network = resolveNetworkId();
352328
const provider = getProvider(network);
353329
const submittedHash = await provider.submitTx(txHexForUpdate);
354330
finalTxHash = submittedHash;
@@ -363,11 +339,6 @@ export default async function handler(
363339
}
364340
}
365341

366-
if (normalizedProvidedTxHash) {
367-
finalTxHash = txHashHex;
368-
nextState = 1;
369-
}
370-
371342
if (transaction.state === 1) {
372343
nextState = 1;
373344
} else if (nextState !== 1) {

0 commit comments

Comments
 (0)