diff --git a/explorer/src/components/AccountsCard.tsx b/explorer/src/components/AccountsCard.tsx
index 9bf6afa634..4cbb89ae71 100644
--- a/explorer/src/components/AccountsCard.tsx
+++ b/explorer/src/components/AccountsCard.tsx
@@ -109,6 +109,10 @@ const renderAccountRow = (account: Account) => {
let statusText;
let statusClass;
switch (account.status) {
+ case Status.NotFound:
+ statusClass = "danger";
+ statusText = "Not Found";
+ break;
case Status.CheckFailed:
statusClass = "danger";
statusText = "Error";
@@ -131,14 +135,17 @@ const renderAccountRow = (account: Account) => {
}
let data = "-";
- let balance = "-";
let owner = "-";
if (account.details) {
data = `${account.details.space}`;
- balance = `◎${(1.0 * account.details.lamports) / LAMPORTS_PER_SOL}`;
owner = `${account.details.owner.toBase58()}`;
}
+ let balance = "-";
+ if (account.lamports !== undefined) {
+ balance = `◎${(1.0 * account.lamports) / LAMPORTS_PER_SOL}`;
+ }
+
return (
diff --git a/explorer/src/providers/accounts.tsx b/explorer/src/providers/accounts.tsx
index 0f9a36d38a..7f20ef7465 100644
--- a/explorer/src/providers/accounts.tsx
+++ b/explorer/src/providers/accounts.tsx
@@ -6,6 +6,7 @@ import { useCluster, ClusterStatus } from "./cluster";
export enum Status {
Checking,
CheckFailed,
+ NotFound,
Success
}
@@ -17,7 +18,6 @@ enum Source {
export interface Details {
executable: boolean;
owner: PublicKey;
- lamports: number;
space: number;
}
@@ -26,6 +26,7 @@ export interface Account {
status: Status;
source: Source;
pubkey: PublicKey;
+ lamports?: number;
details?: Details;
}
@@ -44,6 +45,7 @@ interface Update {
type: ActionType.Update;
address: string;
status: Status;
+ lamports?: number;
details?: Details;
}
@@ -78,7 +80,8 @@ function reducer(state: State, action: Action): State {
account = {
...account,
status: action.status,
- details: action.details
+ details: action.details,
+ lamports: action.lamports
};
const accounts = {
...state.accounts,
@@ -169,22 +172,28 @@ export async function fetchAccountInfo(
let status;
let details;
+ let lamports;
try {
const result = await new Connection(url).getAccountInfo(
new PublicKey(address)
);
+ lamports = result.lamports;
details = {
space: result.data.length,
executable: result.executable,
- lamports: result.lamports,
owner: result.owner
};
status = Status.Success;
} catch (error) {
- console.error("Failed to fetch account info", error);
- status = Status.CheckFailed;
+ if (error.toString() === "Error: Invalid request") {
+ lamports = 0;
+ status = Status.NotFound;
+ } else {
+ console.error("Failed to fetch account info", error);
+ status = Status.CheckFailed;
+ }
}
- dispatch({ type: ActionType.Update, status, details, address });
+ dispatch({ type: ActionType.Update, status, lamports, details, address });
}
export function useAccounts() {
|