Post
Share your knowledge.
Sui_tryMultiGetPastObjects always returns 'version not found'
We're running mutliple sui nodes and this query always returns VersionNotFound response. Is there any configuration hint, how to have nodes configured properly to keep this info (as archive node)?
query:
{ "jsonrpc": "2.0", "id": 1, "method": "sui_tryMultiGetPastObjects", "params": [ [ { "objectId": "0x1de5cc16141c21923bfca33db9bb6c604de5760e4498e75ecdfcf80d62fb5818", "version": "476134977" } ], { "showType": true, "showOwner": true, "showPreviousTransaction": true, "showDisplay": true, "showContent": true, "showBcs": true, "showStorageRebate": true } ] } response:
{"jsonrpc":"2.0","id":1,"result":[{"status":"VersionNotFound","details":["0x1de5cc16141c21923bfca33db9bb6c604de5760e4498e75ecdfcf80d62fb5818",476134977]}]} latest sui version 1.49.2
config:
authority-store-pruning-config:
num-latest-epoch-dbs-to-retain: 3
epoch-db-pruning-period-secs: 3600
num-epochs-to-retain: 18446744073709551615
num-epochs-to-retain-for-checkpoints: 2
max-checkpoints-in-batch: 10
max-transactions-in-batch: 1000
pruning-run-delay-seconds: 60
....
state-archive-read-config:
- ingestion-url: "https://checkpoints.mainnet.sui.io"
# How many objects to read ahead when catching up
concurrency: 5
we also store checkpoints to our s3 and it's listed in state-archive-read-config with use-for-pruning-watermark: true. Tried various configurations and had no luck.
- Sui
Answers
9The config you have appears to be correct but there are a few other things that could be at play here:
Did you recently change this config? If you changed it after those objects were pruned you wont have them in the db Did run your node since genesis or did you restore your node from a snapshot from some epoch? Again if you restored form a snapshot from after that object was used you wont have it in your db.
Solution for VersionNotFound
-
Enable Archive Mode:
Add to yourfullnode.yaml:authority-store: enable-indexing: true retain-object-versions: true # Critical for past objects -
Increase Retention:
authority-store-pruning-config: num-epochs-to-retain: 30 # Keep more history epoch-db-pruning-period-secs: 86400 # Daily pruning -
Verify Archive Sync:
curl -s http://localhost:9184/metrics | grep "archive_sync" -
For Immediate Fix:
Query via Sui Foundation Archive:curl -X POST https://archive.mainnet.sui.io \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","method":"sui_tryMultiGetPastObjects","params":[[{"objectId":"0x...","version":"..."}],{}],"id":1}'
The VersionNotFound error occurs because your nodes aren’t storing historical object versions (even with state-archive-read-config).
Fix:
- Enable Full Archival Mode – Ensure
authority-store-pruning-configkeeps all versions:num-epochs-to-retain: 18446744073709551615 # Keep all epochs epoch-db-pruning-period-secs: 0 # Disable pruning - Verify S3 Archive Sync – Check if
ingestion-urlis correctly pulling past states. - Upgrade Sui – Some versions have bugs in archival support.
The VersionNotFound response from sui_tryMultiGetPastObjects typically indicates that your node does not retain historical object versions, which are needed to fulfill this type of query. To support such queries, your node must be configured as an archive node, which retains the full historical state rather than just the latest
By default, Sui fullnodes are pruned, meaning they discard older versions of objects to save storage. To run an archive node, you must disable pruning in your node's configuration. Specifically, update the p2p-config.yaml or fullnode.yaml file with pruning_config: { enable: false }.
Make sure your node has enough disk space, as storing full history consumes significantly more resources. After applying this config, restart the node and allow it to re-sync fully. Be aware that enabling archive mode will not retroactively restore old data — you must sync from genesis or use a snapshot from a trusted archive source.
Also ensure that the queried version is within the historical range your node has stored, and check logs for any sync or storage issues. Only archive nodes can serve requests involving past versions of objects, and all other nodes will respond with VersionNotFound in such cases. Lastly, confirm you're not querying for a version beyond your current synced checkpoint.
The sui_tryMultiGetPastObjects method is used to fetch past versions of Sui objects, which requires the node to have historical data stored. If you're consistently seeing VersionNotFound, it means your node is discarding older object versions due to pruning settings. By default, fullnodes prune historical state to save disk space and improve performance, which prevents access to specific object versions unless configured otherwise. To retrieve historical object data, you need to configure your Sui node as an archive node.
In the fullnode configuration file, you should set pruning_config: { enable: false }. This setting disables pruning and ensures the node stores all historical states and object versions. Without this, any request for past object versions will fail, even if you're running multiple nodes, because none retain that data. After applying the config change, you must restart your node and resync it from genesis or an official archive snapshot. Note that syncing from genesis in archive mode can take significant time and disk space, so plan accordingly.
You should also verify you're running the latest supported version of the Sui node software, such as 1.49.2, as mentioned. When issuing the sui_tryMultiGetPastObjects call, ensure the object ID and version actually exist on chain and were not pruned already on your current node. Sometimes, even archive nodes might not return historical data if they were not archive nodes at the time that version existed. For reliability, start with a fresh sync as an archive node.
If using a cloud setup or multiple nodes behind a load balancer, ensure the archive node is targeted directly for historical queries. The query parameters also need to be well-formed, including the object ID as a string and the version number as an integer. Ensure that the requested version hasn’t been reverted or deleted due to chain reorganizations or garbage collection rules.
Another reason for failure could be an incorrect assumption about the object’s version. You can validate the current state of the object with sui_getObject and inspect its version to confirm. Make sure the node you query from has the proper index built and BCS (Binary Canonical Serialization) data accessible. Monitor logs for disk I/O, storage capacity, and sync status.
Also confirm your node is not in a partial or inconsistent state during syncing. Using a snapshot to bootstrap the archive node can reduce sync time and improve stability. Avoid making historical queries on light or pruned nodes. Use metrics endpoints or logs to confirm the node is behaving as expected in archive mode.
Lastly, ensure your infrastructure supports the load of an archive node, which may require better CPU, RAM, and SSDs.
You're encountering the VersionNotFound error in sui_tryMultiGetPastObjects because your nodes likely aren't configured as true archive nodes, meaning they're not retaining all past object versions locally—only recent ones. Even though your pruning config attempts to retain data, the missing key piece is enabling full historical data ingestion from the Sui archive (e.g., the public checkpoint ingestion service) and ensuring that your state snapshot and object stores are configured to actually persist historic versions.
Here’s how to address and optimize your configuration for archive behavior:
✅ Root Cause
VersionNotFoundmeans the node no longer stores the requested object at the exact historical version.- This is common unless the node is configured as an archive node with full history via the state archive reader pulling from a checkpoint source.
✅ Fix: Archive Configuration Requirements
To properly enable archive mode that supports historical reads like sui_tryMultiGetPastObjects, you must:
1. Enable state-archive-read-config to pull from the full archive
state-archive-read-config:
- ingestion-url: "https://checkpoints.mainnet.sui.io"
concurrency: 5
✅ You're already doing this, which is good.
2. Make sure your authority-store-pruning-config allows full retention
Setting:
num-epochs-to-retain: 18446744073709551615 # effectively "infinite"
…looks right, but object versions themselves are still pruned unless the node actively pulls and stores historical versions from the archive.
You must also ensure:
prune-stored-objects: false # this is required for true archival behavior
⚠️ If this is not explicitly set to
false, the node might still prune historic object versions.
3. Your node must be actively ingesting state archive data
Even with config present, some node roles don't auto-ingest unless you explicitly run the archival reader or are using fullnode with that functionality enabled.
🧪 Troubleshooting Tips
-
Check logs for
"Ingested state archive"or"Checkpoint archive fetch"entries. If none appear, your node isn't reading from the archive. -
Run the archive ingest tool manually to force synchronization:
sui-archive-reader --archive-config-path <path_to_config.yaml> -
Confirm you are using a full Sui version ≥1.45, where these configs are fully supported. You’re on
1.49.2—which is great.
✅ S3-Based Archive
If you're storing checkpoints to S3 and referencing that path in state-archive-read-config, make sure:
state-archive-read-config:
- ingestion-url: "s3://your-bucket-name"
concurrency: 5
use-for-pruning-watermark: true
…but remember: this won't help unless your node is actively reading and storing the old state locally. You still need to pull that data or load it in.
📘 Reference
- Archive reader & pruning behavior: https://docs.sui.io/build/full-node/archive-node
- Sui pruning config reference: https://github.com/MystenLabs/sui/blob/main/crates/sui-config/data/fullnode-template.yaml
✅ Final Checklist
To resolve VersionNotFound, ensure:
prune-stored-objects: falseis explicitly setstate-archive-read-configis working (check logs)- Node is running long enough to ingest full history
- Object version
476134977is within the range your node has downloaded and retained
The VersionNotFound error means your Sui node does not store historical object versions. To fix this, you need to run your node in archive mode by setting pruning_config: { enable: false } in your fullnode configuration. Archive nodes retain all object versions and are required for sui_tryMultiGetPastObjects to work properly. After updating the config, restart and re-sync your node from genesis or an archive snapshot. Regular fullnodes with pruning enabled cannot serve past version data and will return this error.
1. Enable Archive Mode
Add to your fullnode.yaml:
authority-store:
enable-indexing: true
retain-object-versions: true # Critical for past objects
2. Fix Retention Settings
Replace invalid num-epochs-to-retain with:
authority-store-pruning-config:
num-epochs-to-retain: 30 # Keep 30 epochs of history
epoch-db-pruning-period-secs: 86400 # Daily pruning
3. Verify Archive Sync
curl -s http://localhost:9184/metrics | grep "archive_sync_status"
Immediate Workaround
Query Sui Foundation's archive directly:
curl -X POST https://archive.mainnet.sui.io -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0",
"method":"sui_tryMultiGetPastObjects",
"params":[[{"objectId":"0x1de...","version":476134977}],{}],
"id":1
}'
Why This Happens
- Default nodes prune old versions
- Your
num-epochs-to-retain: 18446744073709551615is invalid (use30) - Archive mode requires explicit config
Test with:
sui-tool archive-check --object-id 0x1de... --version 476134977
Do you know the answer?
Please log in and share it.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
- How to Maximize Profit Holding SUI: Sui Staking vs Liquid Staking616
- Why does BCS require exact field order for deserialization when Move structs have named fields?65
- Multiple Source Verification Errors" in Sui Move Module Publications - Automated Error Resolution55
- Sui Move Error - Unable to process transaction No valid gas coins found for the transaction419
- Sui Transaction Failing: Objects Reserved for Another Transaction410