- XDR has been updated to support Protocol 26.
- Simulation now supports Protocol 26 transactions.
- Ensure we strip NUL bytes before
CString::new(#632).
- Transaction insertion is batched to avoid SQLite limit (#631).
- Backfill always ends at checkpoint aligned ledger (#610).
- Backfill now works when your datastore's ledgers do not live in a subfolder (#639).
- Added
--backfillconfiguration parameter providing synchronous backfilling ofHISTORY_RETENTION_WINDOWledgers to the local DB prior to RPC starting. For one week of ledgers (approximately 150Gb), this can be expected to complete in under three hours and use <3 Gb of memory (less than core itself). To use this, one must enable a datastore andSERVE_LEDGERS_FROM_DATASTORE, which also enablesgetLedger(#571).
- Fee stats retention windows (
classic-fee-stats-retention-windowandsoroban-fee-stats-retention-window) are now capped at 1000 ledgers. Previously, very large values caused O(n^2) startup time (#630).
- Fixes a race condition in
getTransactionin which theLatestLedgerfield would sometimes be earlier than the transaction'sLedgerfield (#619). simulateTransactionwill now reject smart contract transaction requests that contain a memo (#588).getEventsperformance improvements (#578).- Fixes a bug where the
AfterJSONfield ofsimulateTransactiondid not reflect the actual ledger entry (#603). - Misc. bug fixes that improve stability (#599, #602, #605, #616, #624).
- Dependencies updated with security fixes.
- Add batched event inserts to avoid SQLite bind variable limit when a transaction contains more than 3K events (#608).
v25.0.0: Protocol 25
- The RPC client and schema definitions have been moved to the unified Stellar Go SDK. Please install them from there, instead:
go get -u github.com/stellar/go-stellar-sdk/clients/rpcclient
go get -u github.com/stellar/go-stellar-sdk/protocols/rpc- Expanded
getLatestLedgerendpoint to also returncloseTime,headerXdr, andmetadataXdr(#554). - Added
soroban-env-hostinfo toversioncommand (#550). - Added a new
--networkconfiguration parameter, allowing users to specify a default Stellar network (testnet,pubnet, orfuturenet) (#540, #543). - Simulation has been updated to support Protocol 25 (#548).
versioncommand now works consistently on MacOS (#550).- JSON-RPC methods now accept
params: {}(#551).
v24.0.0: Protocol 24
- Support for Protocol 24.
- Simulation will only work for transactions built for >= Protocol 23 (#522).
- The simulation library has been upgraded with bug fixes (#515).
This release includes a database migration. This migration may take up to an hour to build new indices with a 7-day retention window; this will depending on your hardware, so please deploy accordingly.
- The RPC's
Clientnow has a new methodLoadAccountwhich returns an SDK-compatibleAccountinterface for a public key (#481).
getLedgersperformance has been improved (#505).getEventsperformance has been drastically improved (#510).
simulateTransactionwould occasionally emit state changes that did not have atype(#506).
- Bump soroban-env lib to v23.0.1 (#499).
v23.0.0: Protocol 23 Release
- Support for Protocol 23, notably
TransactionMetaV4andLedgerCloseMetaV2, seestellar-xdr @ v23.0for the full protocol schema. - The
getLedgerEntryendpoint has been removed. This endpoint was already deprecated earlier in favor ofgetLedgerEntriesand is completely removed in this release. - The
pagingTokenfield ofgetEventsresults has been removed, use theidfield for individual events orcursorat the top level for pagination (#382). - The
snake_cased fields ofgetVersionInfohave been removed (commit_hash, etc.); prefer thecamelCased versions (#382). - Diagnostic events will no longer be present in the
getEventsstream (#4590).
- The
inSuccessfulContractCallfield ofgetEventsis now deprecated and will be removed in the next version (#4590).
- You can now use an external datastore as a source for
getLedgers(#437). - Transactions that have expired footprints will now auto-restore in their simulation result (#463).
- Added a top-level
"events"structure to thegetTransactionandgetTransactionsendpoint which breaks down events into disjointcontractEvents[Xdr|Json]andtransactionEvents[Xdr|Json](#455). - Added
"**"wildcard to thegetEventsendpoint, enabling flexible topic matching without manual padding. For example,["X", "**"]filter matches events with"X"as the first topic followed by any number of topics. The wildcard can be used only as the last or only topic (#419). - Added a field to
getLedgerEntriesresults, theextension[Xdr|Json]field representing theLedgerEntry's extension (#388). - Added support for non-root authorization to
simulateTransactionwith a new, optional parameterauthModewhich can beenforce,record, andrecord_allow_nonroot(#432). getEventsnow includes anopIndexfor each event (#383).- Added missing ledger range fields to
getEvents, namelyoldestLedger,latestLedgerCloseTime, andoldestLedgerCloseTimeto correspond to all other endpoints (#409). getLedgerEntriesnow uses RPC's internal Captive Core's high-performance HTTP server rather than storing entries locally in sqlite (#353).
- Event topic filters can now serialize and deserialize correctly (#427, #449).
- Fixed a potential scenario where
getLedgerswould crash with invalid parameters (#407). - Various scenarios where memory could leak have been fixed (#474, #472).
- The simulation library behind
simulateTransactionhas been updated to Protocol 23 (#484).
- The new top-level
"events"structure to thegetTransactionandgetTransactionsendpoint no longer has thediagnosticEvents[Xdr|Json]; prefer the top-level field instead as it will contain all of the diagnostic events that occurred in a transaction (#455).
- Auto-restoration for transactions that have expired footprints (#463).
- Support for Protocol 23.
- The
getLedgerEntryendpoint has been removed. This endpoint was already deprecated earlier in favor ofgetLedgerEntriesand is completely removed in this release. - Diagnostic events will no longer be present in the
getEventsstream (#4590). - The
inSuccessfulContractCallfield ofgetEventsis now deprecated and will be removed in the next version (#4590).
- Added a top-level
"events"structure to thegetTransactionandgetTransactionsendpoint which breaks down events into disjointdiagnosticEvents[Xdr|Json],contractEvents[Xdr|Json], andtransactionEvents[Xdr|Json](#455). - Added
"**"wildcard to thegetEventsendpoint, enabling flexible topic matching without manual padding. For example,["X", "**"]filter matches events with"X"as the first topic followed by any number of topics. The wildcard can be used only as the last or the only topic (#419). - Added a field to
getLedgerEntriesresults, theextension[Xdr|Json]field representing theLedgerEntry's extension (#388). - Added support for non-root authorization to
simulateTransactionwith a new, optional parameterauthModewhich can beenforce,record, andrecord_allow_nonroot(#432). getEventsnow includes anopIndexfor each event (#383).- Added missing ledger range fields to
getEvents, namelyoldestLedger,latestLedgerCloseTime, andoldestLedgerCloseTimeto correspond to all other endpoints (#409).
- Event topic filters can now serialize and deserialize correctly (#427, #449).
- Fixed a potential scenario where
getLedgerswould crash with invalid parameters (#407).
- Preserve field omission behavior of
simulateTransaction(#291).
- Add
CursorinGetEventsResponse. This tells the client until what ledger events are being queried. e.g.:startLEdger(inclusive) -endLedger(exclusive) - Limitation: getEvents are capped by 10K
LedgerScanLimitwhich means you can query events for 10K ledger at maximum for a given request. - Add
EndLedgerinGetEventsRequest. This provides finer control and clarity on the range of ledgers being queried. - Disk-Based Event Storage: Events are now stored on disk instead of in memory. For context, storing approximately 3 million events will require around 1.5 GB of disk space. This change enhances the scalability and can now support a larger retention window (~7 days) for events.
- Ledger Scanning Limitation: The getEvents RPC will now scan a maximum of
10,000ledgers per request. This limits the resource usage and ensures more predictable performance, especially for queries spanning large ledger ranges. - A migration process has been introduced to transition event storage from in-memory to disk-based storage.
- Add support for unpacked JSON responses of base64-encoded XDR fields via a new, optional parameter. When omitted, the behavior does not change and we encode fields as base64.
xdrFormat?: "" | "base64" | "json"getTransactiongetTransactionsgetLedgerEntrygetLedgerEntriesgetEventssendTransactionsimulateTransaction
There are new field names for the JSONified versions of XDR structures. Any field with an Xdr suffix (e.g., resultXdr in getTransaction()) will be replaced with one that has a Json suffix (e.g., resultJson) that is a JSON object verbosely and completely describing the XDR structure.
Certain XDR-encoded fields do not have an Xdr suffix, but those also have a *Json equivalent and are listed below:
- getEvents:
topic->topicJson,value->valueJson - getLedgerEntries:
key->keyJson,xdr->dataJson - getLedgerEntry:
xdr->entryJson - simulateTransaction:
transactionData,events,results.auth,restorePreamble.transactionData,stateChanges.key|before|afterall have aJsonsuffix, andresults.xdris nowresults.returnValueJson
- Improve performance of
getVersionInfoandgetNetwork(#198).
- Fix parsing of the
--log-formatparameter (#252)
- Transactions will now be stored in a database rather than in memory (#174).
You can opt-in to longer transaction retention by setting --transaction-retention-window / TRANSACTION_RETENTION_WINDOW to a higher number of ledgers. This will also retain corresponding number of ledgers in the database. Keep in mind, of course, that this will cause an increase in disk usage for the growing database.
- Unify transaction and event retention windows (#234).
- There is a new
getTransactionsendpoint with the following API (#136):
interface Request {
startLedger: number; // uint32
pagination?: {
cursor?: string;
limit?: number; // uint
}
}
interface Response {
transactions: Transaction[]; // see below
latestLedger: number; // uint32
latestLedgerCloseTimestamp: number; // int64
oldestLedger: number; // uint32
oldestLedgerCloseTimestamp: number; // int64
cursor: string;
}
interface Transaction {
status: boolean; // whether or not the transaction succeeded
applicationOrder: number; // int32, index of the transaction in the ledger
feeBump: boolean; // if it's a fee-bump transaction
envelopeXdr: string; // TransactionEnvelope XDR
resultXdr: string; // TransactionResult XDR
resultMetaXdr: string; // TransactionMeta XDR
ledger: number; // uint32, ledger sequence with this transaction
createdAt: int64; // int64, UNIX timestamp the transaction's inclusion
diagnosticEventsXdr?: string[]; // if failed, DiagnosticEvent XDRs
}- Dependencies have been updated (
stellar/go) to enableENABLE_DIAGNOSTICS_FOR_TX_SUBMISSIONby default (#179).
- The Captive Core path is supplied correctly for TOML generation (#178).
- A new
getVersionInfoRPC endpoint providing versioning info (#132):
interface getVersionInfo {
version: string;
commit_hash: string;
build_time_stamp: string;
captive_core_version: string;
protocol_version: number; // uint32
}- Deadlock on events ingestion error (#167).
- Correctly report row iteration errors in
StreamAllLedgers(#168). - Increase default ingestion timeout (#169).
- Surface an ignored error in
getRawLedgerEntries()(#170).
This outlines the formatting expectations for the CHANGELOG.md file.
If necessary, drop a summary here (e.g. "This release supports Protocol 420.")
- This is a pull request description and it should be quite detailed if it's a breaking change. Ideally, you would even include a bit of helpful notes on how to migrate/upgrade if that's necessary. For example, if an API changes, you should provide deep detail on the delta.
- Anything added should have a details on its schema or command line arguments ([#NNNN](link to github pr)).
- Be sure you describe who is affected and how.