Explorer: Show simulation error if no logs are returned (#28416)

This commit is contained in:
Justin Starry 2022-10-16 22:13:44 +08:00 committed by GitHub
parent d42e5725fe
commit d884f08723
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 13 deletions

View File

@ -34,17 +34,17 @@ export function SimulatorCard({ message }: { message: VersionedMessage }) {
<div className="card-header"> <div className="card-header">
<h3 className="card-header-title">Transaction Simulation</h3> <h3 className="card-header-title">Transaction Simulation</h3>
<button className="btn btn-sm d-flex btn-white" onClick={simulate}> <button className="btn btn-sm d-flex btn-white" onClick={simulate}>
Simulate {simulationError ? "Retry" : "Simulate"}
</button> </button>
</div> </div>
{simulationError ? ( <div className="card-body">
<div className="card-body"> {simulationError ? (
Failed to run simulation: <>
<span className="text-warning ms-2">{simulationError}</span> Simulation Failure:
</div> <span className="text-warning ms-2">{simulationError}</span>
) : ( </>
<div className="card-body text-muted"> ) : (
<ul> <ul className="text-muted">
<li> <li>
Simulation is free and will run this transaction against the Simulation is free and will run this transaction against the
latest confirmed ledger state. latest confirmed ledger state.
@ -54,8 +54,8 @@ export function SimulatorCard({ message }: { message: VersionedMessage }) {
be disabled. be disabled.
</li> </li>
</ul> </ul>
</div> )}
)} </div>
</div> </div>
); );
} }
@ -103,12 +103,21 @@ function useSimulator(message: VersionedMessage) {
new VersionedTransaction(message), new VersionedTransaction(message),
{ replaceRecentBlockhash: true } { replaceRecentBlockhash: true }
); );
if (resp.value.logs === null) { if (resp.value.logs === null) {
throw new Error("Expected to receive logs from simulation"); throw new Error("Expected to receive logs from simulation");
} }
// Prettify logs if (
setLogs(parseProgramLogs(resp.value.logs, resp.value.err, cluster)); resp.value.logs.length === 0 &&
typeof resp.value.err === "string"
) {
setLogs(null);
setError(resp.value.err);
} else {
// Prettify logs
setLogs(parseProgramLogs(resp.value.logs, resp.value.err, cluster));
}
} catch (err) { } catch (err) {
console.error(err); console.error(err);
setLogs(null); setLogs(null);