Class: SolanaReader
Defined in: solana-client/src/reader.ts:48
Solana implementation of OvercastReader: the read-only side of the
protocol. It needs only an RPC Connection (no wallet), so it serves
read-only clients too. PDAs are derived locally via the get*Pda helpers,
mirroring the program's seeds = [..].
Vault balances live in per-user, per-mint protocol escrow token accounts; the per-asset SPL token program is resolved by reading each mint's owner so both legacy Token and Token-2022 assets are handled. An option's two claim mints use the permanent-delegate extension and are therefore always Token-2022.
Implements
OvercastReader
Constructors
Constructor
new SolanaReader(program, feeHookProgramId?): SolanaReader;
Defined in: solana-client/src/reader.ts:60
The Anchor program is used purely for reads: deserializing the content-addressed offer / option accounts via its account coder. Its provider only needs a connection (no wallet), so this still serves read-only clients. Balances and claim supplies go through the raw Connection / SPL-token helpers below.
Parameters
| Parameter | Type | Default value |
|---|---|---|
program | Program<OvercastCore> | undefined |
feeHookProgramId | string | FEE_HOOK_PROGRAM_ID |
Returns
SolanaReader
Properties
connection
readonly connection: Connection;
Defined in: solana-client/src/reader.ts:49
hookProgram
readonly hookProgram: Program<OvercastFeeHook>;
Defined in: solana-client/src/reader.ts:51
programId
readonly programId: PublicKey;
Defined in: solana-client/src/reader.ts:50
Methods
balance()
balance(user, asset): Promise<bigint>;
Defined in: solana-client/src/reader.ts:122
Gets the current balance for an asset in the protocols vault
Parameters
| Parameter | Type |
|---|---|
user | Bytes32 |
asset | { address: string; cashLike?: boolean; chain?: string; coinGeckoId?: string; decimals?: number; domain?: number; lastKnownPriceUsd?: number; logoUrl?: string; name?: string; rwa?: boolean; symbol?: string; volatility?: number; } |
asset.address | string |
asset.cashLike? | boolean |
asset.chain? | string |
asset.coinGeckoId? | string |
asset.decimals? | number |
asset.domain? | number |
asset.lastKnownPriceUsd? | number |
asset.logoUrl? | string |
asset.name? | string |
asset.rwa? | boolean |
asset.symbol? | string |
asset.volatility? | number |
Returns
Promise<bigint>
Implementation of
OvercastReader.balance
borrowedCollateral()
borrowedCollateral(option): Promise<bigint>;
Defined in: solana-client/src/reader.ts:189
Outstanding borrow, read off the option's account — the one field on it that its terms do not already fix. A missing account reads as zero.
Parameters
| Parameter | Type |
|---|---|
option | MarketOption |
Returns
Promise<bigint>
Implementation of
OvercastReader.borrowedCollateral
exerciseClaims()
exerciseClaims(option, user): Promise<bigint>;
Defined in: solana-client/src/reader.ts:169
returns the user balance of exercise claims for the given option
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | - |
user | Bytes32 | - |
Returns
Promise<bigint>
Implementation of
OvercastReader.exerciseClaims
exerciseClaimsSupply()
exerciseClaimsSupply(option): Promise<bigint>;
Defined in: solana-client/src/reader.ts:154
Returns the total supply of exercise claims for the given option
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | - |
Returns
Promise<bigint>
Implementation of
OvercastReader.exerciseClaimsSupply
getOptionBalances()
getOptionBalances(option): Promise<{
collateral: bigint;
settlement: bigint;
}>;
Defined in: solana-client/src/reader.ts:89
Looks up how much collateral / settlement are locked in the option's escrow.
Takes the whole option for the same reason optionExists does. A missing option reads as zeros.
Parameters
| Parameter | Type |
|---|---|
option | MarketOption |
Returns
Promise<{
collateral: bigint;
settlement: bigint;
}>
Implementation of
OvercastReader.getOptionBalances
getOptionFees()
getOptionFees(option): Promise<bigint>;
Defined in: solana-client/src/reader.ts:194
Calculates the fee that will be deduced on option creation. This is useful to know, what premium the end-user will actually receive. Option buyer/taker pays premium, fee is deduced from that. The leftover amount is paid to the maker of the option / the user. The fee is always denominated in the premium asset.
Parameters
| Parameter | Type |
|---|---|
option | MarketOption |
Returns
Promise<bigint>
fee in premium
Implementation of
OvercastReader.getOptionFees
getProtocolState()
getProtocolState(): Promise<ProtocolState>;
Defined in: solana-client/src/reader.ts:84
The protocol's global state, read from the singleton ProtocolState PDA.
Its seeds carry no user input (getProtocolStatePda takes only the program
id), so the address is fixed per deployment — one account, one fetch, no
scan. A missing account means the program at this.programId was never
initialized, which is a misconfiguration rather than an absent record, so
this uses fetch and lets Anchor throw instead of returning null.
Returns
Promise<ProtocolState>
Implementation of
OvercastReader.getProtocolState
offerExists()
offerExists(id): Promise<boolean>;
Defined in: solana-client/src/reader.ts:230
Whether an offer with this content-address Bytes32 exists on-chain.
Existence is all the chain has left to say: an offer is stored under the
hash of its own terms, so a caller holding the id that resolves here
already holds — or can fetch from the curated backend
(app.api.getOffer) — every term it was created with.
Parameters
| Parameter | Type |
|---|---|
id | Bytes32 |
Returns
Promise<boolean>
Implementation of
OvercastReader.offerExists
optionExists()
optionExists(option): Promise<boolean>;
Defined in: solana-client/src/reader.ts:181
Whether the option's account exists.
The account is a PDA seeded with the option's (collateral, settlement)
offer id pair, so the terms reach it directly — no scan, and no need for the
option's own content-address id, which is not what the account is keyed by.
Parameters
| Parameter | Type |
|---|---|
option | MarketOption |
Returns
Promise<boolean>
Implementation of
OvercastReader.optionExists
redeemClaims()
redeemClaims(option, user): Promise<bigint>;
Defined in: solana-client/src/reader.ts:164
returns the user balance of redeem claims for the given option
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | - |
user | Bytes32 | - |
Returns
Promise<bigint>
Implementation of
OvercastReader.redeemClaims
redeemClaimsSupply()
redeemClaimsSupply(option): Promise<bigint>;
Defined in: solana-client/src/reader.ts:159
Returns the total supply of redeem claims for the given option
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | - |
Returns
Promise<bigint>
Implementation of
OvercastReader.redeemClaimsSupply
settlementLayerKind()
settlementLayerKind(settlementLayer): Promise<KnownSettlementLayer>;
Defined in: solana-client/src/reader.ts:237
Classify a settlement-layer config (OptionDetails.settlementLayer) into its KnownSettlementLayer kind by inspecting the on-chain config account it points at.
An option commits to a settlement layer as a single opaque config
Bytes32; this resolves that id to the abstract kind ("physical" /
"oracle") without a caller needing to know the chain's layer programs.
Throws if the account doesn't exist or isn't a recognized layer config.
Parameters
| Parameter | Type |
|---|---|
settlementLayer | Bytes32 |
Returns
Promise<KnownSettlementLayer>
Implementation of
OvercastReader.settlementLayerKind