fix: failed requests reach the page with an error code and the node's data (closes #533)
A page's request that the node refuses now reaches it with the node's own JSON-RPC code and data: a proxied read such as a reverting eth_call, a transaction whose gas estimate reverts, and a failed broadcast. Every other refusal carries a code too: 4100 when there is no address, -32602 when the site asks for two different gas limits or a transaction type this wallet does not sign, and -32603 for a failure inside the wallet. nodeError() in approvalVerify.js reads the node's error out of what ethers throws, as failureTexts() already did inline. Model: opus-5-5
This commit is contained in:
@@ -746,6 +746,15 @@ function errorText(err) {
|
||||
return "The transaction could not be sent.";
|
||||
}
|
||||
|
||||
// The JSON-RPC error object the node answered with, `{ code, message, data }`,
|
||||
// out of the error ethers threw for that answer. ethers keeps it under
|
||||
// `info.error`, or under `error` when it could not classify it. Null when
|
||||
// there is none, as for a node that could not be reached.
|
||||
function nodeError(err) {
|
||||
if (!err || typeof err !== "object") return null;
|
||||
return err.error || (err.info && err.info.error) || null;
|
||||
}
|
||||
|
||||
// Every string a failure might carry its reason in. ethers reports the node's
|
||||
// own words in `shortMessage`, but a JSON-RPC error it could not classify is
|
||||
// nested under `error` or `info.error` with the node's message intact, and the
|
||||
@@ -757,7 +766,7 @@ function failureTexts(err) {
|
||||
for (const text of [err.shortMessage, err.message, err.reason]) {
|
||||
if (text) texts.push(String(text));
|
||||
}
|
||||
const nested = err.error || (err.info && err.info.error);
|
||||
const nested = nodeError(err);
|
||||
if (nested && nested.message) texts.push(String(nested.message));
|
||||
return texts;
|
||||
}
|
||||
@@ -891,6 +900,7 @@ module.exports = {
|
||||
assertWithinCeilings,
|
||||
sameAddress,
|
||||
failureIsRetryable,
|
||||
nodeError,
|
||||
isNonceCollision,
|
||||
describeTxFailure,
|
||||
describeSigningFailure,
|
||||
|
||||
Reference in New Issue
Block a user