diff --git a/app/components/LiveTransactionStatsCard.tsx b/app/components/LiveTransactionStatsCard.tsx
index c6e38beb..f2440465 100644
--- a/app/components/LiveTransactionStatsCard.tsx
+++ b/app/components/LiveTransactionStatsCard.tsx
@@ -224,7 +224,8 @@ function AnimatedTransactionCount({ info }: { info: PerformanceInfo }) {
const countUpRef = React.useRef({ lastUpdate: 0, period: 0, start: 0 });
const countUp = countUpRef.current;
- const { transactionCount: txCount, avgTps } = info;
+ const { transactionCount, avgTps } = info;
+ const txCount = Number(transactionCount);
// Track last tx count to reset count up options
if (txCount !== txCountRef.current) {
@@ -442,14 +443,13 @@ function PingBarChart({
${val.mean} ms
${val.confirmed} of ${val.submitted} confirmed
- ${
- val.loss
+ ${val.loss
? `
${val.loss.toLocaleString(undefined, {
- minimumFractionDigits: 2,
- style: 'percent',
- })} loss
`
+ minimumFractionDigits: 2,
+ style: 'percent',
+ })} loss`
: ''
- }
+ }
${SERIES_INFO[series].label(seriesLength - i)}min ago
`;
diff --git a/app/components/TopAccountsCard.tsx b/app/components/TopAccountsCard.tsx
index 50ab389c..bce2264d 100755
--- a/app/components/TopAccountsCard.tsx
+++ b/app/components/TopAccountsCard.tsx
@@ -11,6 +11,8 @@ import React, { createRef, useMemo } from 'react';
import { ChevronDown } from 'react-feather';
import useAsyncEffect from 'use-async-effect';
+import { percentage } from '../utils/math';
+
type Filter = 'circulating' | 'nonCirculating' | 'all' | null;
export function TopAccountsCard() {
@@ -33,7 +35,7 @@ export function TopAccountsCard() {
return ;
}
- let supplyCount: number;
+ let supplyCount: bigint;
let accounts, header;
if (richList !== Status.Idle) {
@@ -105,7 +107,7 @@ export function TopAccountsCard() {
);
}
-const renderAccountRow = (account: AccountBalancePair, index: number, supply: number) => {
+const renderAccountRow = (account: AccountBalancePair, index: number, supply: bigint) => {
return (
@@ -117,7 +119,7 @@ const renderAccountRow = (account: AccountBalancePair, index: number, supply: nu
|
|
- {`${((100 * account.lamports) / supply).toFixed(3)}%`} |
+ {percentage(BigInt(100 * account.lamports), supply, 4).toFixed(3) + '%'} |
);
};
diff --git a/app/page.tsx b/app/page.tsx
index 80837d2e..9d67ecc4 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -19,6 +19,7 @@ import {
import { Status, useFetchSupply, useSupply } from '@providers/supply';
import { ClusterStatus } from '@utils/cluster';
import { abbreviatedNumber, lamportsToSol, slotsToHumanString } from '@utils/index';
+import { percentage } from '@utils/math';
import React from 'react';
export default function Page() {
@@ -59,13 +60,13 @@ function StakingComponent() {
const delinquentStake = React.useMemo(() => {
if (voteAccounts) {
- return voteAccounts.delinquent.reduce((prev, current) => prev + current.activatedStake, 0);
+ return voteAccounts.delinquent.reduce((prev, current) => prev + current.activatedStake, BigInt(0));
}
}, [voteAccounts]);
const activeStake = React.useMemo(() => {
if (voteAccounts && delinquentStake) {
- return voteAccounts.current.reduce((prev, current) => prev + current.activatedStake, 0) + delinquentStake;
+ return voteAccounts.current.reduce((prev, current) => prev + current.activatedStake, BigInt(0)) + delinquentStake;
}
}, [voteAccounts, delinquentStake]);
@@ -80,11 +81,12 @@ function StakingComponent() {
return ;
}
- const circulatingPercentage = ((supply.circulating / supply.total) * 100).toFixed(1);
+ // Calculate to 2dp for accuracy, then display as 1
+ const circulatingPercentage = percentage(supply.circulating, supply.total, 2).toFixed(1);
let delinquentStakePercentage;
if (delinquentStake && activeStake) {
- delinquentStakePercentage = ((delinquentStake / activeStake) * 100).toFixed(1);
+ delinquentStakePercentage = percentage(delinquentStake, activeStake, 2).toFixed(1);
}
return (
@@ -107,11 +109,11 @@ function StakingComponent() {
Active Stake
- {activeStake && (
+ {activeStake ? (
{displayLamports(activeStake)} / {displayLamports(supply.total)}
- )}
+ ) : null}
{delinquentStakePercentage && (
Delinquent stake: {delinquentStakePercentage}%
@@ -124,7 +126,7 @@ function StakingComponent() {
);
}
-function displayLamports(value: number) {
+function displayLamports(value: number | bigint) {
return abbreviatedNumber(lamportsToSol(value));
}
@@ -149,8 +151,8 @@ function StatsCardBody() {
const hourlySlotTime = Math.round(1000 * avgSlotTime_1h);
const averageSlotTime = Math.round(1000 * avgSlotTime_1min);
const { slotIndex, slotsInEpoch } = epochInfo;
- const epochProgress = ((100 * slotIndex) / slotsInEpoch).toFixed(1) + '%';
- const epochTimeRemaining = slotsToHumanString(slotsInEpoch - slotIndex, hourlySlotTime);
+ const epochProgress = percentage(slotIndex, slotsInEpoch, 2).toFixed(1) + '%';
+ const epochTimeRemaining = slotsToHumanString(Number(slotsInEpoch - slotIndex), hourlySlotTime);
const { blockHeight, absoluteSlot } = epochInfo;
return (
@@ -158,14 +160,14 @@ function StatsCardBody() {
Slot |
-
+
|
{blockHeight !== undefined && (
Block height |
-
+
|
)}
diff --git a/app/providers/accounts/vote-accounts.tsx b/app/providers/accounts/vote-accounts.tsx
index ee9076af..618610c8 100644
--- a/app/providers/accounts/vote-accounts.tsx
+++ b/app/providers/accounts/vote-accounts.tsx
@@ -1,18 +1,34 @@
import { useCluster } from '@providers/cluster';
-import { Connection, VoteAccountStatus } from '@solana/web3.js';
import { Cluster } from '@utils/cluster';
import { reportError } from '@utils/sentry';
import React from 'react';
+import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental';
+
+type VoteAccountInfo = Readonly<{
+ activatedStake: bigint,
+}>;
+
+type VoteAccounts = Readonly<{
+ current: VoteAccountInfo[],
+ delinquent: VoteAccountInfo[],
+}>;
async function fetchVoteAccounts(
cluster: Cluster,
url: string,
- setVoteAccounts: React.Dispatch>
+ setVoteAccounts: React.Dispatch>
) {
try {
- const connection = new Connection(url);
- const result = await connection.getVoteAccounts();
- setVoteAccounts(result);
+ const transport = createDefaultRpcTransport({ url });
+ const rpc = createSolanaRpc({ transport });
+
+ const voteAccountsResponse = await rpc.getVoteAccounts({ commitment: 'confirmed' }).send();
+ const voteAccounts: VoteAccounts = {
+ current: voteAccountsResponse.current.map(c => ({ activatedStake: c.activatedStake })),
+ delinquent: voteAccountsResponse.delinquent.map(d => ({ activatedStake: d.activatedStake })),
+ }
+
+ setVoteAccounts(voteAccounts);
} catch (error) {
if (cluster !== Cluster.Custom) {
reportError(error, { url });
@@ -21,7 +37,7 @@ async function fetchVoteAccounts(
}
export function useVoteAccounts() {
- const [voteAccounts, setVoteAccounts] = React.useState();
+ const [voteAccounts, setVoteAccounts] = React.useState();
const { cluster, url } = useCluster();
return {
diff --git a/app/providers/stats/solanaClusterStats.tsx b/app/providers/stats/solanaClusterStats.tsx
index ae4abbca..57fd038d 100644
--- a/app/providers/stats/solanaClusterStats.tsx
+++ b/app/providers/stats/solanaClusterStats.tsx
@@ -1,14 +1,14 @@
'use client';
import { useCluster } from '@providers/cluster';
-import { Connection } from '@solana/web3.js';
import { Cluster } from '@utils/cluster';
import { reportError } from '@utils/sentry';
import React from 'react';
import useTabVisibility from 'use-tab-visibility';
+import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental';
-import { DashboardInfo, DashboardInfoActionType, dashboardInfoReducer } from './solanaDashboardInfo';
-import { PerformanceInfo, PerformanceInfoActionType, performanceInfoReducer } from './solanaPerformanceInfo';
+import { DashboardInfo, DashboardInfoActionType, dashboardInfoReducer, EpochInfo } from './solanaDashboardInfo';
+import { PerformanceInfo, PerformanceInfoActionType, performanceInfoReducer, PerformanceSample } from './solanaPerformanceInfo';
export const PERF_UPDATE_SEC = 5;
export const SAMPLE_HISTORY_HOURS = 6;
@@ -33,18 +33,18 @@ const initialPerformanceInfo: PerformanceInfo = {
short: [],
},
status: ClusterStatsStatus.Loading,
- transactionCount: 0,
+ transactionCount: BigInt(0),
};
const initialDashboardInfo: DashboardInfo = {
avgSlotTime_1h: 0,
avgSlotTime_1min: 0,
epochInfo: {
- absoluteSlot: 0,
- blockHeight: 0,
- epoch: 0,
- slotIndex: 0,
- slotsInEpoch: 0,
+ absoluteSlot: BigInt(0),
+ blockHeight: BigInt(0),
+ epoch: BigInt(0),
+ slotIndex: BigInt(0),
+ slotsInEpoch: BigInt(0),
},
status: ClusterStatsStatus.Loading,
};
@@ -52,11 +52,11 @@ const initialDashboardInfo: DashboardInfo = {
type SetActive = React.Dispatch>;
const StatsProviderContext = React.createContext<
| {
- setActive: SetActive;
- setTimedOut: () => void;
- retry: () => void;
- active: boolean;
- }
+ setActive: SetActive;
+ setTimedOut: () => void;
+ retry: () => void;
+ active: boolean;
+ }
| undefined
>(undefined);
@@ -68,14 +68,6 @@ const PerformanceContext = React.createContext(und
type Props = { children: React.ReactNode };
-function getConnection(url: string): Connection | undefined {
- try {
- return new Connection(url);
- } catch (error) {
- /* empty */
- }
-}
-
export function SolanaClusterStatsProvider({ children }: Props) {
const { cluster, url } = useCluster();
const [active, setActive] = React.useState(false);
@@ -85,19 +77,25 @@ export function SolanaClusterStatsProvider({ children }: Props) {
React.useEffect(() => {
if (!active || !isTabVisible || !url) return;
- const connection = getConnection(url);
+ const transport = createDefaultRpcTransport({ url });
+ const rpc = createSolanaRpc({ transport });
- if (!connection) return;
-
- let lastSlot: number | null = null;
+ let lastSlot: bigint | null = null;
let stale = false;
const getPerformanceSamples = async () => {
try {
- const samples = await connection.getRecentPerformanceSamples(60 * SAMPLE_HISTORY_HOURS);
+ const samplesResponse = await rpc.getRecentPerformanceSamples(60 * SAMPLE_HISTORY_HOURS).send();
+
+ const samples: PerformanceSample[] = samplesResponse.map(s => ({
+ numSlots: s.numSlots,
+ numTransactions: s.numTransactions,
+ samplePeriodSecs: s.samplePeriodSecs,
+ }));
+
if (stale) {
return;
}
- if (samples.length < 1) {
+ if (samplesResponse.length < 1) {
// no samples to work with (node has no history).
return; // we will allow for a timeout instead of throwing an error
}
@@ -131,7 +129,7 @@ export function SolanaClusterStatsProvider({ children }: Props) {
const getTransactionCount = async () => {
try {
- const transactionCount = await connection.getTransactionCount();
+ const transactionCount = await rpc.getTransactionCount({ commitment: 'confirmed' }).send();
if (stale) {
return;
}
@@ -155,7 +153,16 @@ export function SolanaClusterStatsProvider({ children }: Props) {
const getEpochInfo = async () => {
try {
- const epochInfo = await connection.getEpochInfo();
+ const epochInfoResponse = await rpc.getEpochInfo().send();
+
+ const epochInfo: EpochInfo = {
+ absoluteSlot: epochInfoResponse.absoluteSlot,
+ blockHeight: epochInfoResponse.blockHeight,
+ epoch: epochInfoResponse.epoch,
+ slotIndex: epochInfoResponse.slotIndex,
+ slotsInEpoch: epochInfoResponse.slotsInEpoch,
+ }
+
if (stale) {
return;
}
@@ -181,19 +188,18 @@ export function SolanaClusterStatsProvider({ children }: Props) {
const getBlockTime = async () => {
if (lastSlot) {
try {
- const blockTime = await connection.getBlockTime(lastSlot);
+ const blockTime = await rpc.getBlockTime(lastSlot).send();
+
if (stale) {
return;
}
- if (blockTime !== null) {
- dispatchDashboardInfo({
- data: {
- blockTime: blockTime * 1000,
- slot: lastSlot,
- },
- type: DashboardInfoActionType.SetLastBlockTime,
- });
- }
+ dispatchDashboardInfo({
+ data: {
+ blockTime: blockTime * 1000,
+ slot: lastSlot,
+ },
+ type: DashboardInfoActionType.SetLastBlockTime,
+ });
} catch (error) {
// let this fail gracefully
}
diff --git a/app/providers/stats/solanaDashboardInfo.tsx b/app/providers/stats/solanaDashboardInfo.tsx
index d318e8db..2f77d5db 100644
--- a/app/providers/stats/solanaDashboardInfo.tsx
+++ b/app/providers/stats/solanaDashboardInfo.tsx
@@ -1,6 +1,5 @@
-import { EpochInfo, PerfSample } from '@solana/web3.js';
-
import { ClusterStatsStatus } from './solanaClusterStats';
+import { PerformanceSample } from './solanaPerformanceInfo';
export type DashboardInfo = {
status: ClusterStatsStatus;
@@ -13,7 +12,7 @@ export type DashboardInfo = {
export type BlockTimeInfo = {
blockTime: number;
- slot: number;
+ slot: bigint;
};
export enum DashboardInfoActionType {
@@ -24,9 +23,17 @@ export enum DashboardInfoActionType {
Reset,
}
+export type EpochInfo = {
+ absoluteSlot: bigint,
+ blockHeight: bigint,
+ epoch: bigint,
+ slotIndex: bigint,
+ slotsInEpoch: bigint,
+};
+
export type DashboardInfoActionSetPerfSamples = {
type: DashboardInfoActionType.SetPerfSamples;
- data: PerfSample[];
+ data: PerformanceSample[];
};
export type DashboardInfoActionSetEpochInfo = {
@@ -74,10 +81,10 @@ export function dashboardInfoReducer(state: DashboardInfo, action: DashboardInfo
const samples = action.data
.filter(sample => {
- return sample.numSlots !== 0;
+ return sample.numSlots !== BigInt(0);
})
.map(sample => {
- return sample.samplePeriodSecs / sample.numSlots;
+ return sample.samplePeriodSecs / Number(sample.numSlots);
})
.slice(0, 60);
@@ -87,7 +94,7 @@ export function dashboardInfoReducer(state: DashboardInfo, action: DashboardInfo
return sum + cur;
}, 0) / samplesInHour;
- const status = state.epochInfo.absoluteSlot !== 0 ? ClusterStatsStatus.Ready : ClusterStatsStatus.Loading;
+ const status = state.epochInfo.absoluteSlot !== BigInt(0) ? ClusterStatsStatus.Ready : ClusterStatsStatus.Loading;
return {
...state,
@@ -109,8 +116,8 @@ export function dashboardInfoReducer(state: DashboardInfo, action: DashboardInfo
action.data.absoluteSlot >= state.lastBlockTime.slot
) {
blockTime =
- state.lastBlockTime.blockTime +
- (action.data.absoluteSlot - state.lastBlockTime.slot) * Math.floor(state.avgSlotTime_1h * 1000);
+ Number(BigInt(state.lastBlockTime.blockTime) +
+ (action.data.absoluteSlot - state.lastBlockTime.slot) * BigInt(Math.floor(state.avgSlotTime_1h * 1000)));
}
return {
diff --git a/app/providers/stats/solanaPerformanceInfo.tsx b/app/providers/stats/solanaPerformanceInfo.tsx
index 70837cab..3726b759 100644
--- a/app/providers/stats/solanaPerformanceInfo.tsx
+++ b/app/providers/stats/solanaPerformanceInfo.tsx
@@ -1,5 +1,3 @@
-import { PerfSample } from '@solana/web3.js';
-
import { ClusterStatsStatus } from './solanaClusterStats';
export type PerformanceInfo = {
@@ -11,7 +9,13 @@ export type PerformanceInfo = {
medium: (number | null)[];
long: (number | null)[];
};
- transactionCount: number;
+ transactionCount: bigint;
+};
+
+export type PerformanceSample = {
+ numTransactions: bigint;
+ numSlots: bigint;
+ samplePeriodSecs: number;
};
export enum PerformanceInfoActionType {
@@ -23,12 +27,12 @@ export enum PerformanceInfoActionType {
export type PerformanceInfoActionSetTransactionCount = {
type: PerformanceInfoActionType.SetTransactionCount;
- data: number;
+ data: bigint;
};
export type PerformanceInfoActionSetPerfSamples = {
type: PerformanceInfoActionType.SetPerfSamples;
- data: PerfSample[];
+ data: PerformanceSample[];
};
export type PerformanceInfoActionSetError = {
@@ -56,10 +60,10 @@ export function performanceInfoReducer(state: PerformanceInfo, action: Performan
const short = action.data
.filter(sample => {
- return sample.numTransactions !== 0;
+ return sample.numTransactions !== BigInt(0);
})
.map(sample => {
- return sample.numTransactions / sample.samplePeriodSecs;
+ return Number(sample.numTransactions / BigInt(sample.samplePeriodSecs));
});
const avgTps = short[0];
@@ -78,7 +82,7 @@ export function performanceInfoReducer(state: PerformanceInfo, action: Performan
Math.max(...perfHistory.long)
);
- const status = state.transactionCount !== 0 ? ClusterStatsStatus.Ready : ClusterStatsStatus.Loading;
+ const status = state.transactionCount !== BigInt(0) ? ClusterStatsStatus.Ready : ClusterStatsStatus.Loading;
return {
...state,
diff --git a/app/providers/supply.tsx b/app/providers/supply.tsx
index e8077ab1..150dd358 100644
--- a/app/providers/supply.tsx
+++ b/app/providers/supply.tsx
@@ -1,10 +1,10 @@
'use client';
import { useCluster } from '@providers/cluster';
-import { Connection, Supply } from '@solana/web3.js';
import { Cluster, ClusterStatus } from '@utils/cluster';
import { reportError } from '@utils/sentry';
import React from 'react';
+import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental';
export enum Status {
Idle,
@@ -12,6 +12,14 @@ export enum Status {
Connecting,
}
+type Lamports = bigint;
+
+type Supply = Readonly<{
+ circulating: Lamports,
+ nonCirculating: Lamports,
+ total: Lamports,
+}>;
+
type State = Supply | Status | string;
type Dispatch = React.Dispatch>;
@@ -41,8 +49,15 @@ async function fetch(dispatch: Dispatch, cluster: Cluster, url: string) {
dispatch(Status.Connecting);
try {
- const connection = new Connection(url, 'finalized');
- const supply = (await connection.getSupply({ excludeNonCirculatingAccountsList: true })).value;
+ const transport = createDefaultRpcTransport({ url });
+ const rpc = createSolanaRpc({ transport });
+
+ const supplyResponse = await rpc.getSupply({ commitment: 'finalized', excludeNonCirculatingAccountsList: true }).send();
+ const supply: Supply = {
+ circulating: supplyResponse.value.circulating,
+ nonCirculating: supplyResponse.value.nonCirculating,
+ total: supplyResponse.value.total,
+ };
// Update state if still connecting
dispatch(state => {
diff --git a/app/utils/__tests__/math-test.ts b/app/utils/__tests__/math-test.ts
new file mode 100644
index 00000000..c1f39f45
--- /dev/null
+++ b/app/utils/__tests__/math-test.ts
@@ -0,0 +1,9 @@
+import { percentage } from '@utils/math';
+
+describe('percentage', () => {
+ it('returns a number with the right decimals', () => {
+ expect(percentage(BigInt(1), BigInt(3), 0)).toEqual(33)
+ expect(percentage(BigInt(1), BigInt(3), 1)).toEqual(33.3)
+ expect(percentage(BigInt(1), BigInt(3), 2)).toEqual(33.33)
+ });
+});
diff --git a/app/utils/math.ts b/app/utils/math.ts
new file mode 100644
index 00000000..8b578b14
--- /dev/null
+++ b/app/utils/math.ts
@@ -0,0 +1,10 @@
+/**
+ * Calculate a percentage using bigints, as numerator/denominator * 100
+ * @returns the percentage, with the requested number of decimal places
+ */
+export function percentage(numerator: bigint, denominator: bigint, decimals: number): number {
+ // since bigint is integer, we need to multiply first to get decimals
+ // see https://stackoverflow.com/a/63095380/1375972
+ const pow = 10 ** decimals;
+ return Number(numerator * BigInt(100 * pow) / denominator) / pow;
+}
diff --git a/package.json b/package.json
index e6fc65df..84379201 100644
--- a/package.json
+++ b/package.json
@@ -56,7 +56,8 @@
"tweetnacl": "^1.0.3",
"typescript": "5.0.4",
"use-async-effect": "^2.2.7",
- "use-tab-visibility": "^1.0.9"
+ "use-tab-visibility": "^1.0.9",
+ "web3js-experimental": "npm:@solana/web3.js@2.0.0-experimental.b79b56f"
},
"devDependencies": {
"@solana/eslint-config-solana": "^1.0.1",
@@ -98,4 +99,4 @@
"uuid": "^9.0.0"
}
}
-}
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 19474503..4ba70fff 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,7 +15,7 @@ dependencies:
version: 3.6.7
'@bonfida/spl-name-service':
specifier: 0.1.30
- version: 0.1.30(@solana/buffer-layout@3.0.0)(@solana/spl-token@0.1.8)(@solana/web3.js@1.66.0)(bn.js@5.2.1)(borsh@0.7.0)
+ version: 0.1.30(@solana/buffer-layout@3.0.0)(@solana/spl-token@0.1.8)(@solana/web3.js@2.0.0-experimental.b79b56f)(bn.js@5.2.1)(borsh@0.7.0)
'@cloudflare/stream-react':
specifier: ^1.2.0
version: 1.2.0(react@18.2.0)
@@ -27,7 +27,7 @@ dependencies:
version: 1.1.0
'@metaplex/js':
specifier: ^4.12.0
- version: 4.12.0(@metaplex-foundation/mpl-auction@0.0.2)(@metaplex-foundation/mpl-core@0.0.2)(@metaplex-foundation/mpl-metaplex@0.0.5)(@metaplex-foundation/mpl-token-metadata@1.1.0)(@metaplex-foundation/mpl-token-vault@0.0.2)(@solana/spl-token@0.1.8)(@solana/web3.js@1.66.0)
+ version: 4.12.0(@metaplex-foundation/mpl-auction@0.0.2)(@metaplex-foundation/mpl-core@0.0.2)(@metaplex-foundation/mpl-metaplex@0.0.5)(@metaplex-foundation/mpl-token-metadata@1.1.0)(@metaplex-foundation/mpl-token-vault@0.0.2)(@solana/spl-token@0.1.8)(@solana/web3.js@2.0.0-experimental.b79b56f)
'@project-serum/anchor':
specifier: ^0.23.0
version: 0.23.0
@@ -51,7 +51,7 @@ dependencies:
version: 3.0.0
'@solana/spl-account-compression':
specifier: ^0.1.8
- version: 0.1.8(@solana/web3.js@1.66.0)
+ version: 0.1.8(@solana/web3.js@2.0.0-experimental.b79b56f)
'@solana/spl-token':
specifier: ^0.1.8
version: 0.1.8
@@ -148,6 +148,9 @@ dependencies:
use-tab-visibility:
specifier: ^1.0.9
version: 1.0.9(react@18.2.0)
+ web3js-experimental:
+ specifier: npm:@solana/web3.js@2.0.0-experimental.b79b56f
+ version: /@solana/web3.js@2.0.0-experimental.b79b56f
devDependencies:
'@solana/eslint-config-solana':
@@ -553,7 +556,7 @@ packages:
- utf-8-validate
dev: false
- /@bonfida/spl-name-service@0.1.30(@solana/buffer-layout@3.0.0)(@solana/spl-token@0.1.8)(@solana/web3.js@1.66.0)(bn.js@5.2.1)(borsh@0.7.0):
+ /@bonfida/spl-name-service@0.1.30(@solana/buffer-layout@3.0.0)(@solana/spl-token@0.1.8)(@solana/web3.js@2.0.0-experimental.b79b56f)(bn.js@5.2.1)(borsh@0.7.0):
resolution: {integrity: sha512-0aSpymeNDq7rDSDEJgB6/qKyy3yUkHLQk7Jxwtmibfva3s1johEfFdl2kUDDPWi/ubgbxYjPxJRGrlGQNEmmQw==}
peerDependencies:
'@solana/buffer-layout': ^4.0.0
@@ -564,7 +567,7 @@ packages:
dependencies:
'@solana/buffer-layout': 3.0.0
'@solana/spl-token': 0.1.8
- '@solana/web3.js': 1.66.0
+ '@solana/web3.js': 2.0.0-experimental.b79b56f
bn.js: 5.2.1
borsh: 0.7.0
ethers: 5.7.2
@@ -1403,7 +1406,7 @@ packages:
- utf-8-validate
dev: false
- /@metaplex/js@4.12.0(@metaplex-foundation/mpl-auction@0.0.2)(@metaplex-foundation/mpl-core@0.0.2)(@metaplex-foundation/mpl-metaplex@0.0.5)(@metaplex-foundation/mpl-token-metadata@1.1.0)(@metaplex-foundation/mpl-token-vault@0.0.2)(@solana/spl-token@0.1.8)(@solana/web3.js@1.66.0):
+ /@metaplex/js@4.12.0(@metaplex-foundation/mpl-auction@0.0.2)(@metaplex-foundation/mpl-core@0.0.2)(@metaplex-foundation/mpl-metaplex@0.0.5)(@metaplex-foundation/mpl-token-metadata@1.1.0)(@metaplex-foundation/mpl-token-vault@0.0.2)(@solana/spl-token@0.1.8)(@solana/web3.js@2.0.0-experimental.b79b56f):
resolution: {integrity: sha512-rIUTMXo5gIXFIZt08AEHyqH4oVoLL2dMYiNePQluw9pydesRym4jDayJ5POxEmKmyc6KGqVKw/YWUIivmUY5zg==}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
peerDependencies:
@@ -1421,7 +1424,7 @@ packages:
'@metaplex-foundation/mpl-token-metadata': 1.1.0
'@metaplex-foundation/mpl-token-vault': 0.0.2
'@solana/spl-token': 0.1.8
- '@solana/web3.js': 1.66.0
+ '@solana/web3.js': 2.0.0-experimental.b79b56f
'@types/bs58': 4.0.1
axios: 0.25.0
bn.js: 5.2.1
@@ -1980,6 +1983,12 @@ packages:
typescript: 5.0.4
dev: true
+ /@solana/keys@2.0.0-experimental.b79b56f:
+ resolution: {integrity: sha512-CQO4bbMkKX4DF6lMyw/8D6gSVD3Md60vKuK6cfxcE2h2vl0Je/MvHHjpTa6CAibRiAfrVAPeqqVcZviQUng58g==}
+ dependencies:
+ bs58: 5.0.0
+ dev: false
+
/@solana/prettier-config-solana@0.0.2(prettier@2.8.8):
resolution: {integrity: sha512-F/e2UIJwb30Y8QjR9nr/OrJiCc8yjMkiP9Ctk4VYg+8jODNP31dx6s9mn4sbMFVYA0Km5EPZLN2xsZacBy0y/A==}
peerDependencies:
@@ -1988,7 +1997,18 @@ packages:
prettier: 2.8.8
dev: true
- /@solana/spl-account-compression@0.1.8(@solana/web3.js@1.66.0):
+ /@solana/rpc-core@2.0.0-experimental.b79b56f:
+ resolution: {integrity: sha512-nZ/PFIpbmq3Y/+/QR3kMI99WCkMEiPdiZusnE+pb3BLgDcZ5SZpPf/yGytv6/MqvqwgT8oxwS/G6Z3XogeUzng==}
+ dependencies:
+ '@solana/keys': 2.0.0-experimental.b79b56f
+ bs58: 5.0.0
+ dev: false
+
+ /@solana/rpc-transport@2.0.0-experimental.b79b56f:
+ resolution: {integrity: sha512-CadExK4nr2COekDkHpeByOosY0hfJSUOb1gogX6N/4dHbShOEnRLVXUXQeSw6ochMtLkfxamuZU1I3p1rS/ObQ==}
+ dev: false
+
+ /@solana/spl-account-compression@0.1.8(@solana/web3.js@2.0.0-experimental.b79b56f):
resolution: {integrity: sha512-vsvsx358pVFPtyNd8zIZy0lezR0NuvOykQ29Zq+8oto+kHfTXMGXXQ1tKHUYke6XkINIWLFVg/jDi+1D9RYaqQ==}
engines: {node: '>=16'}
peerDependencies:
@@ -1996,7 +2016,7 @@ packages:
dependencies:
'@metaplex-foundation/beet': 0.7.1
'@metaplex-foundation/beet-solana': 0.4.0
- '@solana/web3.js': 1.66.0
+ '@solana/web3.js': 2.0.0-experimental.b79b56f
bn.js: 5.2.1
borsh: 0.7.0
js-sha3: 0.8.0
@@ -2058,6 +2078,15 @@ packages:
- utf-8-validate
dev: false
+ /@solana/web3.js@2.0.0-experimental.b79b56f:
+ resolution: {integrity: sha512-f6wbWSSGGsBlwQ23jmBAG4ZOEzXcbXKpIceC+y2iTYnCKf+dLGco27RPPx6AjRNe8cgB5dxeY+rHiEWRWJPoxA==}
+ dependencies:
+ '@solana/keys': 2.0.0-experimental.b79b56f
+ '@solana/rpc-core': 2.0.0-experimental.b79b56f
+ '@solana/rpc-transport': 2.0.0-experimental.b79b56f
+ fast-stable-stringify: 1.0.0
+ dev: false
+
/@swc/helpers@0.5.1:
resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
dependencies: