diff --git a/explorer/src/components/block/BlockOverviewCard.tsx b/explorer/src/components/block/BlockOverviewCard.tsx
index b93c3b7feb..473cc147f5 100644
--- a/explorer/src/components/block/BlockOverviewCard.tsx
+++ b/explorer/src/components/block/BlockOverviewCard.tsx
@@ -42,6 +42,8 @@ export function BlockOverviewCard({
}
const block = confirmedBlock.data.block;
+ const committedTxs = block.transactions.filter((tx) => tx.meta?.err === null);
+
return (
<>
@@ -76,11 +78,17 @@ export function BlockOverviewCard({
- Total Transactions |
+ Processed Transactions |
{block.transactions.length}
|
+
+ Successful Transactions |
+
+ {committedTxs.length}
+ |
+
diff --git a/explorer/src/components/block/BlockProgramsCard.tsx b/explorer/src/components/block/BlockProgramsCard.tsx
index 427547b9df..71b92898f6 100644
--- a/explorer/src/components/block/BlockProgramsCard.tsx
+++ b/explorer/src/components/block/BlockProgramsCard.tsx
@@ -5,6 +5,7 @@ import { TableCardBody } from "components/common/TableCardBody";
export function BlockProgramsCard({ block }: { block: ConfirmedBlock }) {
const totalTransactions = block.transactions.length;
+ const txSuccesses = new Map();
const txFrequency = new Map();
const ixFrequency = new Map();
@@ -31,9 +32,14 @@ export function BlockProgramsCard({ block }: { block: ConfirmedBlock }) {
});
});
+ const successful = tx.meta?.err === null;
programUsed.forEach((programId) => {
const frequency = txFrequency.get(programId);
txFrequency.set(programId, frequency ? frequency + 1 : 1);
+ if (successful) {
+ const count = txSuccesses.get(programId);
+ txSuccesses.set(programId, count ? count + 1 : 1);
+ }
});
});
@@ -83,11 +89,13 @@ export function BlockProgramsCard({ block }: { block: ConfirmedBlock }) {
% of Total |
Instruction Count |
% of Total |
+ Success Rate |
{programEntries.map(([programId, txFreq]) => {
const ixFreq = ixFrequency.get(programId) as number;
+ const successes = txSuccesses.get(programId) || 0;
return (
@@ -97,6 +105,7 @@ export function BlockProgramsCard({ block }: { block: ConfirmedBlock }) {
| {((100 * txFreq) / totalTransactions).toFixed(2)}% |
{ixFreq} |
{((100 * ixFreq) / totalInstructions).toFixed(2)}% |
+ {((100 * successes) / txFreq).toFixed(0)}% |
);
})}