From c544116cf2aed4222caa1ae5be8707c34df3838c Mon Sep 17 00:00:00 2001 From: Justin Starry Date: Sat, 8 Aug 2020 21:06:24 +0800 Subject: [PATCH] Add support for parsed stake accounts (#11469) --- explorer/.travis.yml | 1 + explorer/package-lock.json | 61 +++++++++ explorer/package.json | 4 + explorer/src/__tests__/lamportsToSol.ts | 28 ++++ .../account/StakeAccountSection.tsx | 122 +++++++++++++----- .../components/account/UnknownAccountCard.tsx | 2 +- .../instruction/token/TokenDetailsCard.tsx | 8 +- .../src/components/instruction/token/types.ts | 21 +-- explorer/src/pages/AccountDetailsPage.tsx | 17 ++- explorer/src/providers/accounts/index.tsx | 31 +++-- explorer/src/providers/accounts/types.ts | 48 +++++++ explorer/src/utils/index.tsx | 32 ++++- explorer/src/validators/bignum.ts | 8 ++ explorer/src/validators/index.ts | 7 + explorer/src/validators/pubkey.ts | 8 ++ explorer/wasm/pkg/package.json | 2 +- explorer/wasm/pkg/solana_sdk_wasm.d.ts | 2 +- explorer/wasm/pkg/solana_sdk_wasm_bg.d.ts | 2 +- explorer/wasm/pkg/solana_sdk_wasm_bg.js | 4 +- explorer/wasm/pkg/solana_sdk_wasm_bg.wasm | Bin 73523 -> 72975 bytes explorer/wasm/src/stake_account.rs | 12 +- 21 files changed, 340 insertions(+), 80 deletions(-) create mode 100644 explorer/src/__tests__/lamportsToSol.ts create mode 100644 explorer/src/providers/accounts/types.ts create mode 100644 explorer/src/validators/bignum.ts create mode 100644 explorer/src/validators/index.ts create mode 100644 explorer/src/validators/pubkey.ts diff --git a/explorer/.travis.yml b/explorer/.travis.yml index 2b66949476..71f18f5a84 100644 --- a/explorer/.travis.yml +++ b/explorer/.travis.yml @@ -6,4 +6,5 @@ branches: - master script: - npm run build + - npm run test - npm run format diff --git a/explorer/package-lock.json b/explorer/package-lock.json index 37dc2586de..422a89c2bd 100644 --- a/explorer/package-lock.json +++ b/explorer/package-lock.json @@ -2843,6 +2843,14 @@ "@babel/types": "^7.3.0" } }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, "@types/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.1.tgz", @@ -2851,6 +2859,11 @@ "base-x": "^3.0.6" } }, + "@types/chai": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", + "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==" + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", @@ -3791,6 +3804,11 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -5087,6 +5105,34 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + }, + "dependencies": { + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + } + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5102,6 +5148,11 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, "cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", @@ -7882,6 +7933,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -11737,6 +11793,11 @@ "pinkie-promise": "^2.0.0" } }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, "pbkdf2": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", diff --git a/explorer/package.json b/explorer/package.json index d7f94c77e3..28978df12f 100644 --- a/explorer/package.json +++ b/explorer/package.json @@ -8,7 +8,9 @@ "@testing-library/jest-dom": "^5.11.2", "@testing-library/react": "^10.4.8", "@testing-library/user-event": "^12.1.0", + "@types/bn.js": "^4.11.6", "@types/bs58": "^4.0.1", + "@types/chai": "^4.2.12", "@types/jest": "^26.0.9", "@types/node": "^14.0.27", "@types/react": "^16.9.44", @@ -16,8 +18,10 @@ "@types/react-router-dom": "^5.1.5", "@types/react-select": "^3.0.16", "@types/socket.io-client": "^1.4.33", + "bn.js": "^5.1.2", "bootstrap": "^4.5.1", "bs58": "^4.0.1", + "chai": "^4.2.0", "humanize-duration-ts": "^2.1.1", "node-sass": "^4.14.1", "prettier": "^2.0.5", diff --git a/explorer/src/__tests__/lamportsToSol.ts b/explorer/src/__tests__/lamportsToSol.ts new file mode 100644 index 0000000000..fdca7f63e9 --- /dev/null +++ b/explorer/src/__tests__/lamportsToSol.ts @@ -0,0 +1,28 @@ +import { expect } from "chai"; +import { lamportsToSol, LAMPORTS_PER_SOL } from "utils"; +import BN from "bn.js"; + +describe("lamportsToSol", () => { + it("0 lamports", () => { + expect(lamportsToSol(new BN(0))).to.eq(0.0); + }); + + it("1 lamport", () => { + expect(lamportsToSol(new BN(1))).to.eq(0.000000001); + expect(lamportsToSol(new BN(-1))).to.eq(-0.000000001); + }); + + it("1 SOL", () => { + expect(lamportsToSol(new BN(LAMPORTS_PER_SOL))).to.eq(1.0); + expect(lamportsToSol(new BN(-LAMPORTS_PER_SOL))).to.eq(-1.0); + }); + + it("u64::MAX lamports", () => { + expect(lamportsToSol(new BN(2).pow(new BN(64)))).to.eq( + 18446744073.709551615 + ); + expect(lamportsToSol(new BN(2).pow(new BN(64)).neg())).to.eq( + -18446744073.709551615 + ); + }); +}); diff --git a/explorer/src/components/account/StakeAccountSection.tsx b/explorer/src/components/account/StakeAccountSection.tsx index dada3735f1..daf89f6b30 100644 --- a/explorer/src/components/account/StakeAccountSection.tsx +++ b/explorer/src/components/account/StakeAccountSection.tsx @@ -1,29 +1,54 @@ import React from "react"; -import { StakeAccount, Meta } from "solana-sdk-wasm"; +import { StakeAccount as StakeAccountWasm, Meta } from "solana-sdk-wasm"; import { TableCardBody } from "components/common/TableCardBody"; import { lamportsToSolString } from "utils"; import { displayTimestamp } from "utils/date"; import { Account, useFetchAccountInfo } from "providers/accounts"; import { Address } from "components/common/Address"; +import { + StakeAccountInfo, + StakeMeta, + StakeAccountType, +} from "providers/accounts/types"; +import BN from "bn.js"; + +const MAX_EPOCH = new BN(2).pow(new BN(64)); export function StakeAccountSection({ account, stakeAccount, + stakeAccountType, }: { account: Account; - stakeAccount: StakeAccount; + stakeAccount: StakeAccountInfo | StakeAccountWasm; + stakeAccountType: StakeAccountType; }) { return ( <> - - {stakeAccount.meta && } - {stakeAccount.meta && } + + {stakeAccount.meta && ( + <> + + + + )} ); } -function LockupCard({ stakeAccount }: { stakeAccount: StakeAccount }) { +function LockupCard({ + stakeAccount, +}: { + stakeAccount: StakeAccountInfo | StakeAccountWasm; +}) { const unixTimestamp = stakeAccount.meta?.lockup.unixTimestamp; if (unixTimestamp && unixTimestamp > 0) { const prettyTimestamp = displayTimestamp(unixTimestamp * 1000); @@ -37,12 +62,21 @@ function LockupCard({ stakeAccount }: { stakeAccount: StakeAccount }) { } } +const TYPE_NAMES = { + uninitialized: "Uninitialized", + initialized: "Initialized", + delegated: "Delegated", + rewardsPool: "RewardsPool", +}; + function OverviewCard({ account, stakeAccount, + stakeAccountType, }: { account: Account; - stakeAccount: StakeAccount; + stakeAccount: StakeAccountInfo | StakeAccountWasm; + stakeAccountType: StakeAccountType; }) { const refresh = useFetchAccountInfo(); return ( @@ -84,7 +118,7 @@ function OverviewCard({ {!stakeAccount.meta && ( State - {stakeAccount.displayState()} + {TYPE_NAMES[stakeAccountType]} )} @@ -92,16 +126,48 @@ function OverviewCard({ ); } -function DelegationCard({ stakeAccount }: { stakeAccount: StakeAccount }) { - const { stake } = stakeAccount; +function DelegationCard({ + stakeAccount, + stakeAccountType, +}: { + stakeAccount: StakeAccountInfo | StakeAccountWasm; + stakeAccountType: StakeAccountType; +}) { const displayStatus = () => { - let status = stakeAccount.displayState(); - if (status !== "Delegated") { + // TODO check epoch + let status = TYPE_NAMES[stakeAccountType]; + if (stakeAccountType !== "delegated") { status = "Not delegated"; } return status; }; + let voterPubkey, activationEpoch, deactivationEpoch; + if ("accountType" in stakeAccount) { + const delegation = stakeAccount?.stake?.delegation; + if (delegation) { + voterPubkey = delegation.voterPubkey; + activationEpoch = delegation.isBootstrapStake() + ? "-" + : delegation.activationEpoch; + deactivationEpoch = delegation.isDeactivated() + ? delegation.deactivationEpoch + : "-"; + } + } else { + const delegation = stakeAccount?.stake?.delegation; + if (delegation) { + voterPubkey = delegation.voter; + activationEpoch = delegation.activationEpoch.eq(MAX_EPOCH) + ? "-" + : delegation.activationEpoch.toString(); + deactivationEpoch = delegation.deactivationEpoch.eq(MAX_EPOCH) + ? "-" + : delegation.deactivationEpoch.toString(); + } + } + + const { stake } = stakeAccount; return (
@@ -124,33 +190,23 @@ function DelegationCard({ stakeAccount }: { stakeAccount: StakeAccount }) { - - Delegated Vote Address - -
- - + {voterPubkey && ( + + Delegated Vote Address + +
+ + + )} Activation Epoch - - {stake.delegation.isBootstrapStake() - ? "-" - : stake.delegation.activationEpoch} - + {activationEpoch} Deactivation Epoch - - {stake.delegation.isDeactivated() - ? stake.delegation.deactivationEpoch - : "-"} - + {deactivationEpoch} )} @@ -159,7 +215,7 @@ function DelegationCard({ stakeAccount }: { stakeAccount: StakeAccount }) { ); } -function AuthoritiesCard({ meta }: { meta: Meta }) { +function AuthoritiesCard({ meta }: { meta: Meta | StakeMeta }) { const hasLockup = meta && meta.lockup.unixTimestamp > 0; return (
diff --git a/explorer/src/components/account/UnknownAccountCard.tsx b/explorer/src/components/account/UnknownAccountCard.tsx index e0ff9f3ce8..115f3cd143 100644 --- a/explorer/src/components/account/UnknownAccountCard.tsx +++ b/explorer/src/components/account/UnknownAccountCard.tsx @@ -28,7 +28,7 @@ export function UnknownAccountCard({ account }: { account: Account }) { - {details && ( + {details?.space !== undefined && ( Data (Bytes) {details.space} diff --git a/explorer/src/components/instruction/token/TokenDetailsCard.tsx b/explorer/src/components/instruction/token/TokenDetailsCard.tsx index 385401c1c4..5e20853b31 100644 --- a/explorer/src/components/instruction/token/TokenDetailsCard.tsx +++ b/explorer/src/components/instruction/token/TokenDetailsCard.tsx @@ -10,7 +10,8 @@ import { import { UnknownDetailsCard } from "../UnknownDetailsCard"; import { InstructionCard } from "../InstructionCard"; import { Address } from "components/common/Address"; -import { ParsedInstructionInfo, IX_STRUCTS } from "./types"; +import { IX_STRUCTS, TokenInstructionType } from "./types"; +import { ParsedInfo } from "validators"; const IX_TITLES = { initializeMint: "Initialize Mint", @@ -34,8 +35,9 @@ type DetailsProps = { export function TokenDetailsCard(props: DetailsProps) { try { - const parsed = coerce(props.ix.parsed, ParsedInstructionInfo); - const { type, info } = parsed; + const parsed = coerce(props.ix.parsed, ParsedInfo); + const { type: rawType, info } = parsed; + const type = coerce(rawType, TokenInstructionType); const title = `Token: ${IX_TITLES[type]}`; const coerced = coerce(info, IX_STRUCTS[type] as any); return ; diff --git a/explorer/src/components/instruction/token/types.ts b/explorer/src/components/instruction/token/types.ts index a16939cf60..b7bcb47311 100644 --- a/explorer/src/components/instruction/token/types.ts +++ b/explorer/src/components/instruction/token/types.ts @@ -1,21 +1,12 @@ import { enums, object, - any, StructType, - coercion, - struct, number, optional, array, } from "superstruct"; -import { PublicKey } from "@solana/web3.js"; - -const PubkeyValue = struct("Pubkey", (value) => value instanceof PublicKey); -const Pubkey = coercion(PubkeyValue, (value) => { - if (typeof value === "string") return new PublicKey(value); - throw new Error("invalid pubkey"); -}); +import { Pubkey } from "validators/pubkey"; const InitializeMint = object({ mint: Pubkey, @@ -95,8 +86,8 @@ const CloseAccount = object({ signers: optional(array(Pubkey)), }); -type TokenInstructionType = StructType; -const TokenInstructionType = enums([ +export type TokenInstructionType = StructType; +export const TokenInstructionType = enums([ "initializeMint", "initializeAccount", "initializeMultisig", @@ -121,9 +112,3 @@ export const IX_STRUCTS = { burn: Burn, closeAccount: CloseAccount, }; - -export type ParsedInstructionInfo = StructType; -export const ParsedInstructionInfo = object({ - type: TokenInstructionType, - info: any(), -}); diff --git a/explorer/src/pages/AccountDetailsPage.tsx b/explorer/src/pages/AccountDetailsPage.tsx index 3b14fbe348..2627ccaf59 100644 --- a/explorer/src/pages/AccountDetailsPage.tsx +++ b/explorer/src/pages/AccountDetailsPage.tsx @@ -68,7 +68,22 @@ function InfoSection({ pubkey }: { pubkey: PublicKey }) { const owner = info.details?.owner; const data = info.details?.data; if (data && owner && owner.equals(StakeProgram.programId)) { - return ; + let stakeAccountType, stakeAccount; + if ("accountType" in data) { + stakeAccount = data; + stakeAccountType = data.accountType as any; + } else { + stakeAccount = data.info; + stakeAccountType = data.type; + } + + return ( + + ); } else { return ; } diff --git a/explorer/src/providers/accounts/index.tsx b/explorer/src/providers/accounts/index.tsx index 45a35f0f41..1b58fa897b 100644 --- a/explorer/src/providers/accounts/index.tsx +++ b/explorer/src/providers/accounts/index.tsx @@ -1,9 +1,12 @@ import React from "react"; -import { StakeAccount } from "solana-sdk-wasm"; +import { StakeAccount as StakeAccountWasm } from "solana-sdk-wasm"; import { PublicKey, Connection, StakeProgram } from "@solana/web3.js"; import { useCluster } from "../cluster"; import { HistoryProvider } from "./history"; import { TokensProvider } from "./tokens"; +import { coerce } from "superstruct"; +import { ParsedInfo } from "validators"; +import { StakeAccount } from "./types"; export { useAccountHistory } from "./history"; export enum FetchStatus { @@ -15,8 +18,8 @@ export enum FetchStatus { export interface Details { executable: boolean; owner: PublicKey; - space: number; - data?: StakeAccount; + space?: number; + data?: StakeAccount | StakeAccountWasm; } export interface Account { @@ -156,18 +159,30 @@ async function fetchAccountInfo( let details; let lamports; try { - const result = await new Connection(url, "recent").getAccountInfo(pubkey); + const result = ( + await new Connection(url, "single").getParsedAccountInfo(pubkey) + ).value; if (result === null) { lamports = 0; } else { lamports = result.lamports; - let data = undefined; // Only save data in memory if we can decode it + let space; + if (!("parsed" in result.data)) { + space = result.data.length; + } + + let data; if (result.owner.equals(StakeProgram.programId)) { try { - const wasm = await import("solana-sdk-wasm"); - data = wasm.StakeAccount.fromAccountData(result.data); + if ("parsed" in result.data) { + const info = coerce(result.data.parsed, ParsedInfo); + data = coerce(info, StakeAccount); + } else { + const wasm = await import("solana-sdk-wasm"); + data = wasm.StakeAccount.fromAccountData(result.data); + } } catch (err) { console.error("Unexpected error loading wasm", err); // TODO store error state in Account info @@ -175,7 +190,7 @@ async function fetchAccountInfo( } details = { - space: result.data.length, + space, executable: result.executable, owner: result.owner, data, diff --git a/explorer/src/providers/accounts/types.ts b/explorer/src/providers/accounts/types.ts new file mode 100644 index 0000000000..6dae5ab143 --- /dev/null +++ b/explorer/src/providers/accounts/types.ts @@ -0,0 +1,48 @@ +import { object, StructType, number, optional, enums } from "superstruct"; +import { Pubkey } from "validators/pubkey"; +import { BigNum } from "validators/bignum"; + +export type StakeAccountType = StructType; +export const StakeAccountType = enums([ + "uninitialized", + "initialized", + "delegated", + "rewardsPool", +]); + +export type StakeMeta = StructType; +export const StakeMeta = object({ + rentExemptReserve: BigNum, + authorized: object({ + staker: Pubkey, + withdrawer: Pubkey, + }), + lockup: object({ + unixTimestamp: number(), + epoch: number(), + custodian: Pubkey, + }), +}); + +export type StakeAccountInfo = StructType; +export const StakeAccountInfo = object({ + meta: StakeMeta, + stake: optional( + object({ + delegation: object({ + voter: Pubkey, + stake: BigNum, + activationEpoch: BigNum, + deactivationEpoch: BigNum, + warmupCooldownRate: number(), + }), + creditsObserved: number(), + }) + ), +}); + +export type StakeAccount = StructType; +export const StakeAccount = object({ + type: StakeAccountType, + info: StakeAccountInfo, +}); diff --git a/explorer/src/utils/index.tsx b/explorer/src/utils/index.tsx index e7fb806bfb..e2997412ac 100644 --- a/explorer/src/utils/index.tsx +++ b/explorer/src/utils/index.tsx @@ -1,10 +1,12 @@ -import React from "react"; -import { LAMPORTS_PER_SOL } from "@solana/web3.js"; +import React, { ReactNode } from "react"; +import BN from "bn.js"; import { HumanizeDuration, HumanizeDurationLanguage, } from "humanize-duration-ts"; -import { ReactNode } from "react"; + +// Switch to web3 constant when web3 updates superstruct +export const LAMPORTS_PER_SOL = 1000000000; export const NUM_TICKS_PER_SECOND = 160; export const DEFAULT_TICKS_PER_SLOT = 64; @@ -16,11 +18,31 @@ export function assertUnreachable(x: never): never { throw new Error("Unreachable!"); } +export function lamportsToSol(lamports: number | BN): number { + if (typeof lamports === "number") { + return Math.abs(lamports) / LAMPORTS_PER_SOL; + } + + let signMultiplier = 1; + if (lamports.isNeg()) { + signMultiplier = -1; + } + + const absLamports = lamports.abs(); + const lamportsString = absLamports.toString(10).padStart(10, "0"); + const splitIndex = lamportsString.length - 9; + const solString = + lamportsString.slice(0, splitIndex) + + "." + + lamportsString.slice(splitIndex); + return signMultiplier * parseFloat(solString); +} + export function lamportsToSolString( - lamports: number, + lamports: number | BN, maximumFractionDigits: number = 9 ): ReactNode { - const sol = Math.abs(lamports) / LAMPORTS_PER_SOL; + const sol = lamportsToSol(lamports); return ( <> ◎ diff --git a/explorer/src/validators/bignum.ts b/explorer/src/validators/bignum.ts new file mode 100644 index 0000000000..14d201d041 --- /dev/null +++ b/explorer/src/validators/bignum.ts @@ -0,0 +1,8 @@ +import { coercion, struct, Struct } from "superstruct"; +import BN from "bn.js"; + +const BigNumValue = struct("BigNum", (value) => value instanceof BN); +export const BigNum: Struct = coercion(BigNumValue, (value) => { + if (typeof value === "string") return new BN(value, 10); + throw new Error("invalid big num"); +}); diff --git a/explorer/src/validators/index.ts b/explorer/src/validators/index.ts new file mode 100644 index 0000000000..fc8ecb242a --- /dev/null +++ b/explorer/src/validators/index.ts @@ -0,0 +1,7 @@ +import { object, any, StructType, string } from "superstruct"; + +export type ParsedInfo = StructType; +export const ParsedInfo = object({ + type: string(), + info: any(), +}); diff --git a/explorer/src/validators/pubkey.ts b/explorer/src/validators/pubkey.ts new file mode 100644 index 0000000000..b4a19fee32 --- /dev/null +++ b/explorer/src/validators/pubkey.ts @@ -0,0 +1,8 @@ +import { coercion, struct, Struct } from "superstruct"; +import { PublicKey } from "@solana/web3.js"; + +const PubkeyValue = struct("Pubkey", (value) => value instanceof PublicKey); +export const Pubkey: Struct = coercion(PubkeyValue, (value) => { + if (typeof value === "string") return new PublicKey(value); + throw new Error("invalid pubkey"); +}); diff --git a/explorer/wasm/pkg/package.json b/explorer/wasm/pkg/package.json index f0ea2ed836..be4838bad3 100644 --- a/explorer/wasm/pkg/package.json +++ b/explorer/wasm/pkg/package.json @@ -4,7 +4,7 @@ "Solana Maintainers " ], "description": "Solana SDK Wasm", - "version": "1.2.0", + "version": "1.4.0", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/explorer/wasm/pkg/solana_sdk_wasm.d.ts b/explorer/wasm/pkg/solana_sdk_wasm.d.ts index fc17502628..510281750e 100644 --- a/explorer/wasm/pkg/solana_sdk_wasm.d.ts +++ b/explorer/wasm/pkg/solana_sdk_wasm.d.ts @@ -124,7 +124,7 @@ export class StakeAccount { /** * @returns {string} */ - displayState(): string; + accountType(): string; /** * @returns {Meta | undefined} */ diff --git a/explorer/wasm/pkg/solana_sdk_wasm_bg.d.ts b/explorer/wasm/pkg/solana_sdk_wasm_bg.d.ts index 32ac915c54..a646f9608a 100644 --- a/explorer/wasm/pkg/solana_sdk_wasm_bg.d.ts +++ b/explorer/wasm/pkg/solana_sdk_wasm_bg.d.ts @@ -9,7 +9,7 @@ export function __wbg_set_stakeaccount_stake(a: number, b: number): void; export function __wbg_get_stakeaccount_state(a: number): number; export function __wbg_set_stakeaccount_state(a: number, b: number): void; export function stakeaccount_fromAccountData(a: number, b: number): number; -export function stakeaccount_displayState(a: number, b: number): void; +export function stakeaccount_accountType(a: number, b: number): void; export function __wbg_lockup_free(a: number): void; export function __wbg_get_lockup_custodian(a: number): number; export function __wbg_set_lockup_custodian(a: number, b: number): void; diff --git a/explorer/wasm/pkg/solana_sdk_wasm_bg.js b/explorer/wasm/pkg/solana_sdk_wasm_bg.js index 2fb23b7893..27ed5fbdbc 100644 --- a/explorer/wasm/pkg/solana_sdk_wasm_bg.js +++ b/explorer/wasm/pkg/solana_sdk_wasm_bg.js @@ -456,9 +456,9 @@ export class StakeAccount { /** * @returns {string} */ - displayState() { + accountType() { try { - wasm.stakeaccount_displayState(8, this.ptr); + wasm.stakeaccount_accountType(8, this.ptr); var r0 = getInt32Memory0()[8 / 4 + 0]; var r1 = getInt32Memory0()[8 / 4 + 1]; return getStringFromWasm0(r0, r1); diff --git a/explorer/wasm/pkg/solana_sdk_wasm_bg.wasm b/explorer/wasm/pkg/solana_sdk_wasm_bg.wasm index 588775629cfa58fca39d6671400f5b02a10dcd06..7f2e3619531b3485085e9e81c3c6aba5f6bfa26b 100644 GIT binary patch literal 72975 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≪k;FSBSyWp||7k|Y) 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 wOS}0-3 String { + #[wasm_bindgen(js_name = accountType)] + pub fn account_type(&self) -> String { match self.state { - State::Uninitialized => "Uninitialized".to_string(), - State::Initialized => "Initialized".to_string(), - State::Delegated => "Delegated".to_string(), - State::RewardsPool => "RewardsPool".to_string(), + State::Uninitialized => "uninitialized".to_string(), + State::Initialized => "initialized".to_string(), + State::Delegated => "delegated".to_string(), + State::RewardsPool => "rewardsPool".to_string(), } } }