Gramr Library
⚔️ Core Rust library for scaffolding smart contracts with programmatic API.
About
The gramr library provides the core functionality for generating Solidity contracts, tests, and deployment scripts. It can be used programmatically in Rust applications or as a foundation for building custom tooling.
Installation
Add to your Cargo.toml:
[]
= { = "https://github.com/pxlvre/gramr" }
Or for local development:
[]
= { = "../lib" }
API Overview
Core Types
ContractBuilder- Builder pattern for creating contractsContractType- Enum defining contract types (Basic, ERC20, ERC721, etc.)TokenExtension- Enum for OpenZeppelin extensionsFoundryProject- Represents a Foundry project structureSolidityTemplate- Template generator for Solidity code
Generators
ContractGenerator- Generates contract filesTestGenerator- Generates test filesScriptGenerator- Generates deployment scripts
Quick Start
Generate Contract Source
use ;
let source = new
.contract_type
.pragma
.license
.build;
println!;
Write to Foundry Project
use ;
Complex Contract with Extensions
use ;
let contract_type = MultiInheritance ;
let source = new
.contract_type
.build;
Using Generators Directly
use ;
Parse Extensions from Strings
use parse_extensions;
let extensions = parse_extensions?;
Contract Types
Basic Types
ContractType::Basic- Empty contractContractType::ERC20- Standard ERC20 tokenContractType::ERC721- Standard ERC721 NFTContractType::ERC1155- Standard ERC1155 multi-token
Upgradeable Types
ContractType::ERC20UpgradeableContractType::ERC721UpgradeableContractType::ERC1155Upgradeable
Multi-Inheritance
MultiInheritance
Token Extensions
ERC20 Extensions (11 available)
ERC20Permit, ERC20Burnable, ERC20Capped, ERC20Pausable, ERC20Votes, ERC20Wrapper, ERC20FlashMint, ERC20TemporaryApproval, ERC20Bridgeable, ERC1363, ERC4626
ERC721 Extensions (8 available)
ERC721Pausable, ERC721Burnable, ERC721Consecutive, ERC721URIStorage, ERC721Votes, ERC721Royalty, ERC721Wrapper, ERC721Enumerable
ERC1155 Extensions (4 available)
ERC1155Pausable, ERC1155Burnable, ERC1155Supply, ERC1155URIStorage
Error Handling
The library uses anyhow::Result for error handling:
use Result;
Features
default- Standard functionalitymacros- Future: Procedural macros (planned)
Dependencies
anyhow- Error handlingcolored- Terminal colorsfs_extra- File operationsserde- Serializationthiserror- Error typeswhich- Executable detection
See Also
- CLI tool - Command-line interface
- gramrup installer - System installer
- Main README - Full project documentation