Authors:
About
Pinoc is a command-line tool designed to make it easy to set up and manage Pinocchio projects on Solana. It automates common development tasks including project initialization, building, testing, and deployment with simple commands.
Features
- ๐ Fast project scaffolding with best practices
- ๐ Proper directory structure for Solana/Pinocchio development
- ๐จ Simple build, test, and deployment commands
- ๐งน Smart project cleaning with keypair preservation
- ๐ฆ Package management and search functionality
- ๐ป Comprehensive testing environment setup
- ๐ Automatic keypair generation and management
- ๐ Program key management with consistency checks
Installation
From crates.io (Recommended)
From GitHub
From Source
-
Clone the repository
-
Build the tool
-
Install globally
Quick Start
# Install pinoc
# Create a new project
# Navigate to your project
# Build and test
# Deploy to Solana
Usage
Available Commands
# Initialize a new project
# Build your project
# Run tests
# Deploy your program
# Clean target directory (preserves keypairs by default)
# Clean target directory (removes everything including keypairs)
# Add a package to your project
# Search for Pinocchio packages
# Manage program keys
# Get help
Example
Create a new Pinocchio project and get started:
# Create a new project
# Navigate to your project
# Build your project
# Run tests
# Clean build artifacts (preserves keypairs)
# Add a package
# Search for packages
# List program keys
# Sync program keys (checks consistency first)
Project Structure
When you initialize a project with pinoc init, it creates the following structure:
my-project/
โโโ Cargo.toml # Project configuration with Pinocchio dependencies
โโโ README.md # Project documentation
โโโ .gitignore # Git ignore file
โโโ src/
โ โโโ lib.rs # Library crate using no_std
โ โโโ entrypoint.rs # Program entrypoint
โ โโโ errors.rs # Error definitions
โ โโโ instructions/ # Program instructions
โ โ โโโ mod.rs
โ โ โโโ initialize.rs # Initialize instruction
โ โโโ states/ # Account state definitions
โ โโโ mod.rs
โ โโโ state.rs # State structure
โ โโโ utils.rs # State management utilities
โโโ tests/ # Test files
โ โโโ tests.rs # Unit tests using mollusk-svm
โโโ target/
โโโ deploy/
โโโ my-project-keypair.json # Generated program keypair
Key Features in Detail
๐งน Smart Project Cleaning
The pinoc clean command intelligently manages your build artifacts:
# Clean target directory while preserving keypairs (default)
# Clean everything including keypairs
Why preserve keypairs? Your program keypair is essential for deployment. The default behavior ensures you don't accidentally lose your deployment credentials.
๐ฆ Package Management
Easily add dependencies and discover new packages:
# Add a package to your project
# Search for Pinocchio-related packages
๐ Automatic Keypair Management
- Generation: Keypairs are automatically created during project initialization
- Preservation: Clean commands preserve keypairs by default
- Security: Keypairs are stored securely in
target/deploy/
๐ Program Key Management
Manage your program keys with consistency checks:
# List all program keypairs
# Sync program ID in lib.rs with keypair
Key Sync Features:
- Consistency Check: Verifies if the program ID in
declare_id!matches the keypair's public key - Smart Updates: Only updates the file if there's a mismatch
- Clear Feedback: Shows current state and any changes made
- No Unnecessary Writes: Prevents file updates when keys are already consistent
Example Output:
# When keys are already consistent
# When keys need syncing
Contributing
Contributions are welcome! Here's how you can contribute:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests to ensure everything works
- Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Setup
-
Prerequisites
- Rust and Cargo installed
- Solana CLI tools installed
- Git for version control
-
Clone and Build
-
Install Locally
-
Test Your Changes
# Test the CLI # Create a test project