Class: SolanaWriter
Defined in: solana-client/src/writer.ts:108
Solana implementation of OvercastWriter.
Each method maps an Overcast domain object onto the corresponding on-chain
instruction and returns the prepared transaction. PDAs are derived locally
via the ./pda helpers (mirroring the program's seeds = [..]), and the
per-asset SPL token program is resolved by reading each mint's owner so both
legacy Token and Token-2022 assets are handled. The protocol's claim mints
use the permanent-delegate extension and are therefore always Token-2022.
Domain types carry asset / account references as base58 Bytes32 strings;
offers and options are content-addressed, so MarketOption.collateralOffer /
settlementOffer are the 32-byte offer ids whose bytes seed the PDAs.
The signer / fee payer is taken from the program's provider wallet. This is the write side only; on-chain reads live in SolanaReader.
Implements
OvercastWriter<SolanaLayer,SolanaTx>
Constructors
Constructor
new SolanaWriter(program): SolanaWriter;
Defined in: solana-client/src/writer.ts:109
Parameters
| Parameter | Type |
|---|---|
program | Program<OvercastCore> |
Returns
SolanaWriter
Methods
borrowCollateral()
borrowCollateral(
option,
amount,
metadata?): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:750
borrows collateral out of the option's escrow into the taker's own
collateral token account, tracking an outstanding-borrow debt on the
option. Only permitted while option.details.borrowAllowed is set and
before the option's exercise window starts
(option.details.startTimestamp); the settlement layer additionally
decides whether the borrow is allowed. Repayment is trusted, not
enforced on chain — only take a borrow-enabled option from a taker you
trust to honor it. The option is neither exercisable nor redeemable
until all borrowed collateral is repaid. The taker must sign this
transaction themselves (not delegable).
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | - |
amount | bigint | native (smallest-unit) amount of option.details.collateralAsset to borrow. |
metadata | Metadata | opaque settlement-layer metadata, forwarded to the layer's borrow check verbatim (see exerciseOption). Defaults to empty. |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.borrowCollateral
burnExerciseClaims()
burnExerciseClaims(option, holder): Promise<Transaction>;
Defined in: solana-client/src/writer.ts:605
Burns the exercise claims holder still has left on an expired option,
writing off the entire balance of their Token-2022 claim ATA in one call.
Solana-specific: like closeOptionAccounts this is account cleanup with no counterpart in the chain-agnostic OvercastWriter, so it isn't part of that interface — and being outside it, returns the bare transaction rather than the TxStep list every interface method does. The two go together — an exercise claim mint can only be closed at zero supply, so every remaining holder's claims must be burned before the option's accounts can be reclaimed.
Permissionless, and notably it does not need the holder's signature: the
mint's permanent delegate is the protocol state, so the program burns on
the holder's behalf and only the fee payer signs. What bounds it instead is
time — the program requires the option to be past details.endTimestamp,
so unexercised claims can't be destroyed while they are still worth
something. Burning zero is a no-op on chain rather than an error.
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | the option whose exercise claims to burn; must match the on-chain, content-addressed option exactly. |
holder | Bytes32 | the account whose claims are burned. Its claim ATA must exist — the address the protocol mints claims to (see matchOffer / exerciseOption); claims parked in a non-ATA token account are out of reach here. |
Returns
Promise<Transaction>
cancelOffer()
cancelOffer(offer, operation?): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:160
cancels an open offer, refunding its escrowed collateral/premium to the creator's deposit vault
Parameters
| Parameter | Type | Description |
|---|---|---|
offer | Offer | the offer to close (must match the on-chain, content-addressed offer exactly). |
operation? | SignedOperation | delegated authorization by the offer's maker; the operation must have been signed over this offer's id. |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.cancelOffer
closeOptionAccounts()
closeOptionAccounts(option): Promise<Transaction>;
Defined in: solana-client/src/writer.ts:663
Closes every account a fully wound-down option leaves behind: the option itself, its two offers, their offer escrows, the option-scoped collateral / settlement escrows and both claim mints. Rent goes back to whoever funded each account — the offer PDAs and their escrows to their respective offer creators, everything the match created to the wallet that submitted matchOffer.
Solana-specific: this is account-rent cleanup with no counterpart in the chain-agnostic OvercastWriter, so it isn't part of that interface.
Permissionless — no party authorizes it and only the fee payer signs, hence
no operation variant. The token programs reject closing a non-empty
account or a mint with live supply, so the call only succeeds once every
escrow is drained and both claim mints are at zero supply (burn any
residual exercise claims first); until then it fails and changes nothing.
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | the option to clean up; must match the on-chain, content-addressed option exactly. |
Returns
Promise<Transaction>
createOffer()
createOffer(offer, operation?): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:111
creates a new offer
Parameters
| Parameter | Type | Description |
|---|---|---|
offer | Offer | - |
operation? | SignedOperation | delegated authorization by the offer's creator; the operation must have been signed over this exact offer. |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.createOffer
deposit()
deposit(deposit): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:853
deposits funds into the depositor's protocol escrow vault
The one operation that is routinely more than one transaction: where the
chain gates the pull on a standing allowance (ERC-20 on EVM), the returned
list is [approve, deposit] — the approval for exactly deposit.amount,
omitted when the existing allowance already covers it. See TxStep.
Parameters
| Parameter | Type | Description |
|---|---|---|
deposit | DepositParams | - |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.deposit
exerciseOption()
exerciseOption(
option,
amount,
params?): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:365
params.settlement is forwarded as the instruction's remaining_accounts,
which core hands verbatim to the layer's can_exercise CPI — see
SolanaSettlementContext for the accounts each layer expects.
Parameters
| Parameter | Type |
|---|---|
option | MarketOption |
amount | bigint |
params | SettlementParams<SolanaLayer> |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.exerciseOption
matchOffer()
matchOffer(settlementOffer, collateralOffer): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:207
matches settlement and collateral offer
Parameters
| Parameter | Type | Description |
|---|---|---|
settlementOffer | Offer | - |
collateralOffer | Offer | - |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.matchOffer
redeemOption()
redeemOption(
option,
amount,
params?): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:472
params.settlement is not forwarded here: redemption is the option's
unwind, so neither shipped layer reads accounts on can_redeem — each burns
claims for a pro-rata share of the escrows, consulting no oracle. A layer
whose payout split did depend on a price would need it wired to
remainingAccounts exactly as exerciseOption does.
Parameters
| Parameter | Type |
|---|---|
option | MarketOption |
amount | bigint |
params | SettlementParams<SolanaLayer> |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.redeemOption
removeAuthorizedKey()
removeAuthorizedKey(key): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:961
revokes a key previously authorized via setAuthorizedKey, closing
its signing-key record (the rent is refunded to the wallet). Operations
signed with key are rejected afterwards. The wallet must sign this
transaction itself.
Parameters
| Parameter | Type | Description |
|---|---|---|
key | Bytes32 | the public key to deauthorize. |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.removeAuthorizedKey
repayCollateral()
repayCollateral(option, amount): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:806
repays previously borrowed collateral back into the option's escrow, reducing the outstanding-borrow debt tracked on the option. Permissionless — any signer holding the collateral asset may repay on the taker's behalf; the repaying wallet must sign this transaction itself.
Parameters
| Parameter | Type | Description |
|---|---|---|
option | MarketOption | - |
amount | bigint | native (smallest-unit) amount of option.details.collateralAsset to repay; must not exceed the option's current outstanding borrow. |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.repayCollateral
setAuthorizedKey()
setAuthorizedKey(key, permissions): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:930
authorizes key to sign SignedOperations on the calling wallet's
behalf. Registers a signing-key record owned by the wallet; thereafter an
operator may submit that wallet's delegable calls (createCollateralOffer,
createSettlementOffer, exerciseOption) by presenting an operation signed
with key. The wallet must sign this transaction itself — you can only
authorize keys for yourself.
Parameters
| Parameter | Type | Description |
|---|---|---|
key | Bytes32 | the public key to authorize as a signer for this wallet. |
permissions | number | the permissions bitmap - defaults to 0xFFFF granting all permissions. Build the bitmap with buildPermissionsBitmap |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.setAuthorizedKey
withdraw()
withdraw(withdraw, signedOperation?): Promise<Transaction[]>;
Defined in: solana-client/src/writer.ts:887
withdraws funds from the withdrawer's protocol escrow vault
Parameters
| Parameter | Type | Description |
|---|---|---|
withdraw | WithdrawParams | - |
signedOperation? | SignedOperation | - |
Returns
Promise<Transaction[]>
Implementation of
OvercastWriter.withdraw