Show zero balance for missing accounts

This commit is contained in:
Justin Starry 2020-04-05 16:31:40 +08:00 committed by Michael Vines
parent aec0d9cca0
commit 35814e77cb
2 changed files with 24 additions and 8 deletions

View File

@ -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 (
<tr key={account.id}>
<td>

View File

@ -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() {