| Crates.io | gramr |
| lib.rs | gramr |
| version | 0.1.0 |
| created_at | 2025-09-30 12:35:23.988657+00 |
| updated_at | 2025-10-20 20:22:29.064237+00 |
| description | ⚔️ A blazing-fast library for scaffolding smart contracts |
| homepage | https://gramr.pxlvre.eth.limo |
| repository | https://github.com/pxlvre/gramr |
| max_upload_size | |
| id | 1861075 |
| size | 157,478 |
⚔️ Core Rust library for scaffolding smart contracts with programmatic API.
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.
Add to your Cargo.toml:
[dependencies]
gramr = { git = "https://github.com/pxlvre/gramr" }
Or for local development:
[dependencies]
gramr = { path = "../lib" }
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 codeContractGenerator - Generates contract filesTestGenerator - Generates test filesScriptGenerator - Generates deployment scriptsuse gramr::{ContractBuilder, ContractType};
let source = ContractBuilder::new("MyToken")
.contract_type(ContractType::ERC20)
.pragma("0.8.30")
.license("MIT")
.build();
println!("{}", source);
use gramr::{ContractBuilder, ContractType, FoundryProject};
fn main() -> gramr::Result<()> {
let project = FoundryProject::detect()?;
ContractBuilder::new("MyNFT")
.contract_type(ContractType::ERC721)
.generate(project)?;
Ok(())
}
use gramr::{ContractBuilder, ContractType, TokenExtension};
let contract_type = ContractType::MultiInheritance {
base_type: Box::new(ContractType::ERC721),
extensions: vec![
TokenExtension::ERC721Enumerable,
TokenExtension::ERC721Burnable,
TokenExtension::ERC721Royalty,
],
};
let source = ContractBuilder::new("ComplexNFT")
.contract_type(contract_type)
.build();
use gramr::{ContractGenerator, ContractType, FoundryProject};
fn main() -> gramr::Result<()> {
let project = FoundryProject::detect()?;
let generator = ContractGenerator::new(
project,
"MyToken".to_string(),
ContractType::ERC20,
true, // with_test
true, // with_script
"0.8.30".to_string(),
"MIT".to_string(),
);
generator.generate()?;
Ok(())
}
use gramr::parse_extensions;
let extensions = parse_extensions(&[
"burnable".to_string(),
"pausable".to_string(),
"votes".to_string(),
])?;
ContractType::Basic - Empty contractContractType::ERC20 - Standard ERC20 tokenContractType::ERC721 - Standard ERC721 NFTContractType::ERC1155 - Standard ERC1155 multi-tokenContractType::ERC20UpgradeableContractType::ERC721UpgradeableContractType::ERC1155UpgradeableContractType::MultiInheritance {
base_type: Box<ContractType>,
extensions: Vec<TokenExtension>,
}
ERC20Permit, ERC20Burnable, ERC20Capped, ERC20Pausable, ERC20Votes, ERC20Wrapper, ERC20FlashMint, ERC20TemporaryApproval, ERC20Bridgeable, ERC1363, ERC4626
ERC721Pausable, ERC721Burnable, ERC721Consecutive, ERC721URIStorage, ERC721Votes, ERC721Royalty, ERC721Wrapper, ERC721Enumerable
ERC1155Pausable, ERC1155Burnable, ERC1155Supply, ERC1155URIStorage
The library uses anyhow::Result for error handling:
use gramr::Result;
fn my_function() -> Result<()> {
// Library functions return Result<T>
let project = FoundryProject::detect()?;
// ...
Ok(())
}
default - Standard functionalitymacros - Future: Procedural macros (planned)anyhow - Error handlingcolored - Terminal colorsfs_extra - File operationsserde - Serializationthiserror - Error typeswhich - Executable detection