This tool helps you deploy and operate Soluddy's on-chain multi-owner vault contract. It handles vault initialization, authority rotation, and donation distribution so that you can run platform vaults with predictable behavior.
Project status: actively maintained
Soluddy Vault Program is intended for use by Soluddy engineers, operators, and integration developers. It is meant to help those teams create and manage multi-owner vaults, rotate platform authority, and route donations directly to registered owners on Solana.
Soluddy Vault Program uses Anchor on Solana to define PDAs for the singleton config and per-slug vault accounts. It takes instruction inputs from Anchor clients (TypeScript or Rust) and uses them to initialize config, create vaults, and distribute lamports to owners. For more details about the technical implementation, see the developer documentation.
This tool cannot manage wallets, custody keys, or provide a UI. It does not have built-in fee collection, off-chain moderation, or vault discovery surfaces.
Before using this tool, you should be familiar with:
- The basics of Solana CLI, how to use Anchor, and PDA derivation
- Rust (program) and TypeScript (client) basics
You should have:
- Node.js 20+, Rust 1.81+, Solana CLI 1.18+, Anchor CLI 0.31.1
- A workstation with at least 8 GB RAM and a stable local validator
- A funded Solana keypair and access to the target cluster when needed
- Prepare your environment
- Set
ANCHOR_PROVIDER_URLandANCHOR_WALLETfor the target cluster. - Start
solana-test-validator(or point to devnet as documented). - Verify
Anchor.tomlcluster matches your target.
- Set
- Build the program with
anchor build. - Run
yarn initialize:config(fromback-end/) to write the config PDA.
- Ensure the config PDA exists and your wallet has SOL for rent.
- Build and deploy the latest program (
anchor buildor as per your pipeline). - Run
yarn create:vaultand provide owners, slug, and metadata when prompted.
- Derive the vault PDA for the target slug.
- Collect the writable owner accounts in the same order as
vault.owners. - Invoke
donatevia your Anchor client with the lamport amount and owner accounts; confirm owner balances update as expected.
Config already initialized (Anchor AccountAlreadyInitialized)
- Use
update_configto rotate authority or reset your local ledger before re-initializing.
Owner accounts missing or mismatched during donate
- Pass one writable account per owner, in order, matching the keys stored on the vault.
- Report issues in the project tracker.
This tool uses Anchor to define the on-chain program, with PDAs for a singleton config and per-vault accounts. It depends on Solana runtime syscalls and Anchor validation macros to enforce authority checks, owner lists, and metadata limits.
The programs/soluddy-vault/src/lib.rs module wires the public instruction
surface. The programs/soluddy-vault/src/contexts.rs file declares account
contexts, while state.rs, events.rs, errors.rs, validators.rs, and
utils.rs hold shared types, events, error codes, validation helpers, and CPI
utilities. Individual handlers live under programs/soluddy-vault/src/instructions/.
How to set up development environment:
- Install Rust, Solana CLI, and Anchor CLI matching the versions above.
- Confirm
solana --versionandanchor --version. - Run
rustup update stableif needed.
- Confirm
How to install:
- From
back-end/, install JS toolchain dependencies.yarn install- Ensure
node_modules/.binis on your PATH when running scripts.
How to configure:
- Set
ANCHOR_WALLETto your keypair path. - Set
ANCHOR_PROVIDER_URLtohttp://localhost:8899(or the target cluster).
How to build and run locally:
anchor build- Verify the IDL and binary land in
target/. - Check
Anchor.tomlprogram IDs if deploying to a new cluster.
- Verify the IDL and binary land in
How to run tests:
anchor test- Ensure the validator is running or let Anchor spawn one.
- Inspect
tests/soluddy-vault.jsoutput for PDA or authority failures.
-
OwnerAccountsMissingduringdonate- Supply a writable account for every owner in order; mismatch triggers this error.
-
Unauthorizedwhen callingupdate_config- The signer must match the current config authority; rotate authority first if needed.
The Soluddy Vault Program maintainers welcome contributions.
- Instruction handlers, validation improvements, and safety checks
- Integration tests that cover new instruction branches
Before contributing, align with the repository's contribution expectations. We follow conventional commits and the repository's Rust and TypeScript style guides.
- Open an issue describing the change and scope.
- Include validation steps (
anchor test, manual flows). - Note any PDA or account layout changes for documentation updates.
- Include validation steps (
- Submit a PR with changes and test results.
- Request review from a Soluddy Vault maintainer.
- Update
docs/references if instruction surfaces change.
Soluddy Vault is built and maintained by the Soluddy protocol and platform teams.
See LICENSE for the MIT License terms.