> Developers Blog

Protocol 13 Upgrade Complete!

Today, the Stellar public network upgraded to Protocol 13.  Woohoo!

Like all important network-wide settings, protocol version is decided by validating nodes, who vote for and agree to a new protocol version the same way they vote for and agree to transaction sets.  For more on how that works, see our Upgrading the Network doc.

It takes a lot of coordination to pull off a major protocol change, and we appreciate the diligence, patience, and effort everyone in the ecosystem put in to prepare.  If you haven't already, we encourage you to sign up for updates on our status page to make sure you're aware of network incidents and scheduled maintenance.  

If you're getting errors

If you haven't upgraded your Stellar-related software, you will likely experience issues today.  The fix is simple: install software that supports Protocol 13.  For links to relevant releases, see our Guide to Protocol 13 Prep

For instance: if you're using a Stellar SDK and you get an XDR error while trying to read a transaction envelope, it probably means you're using a version of the library that doesn't support Protocol 13.  Here's an example of what that error looks like:

{% code-line %}Error: XDR Read Error: Unknown PublicKeyType member for value 2{% code-line-end %}

If you're using an outdated version of Horizon, you'll get an error indicating a problem ingesting ledgers, ingesting history archives, loading transactions, validating the bucket list, or something along those lines. Here are two examples:

{% code-block language="sql" %}
"Error ingesting ledgers" err="failed to load transactions: select failed: sql: Scan error on column index 5, name \"txmeta\": xdr:decode: switch '2' is not valid for union" first_ledger=30191538 last_ledger=30192867 pid=31343 service=ingest
{% code-block-end %}

{% code-block language="sql" %}
"Error in ingestion state machine current_state=“buildFromCheckpoint(checkpointLedger=528383)” error=“Error ingesting history archive: Error validating bucket list from HAS: Error getting ledger: error reading ledger from backend: Error getting txHistory: select failed: sql: Scan error on column index 0, name \“txbody\“: xdr:decode: switch ‘2’ is not valid enum value for union” next_state=start pid=94018 service=expingest
{% code-block-end %}

If you're running Stellar Core, your node may get stuck in a catchup loop, where catchup fails with something that looks like this: 

{% code-block language="sql" %}
2020-06-18T15:47:24.342 GCFC7 [History INFO] Verifying ledgers [800639,800896)
2020-06-18T15:47:24.342 GCFC7 [History ERROR] Catchup material failed verification - unsupported ledger version, propagating failure [VerifyLedgerChainWork.cpp:347]
2020-06-18T15:47:24.342 GCFC7 [History ERROR] Upgrade this stellar-core installation to newest version [VerifyLedgerChainWork.cpp:350]
{% code-block-end %}

In all these cases — in any case where your Stellar integration broke as a result of today's upgrade, really— you need to install software that supports Protocol 13.  Doing so should fix your problems.

If you want to check out the new features

Protocol 13 includes some nifty new features, which you can read about in this blog post.  Two that are ready to use out of the box: fee-bump transactions and fine-grained asset authorization.

For the how/what/why/where/when of fee-bump transactions, check out:

To find out more about what you can do with fine-grained asset authorization, check out:

  • The Control Access to an Asset doc
  • CAP-18 (for the adventurous), the spec that introduced fine-grain asset authorization to the protocol. It has some good examples of how you might use it in the Rationale section.


Thanks, everybody! See you at Protocol 14.






Subscribe to developer updates

Thank you for subscribing! Please check your inbox to confirm your email address.

There was an error. Please try again.

More articles

News and insights for developers