Solana Blockchain 6.1.3

Latest

4 September 2026

This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.

WITHDRAWALSREFUNDSDOCUMENTATIONDIAGNOSTICSRPCCONFIGURATIONSOLANASOL

Solana Blockchain v6.1.3

Release Date: September 4, 2026 Tags: WITHDRAWALS, REFUNDS, DOCUMENTATION, DIAGNOSTICS, RPC, CONFIGURATION, SOLANA, SOL

Overview

A withdrawal-safety release, on top of the documentation correction it started as. Two things changed in the addon's code:

  • A send call that threw was read as "never sent" and refunded. The handler already parked a transaction it had broadcast but could not confirm as TIMEOUT; the gap was the send call itself. A timeout or a dropped connection on sendRawTransaction threw before that protection began, so the row was marked FAILED and the customer refunded while the transaction could still land inside the blockhash's validity.
  • A full-balance withdrawal paid the recipient less than the record said. When the debited amount left nothing on-chain for the network fee, the send was silently reduced by a few thousand lamports and a warning logged. It now fails and refunds instead.

The documentation half stands as written for 6.1.3 before these fixes were added: 6.1.2 made SOL_<NETWORK>_RPC live, and four documentation pages plus the admin requirements screen went on telling operators there was no way to point Solana at a paid RPC. They no longer do.

Requires Core v6.7.6 and Ecosystem v6.5.0. Core carries the reject door that refuses TIMEOUT rows; Ecosystem carries the shared outcome-classification and fee-tracker helpers this addon imports.

Update Instructions

# 1. Update the addon in Admin → System → Extensions
# 2. Restart the backend
pnpm updator

No schema change, no seeder, no .env change required. Update Core and Ecosystem in the same window. The corrected pages are served from the documentation site and are already current.


Upgrade Notes

If you concluded Solana could not use your own RPC, it can

Set SOL_<NETWORK>_RPC — a comma-separated list, with SOL_<NETWORK>_RPC_FALLBACK as an optional second — and restart the backend. Leave it unset and the public cluster is used exactly as before.

The key is named for the cluster the service resolved to, not the value you typed. SOL_NETWORK="mainnet" reads SOL_MAINNET_RPC and "testnet" reads SOL_TESTNET_RPC; every other value, including unset and the plausible-looking mainnet-beta, resolves to devnet and reads SOL_DEVNET_RPC. So a wrong SOL_NETWORK puts a paid endpoint in a key nothing reads — the requirements screen now shows which key is actually in play.

Order in the list is not priority. The endpoints form a failover pool that prefers one it has never tried and then the fastest, so every entry has to be a healthy endpoint on that cluster; one bad URL is an endpoint that will be dialled, not harmless padding.

Expect TIMEOUT rows where a timed-out send used to be refunded

A TIMEOUT row means the transaction was sent and its outcome could not be read. Look the signature up on a Solana explorer: if it landed, set the row complete with its hash; if it did not, reject it once the blockhash has expired and the explorer shows nothing. Neither the queue nor Core 6.7.6's admin reject door refunds it on its own.


Fixed

  • Fixed — a send call that throws asks the cluster for the signature's status (the signature is known before the send). Accepted means the withdrawal continues; a definitive rejection such as a simulation error or insufficient lamports means FAILED and a refund; no answer while the blockhash is still valid means TIMEOUT.
  • Fixed — a withdrawal whose debited amount leaves nothing on-chain for the network fee fails with a message naming both figures and is refunded, instead of being sent short. Configure a non-zero minimum fee on the SOL token so a full-balance withdrawal always leaves headroom.
  • Fixed — the network fee a withdrawal burns from the customer's own address is recorded on the row and debited from the address's per-chain tracker, so a later "withdraw everything" no longer fails against a tracker that never saw the fee leave.

Changed

Four pages that said Solana had no custom RPC

  • Changed the Network and RPC guide's "Why there is no custom RPC" section into a description of how to set one, including which key the cluster fall-through causes to be read and why order in the list is not priority.
  • Changed the environment reference, which listed SOL_MAINNET_RPC, SOL_TESTNET_RPC and SOL_DEVNET_RPC under "read by nothing that matters", to document them as settings and to explain that a wrong SOL_NETWORK costs twice — the install runs on devnet and the paid endpoint sits in an unread key.
  • Changed the overview's warning from "there is no custom RPC endpoint" to what is true: the public cluster is the default and a shared quota, and SOL_<NETWORK>_RPC is what replaces it.
  • Changed the troubleshooting entry for 429s and slowness to check that key first, and added a dedicated endpoint to the list of remedies alongside reducing the working set and lengthening the scan interval.
  • Changed the Ecosystem environment reference and blockchains guide, which carried the same claim from the other side.

The admin requirements screen

  • Changed the SOL_<NETWORK>_RPC row on Admin → Ecosystem → Blockchains → Requirements to describe the key as read rather than display-only, and to name the cluster the service resolved to — so an install that fell through to devnet is shown SOL_DEVNET_RPC, the key that is really consulted, instead of the one matching what was typed.
  • Changed the SOL_NETWORK and SOLANA_RPC_URL rows to stop saying the service always uses the public cluster endpoint.

Changed

Cores carved out for the platform's own sends

  • ChangedtransferSol now runs on a private core (sendSolWithKeypair) and handleSplTokenWithdrawal on sendSplFromWallet, both exported for Core 6.7.6's pool-backing engine to send from the treasury's own address without a withdrawal row. The handlers' row writes, order and errors are unchanged and pinned by a write-order test. Also new: sendSolFromMaster (the master keypair as a source of SOL, reserve-checked by Core), getSplTokenBalance (throws on an outage rather than answering zero), and a decodeSecretKey that accepts a 32-byte seed through Keypair.fromSeed instead of zero-padding it into an invalid 64-byte key. Requires Core 6.7.6 and Ecosystem 6.5.0.