I'm confused. The Stellar docs said there are currently three network maintained: testnet, standalone, and public. To differentiate between them we have to change the network passphrase.

I know that the passphrase is used to generate the network hash.

networkHash - first 8 chars of sha256 hash of stellar network passphrase (7ac33997 - default, for public stellar network, cee0302d for testnet) networkPassphrase - can be provided directly to derive networkHash

But i am still confused on the usage of the network hash. Will it be submitted somewhere (maybe a central tunnel for registration of peers finding ?)

I mean, except from specifying the peers in the config files beforehand, how does the peers find each other using the passphrase? In the doc it says these peer-finding is done at best, but I am not so clear about this part.

  • 1
    I've cleaned up your question, but I don't know what you mean by "peer-finding is done at best". Can you rephrase that bit? – Synesso May 5 '18 at 8:26

The network passphrase hash is a component of the transaction hash data that is signed (example from the Java SDK). This means that transactions in one network are invalid in other networks.

  • 2
    One more thing. It looks like network passphrase is used only for transaction signing. All Horizon endpoints except "submit transaction" work just fine, even if the passphrase is wrong. I assume that there are no checks when the SDK Horizon wrapper fetches data. – Orbit Lens May 5 '18 at 10:42
  • 2
    One more note, your friendbot (root seed) is related to the network passphrase. – cesarm May 7 '18 at 1:20
  • 1
    If anyone is curious about @cesarm comment: seed of master account that holds all lumens in circulation when a new network is started is sha256 hash of the network passphrase. – Bartek Nowotarski May 9 '18 at 9:55

When you sign a message on Stellar you are signing your data (transaction) and you are also signing the hash of the network passphrase as part of your message. This is the signing protocol for Stellar.

If you send a message that is signed with the testnet passphrase to the pubnet then the stellar-core nodes for pubnet will identify this mismatch and will reject this transaction, even if everything else about it is correct.

This allows a separate namespace for each network that is honored by stellar core nodes.


An interesting parallel is that you can think of each separate Stellar Network as a network and ledger fork from the main network. The ledger will be entirely different, but the nodes should run almost the identically.

Without the passphrase, an account could publish a transaction on network A, and a middleman could listen to this valid transaction then 'replay' this transaction on a separate network B. Without a passphrase built into the signing of a message, this would be entirely legal and recognized as a valid transaction.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.