0. Prerequisites
This guide assumes that you have completed the Setup guide to get a Privy client instance.1. Creating a wallet
First, we will create a wallet. You will use this wallet’sid in future calls to sign messages and send transactions.
- Ethereum
- Solana
When using the
PrivyClient to work with the API, all errors thrown will be instances of
privy_rs::Error. This error type implements std::error::Error, so you can use it with ? to
propagate errors or your favorite error handling library such as anyhow. You can see more
examples in the error handling section below.2. Signing a message
Next, we’ll sign a plaintext message with the wallet using chain-specific signing methods. Make sure to specify your wallet ID from creation in the input.- Ethereum
- Solana
3. Sending transactions
Your wallet must have some funds in order to send a transaction. You can use a testnet
faucet to test transacting on a testnet (e.g. Base Sepolia)
or send funds to the wallet on the network of your choice.
id from your wallet creation above, as well as the caip2 chain ID for the network you want to transact on.
- Ethereum
- Solana
4. Creating a user
To create a user for your application, you can use thecreate method, passing in linked accounts, custom metadata, and wallets that should be associated with said user.
5. Error handling
In the examples above we use? to propagate errors, however the Rust SDK provides comprehensive error handling through multiple specialized error types. All error types implement std::error::Error, allowing seamless integration with Rust’s error handling ecosystem.
Error types
The SDK provides the following main error categories:PrivyApiError
The core generated client error type that represents all possible API communication failures:PrivyCreateError
Client initialization errors that occur when creating aPrivyClient instance:
PrivySignedApiError
Errors for operations requiring cryptographic signatures (authorization keys):PrivyExportError
Wallet export operation errors:CryptoError
General cryptographic operation errors:KeyError
Cryptographic key management errors:SigningError
Digital signature creation errors:SignatureGenerationError
Authorization signature generation errors:Basic error handling
Advanced error handling
Integration with error handling libraries
The SDK works seamlessly with popular Rust error handling libraries:- anyhow
- thiserror
Next steps & advanced topics
- For an additional layer of security, you can choose to sign your requests with authorization keys.
- To restrict what wallets can do, you can set up policies.
- To prevent double sending the same transaction, take a look at our support for idempotency keys.
- If you want to require multiple parties to sign off before sending a transaction for a wallet, you can accomplish this through the use of quorum approvals.

