As I experiment and learn, I realized something that I wanted to confirm. It seems as though the network doesn't need to register the existence of a wallet in any way for it to become active and usable.

For example: A keypair could be generated offline away from the Internet and the associated wallet address could have programs run on it and/or get funded, etc, without the network knowing or caring that you had "discovered" or generated the keypair for that wallet address offline. At any given moment, the valid secret key can be used to cause that wallet to be a signer for some transaction. Nothing about the network needs to know anything ahead of time about that wallet for it to be used in this way.

There's probably an academic word that describes this property of wallets that I have described.

My question here is, do I understand this correctly or is there other feedback that can help my understanding about this become more precise?

1 Answer 1


There is a subtle difference between the terms address, keypair and account.

As you mention correctly, keypairs (and with them addresses, which is just a public key) can be created off-chain, and can be passed to transactions anytime without permission or registration.

Even if you don't have a keypair, just a public key (or any arbitrary sequence of 256 bits a.k.a. 32 bytes, for that matter), you can pass that pubkey as an address to a transaction. If and only if the transaction requires your address to be a signer, you need to have the corresponding private key as well.

Just passing an address to a transaction doesn't mean the blockchain has an account associated with that address (yet).

It now depends on what the transaction is, and what code is running in the transaction's instructions - i.e. what code is running that will be processing the address that you passed in.

There are cases, such as transferring SOL to the account, where it is perfectly OK that there is no account yet, and the transaction's code will just create one if it's not there yet.

In other cases, such as using a program-derived account to store the account's data, the code might expect the account to be already there, and throw an error if it's not there yet.

An account is a chunk of data that can be found by the address - and the existence of the account is somewhat independent of the existence of the address / keypair.

However, Solana makes things as easy as possible and will create accounts automatically if the address hasn't been used before, wherever possible.

When dealing with user-created Programs (Solana's term for "smart contracts"), things may vary of course, depending on how well the Program's author thought things through.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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