Appearance
Wallets & Keypairs
Zink uses the same Ed25519 keypair format and wallet connection model as Solana. If a wallet, signer, or key-management workflow works with Solana, it will work with Zink once you point it at the correct cluster endpoint.
Upstream-compatible
solana-keygen, filesystem JSON keypairs, hardware wallets, browser wallets, mobile wallets, and standard wallet-adapter flows all carry over to Zink unchanged.
Wallet compatibility
Most Solana-facing wallets can connect to Zink as long as they support custom RPC or custom network configuration.
Typical examples include:
- Phantom
- Solflare
- Backpack
- hardware-wallet flows surfaced through Solana tooling
- server-side signers using raw keypair files or HSM-backed implementations
Zink-specific
Whether a specific wallet exposes Zink in its default network picker depends on that wallet. If it does not, use a custom RPC configuration or a dApp flow that injects the Zink endpoint explicitly.
Filesystem keypairs
For operators and backend services, the most common key format is the standard Solana JSON array keypair.
Create a new keypair:
bash
solana-keygen new --outfile ~/.config/solana/id.jsonDisplay the public key:
bash
solana-keygen pubkey ~/.config/solana/id.jsonCreate a keypair without passphrase prompt:
bash
solana-keygen new --no-bip39-passphrase --outfile ~/.config/solana/id.jsonIf you want the CLI to use that key by default:
bash
solana config set --keypair ~/.config/solana/id.jsonVerify:
bash
solana config get
solana addressOperator key separation
Node operators should not treat “the validator key” as a single thing. Separate roles matter.
Identity keypair
Used by the validator process to identify the node on the network.
- passed to
agave-validator --identity - hot key by necessity
- should live only on the node that runs the validator
Vote account
The vote account is the on-chain account that receives vote credits and stake delegation.
- created separately from the identity key
- referenced by
agave-validator --vote-account - inspected with
solana vote-account <VOTE_ACCOUNT_PUBKEY>
Authorized withdrawer
The authorized withdrawer is the most sensitive validator-related key.
- controls withdrawal authority over the vote account
- should be treated as a cold or tightly controlled key
- should not live on the validator host in normal operation
Zink recommendation
For any validator participating in Zink consensus, keep the identity key hot, but keep the withdrawer authority offline or under stronger custody controls. A compromised validator host should not automatically imply loss of withdraw authority.
Creating validator-related keys
Generate an identity keypair:
bash
solana-keygen new --outfile ~/zink-validator/identity.jsonGenerate a vote-account keypair:
bash
solana-keygen new --outfile ~/zink-validator/vote-account.jsonGenerate a withdrawer keypair:
bash
solana-keygen new --outfile ~/zink-validator/withdrawer.jsonDisplay all public keys for recordkeeping:
bash
solana-keygen pubkey ~/zink-validator/identity.json
solana-keygen pubkey ~/zink-validator/vote-account.json
solana-keygen pubkey ~/zink-validator/withdrawer.jsonWallet usage for developers
For normal developer workflows, a single deployer wallet is usually enough.
Common uses:
- paying deployment costs
- funding test accounts
- signing upgrade transactions
- creating PDAs or token accounts through tooling
A simple flow is:
bash
solana-keygen new --outfile ~/.config/solana/zink-deployer.json
solana config set --keypair ~/.config/solana/zink-deployer.json
solana balanceThen switch the CLI to the appropriate cluster URL:
bash
solana config set --url https://testnet-rpc.z.inkBrowser wallets and custom networks
When using browser wallets with Zink:
- confirm the dApp is targeting the intended Zink RPC endpoint
- confirm the wallet understands the network selection being presented
- verify account balances and expected addresses before signing
- test on a non-production cluster first whenever possible
Sanity checks before signing
- Is the wallet connected to the correct Zink cluster?
- Is the destination account on Zink, not Solana mainnet?
- Is the token native to Zink or bridged from Solana?
- Does the action depend on the Zink Bridge state model?
Secret handling practices
Good practices
- store filesystem keypairs with restrictive permissions
- avoid copying operator keys between hosts unnecessarily
- use separate wallets for dev, staging, and production
- back up cold keys offline
- rotate service keys if exposure is suspected
Things to avoid
- checking keypairs into git
- baking keypairs into Docker images
- sharing one hot wallet across unrelated services
- storing withdrawer authority on the validator machine without a good reason
Quick checks
bash
# Show current configured signer
solana address
# Confirm the signer has funds on the current cluster
solana balance
# Confirm your active CLI target
solana config get