| name | pod-scaffold-contract |
| description | This skill should be used when developers need to generate pod network smart contract boilerplate. It orchestrates the pod-templating MCP server to scaffold production-ready contracts (tokens, NFTs, voting, auctions, basic) using FastTypes for order-independent execution. Use when starting new contracts, migrating from Ethereum, or needing pod-specific patterns. |
pod Scaffold Contract
Orchestrate the pod-templating MCP server to generate production-ready smart contract templates optimized for pod network's coordination-free execution model.
Overview
This skill guides the contract scaffolding workflow using the pod-templating MCP server. Templates use FastTypes (SharedCounter, Balance, OwnedCounter, AddressSet) for order-independent operations and follow pod network best practices.
When to Use This Skill
Trigger this skill when developers:
Starting new contracts:
- "Create a new token contract for pod network"
- "Generate an NFT collection contract"
- "I need a voting contract template"
- "Scaffold a basic pod network contract"
Migrating from Ethereum:
- "Convert my ERC20 to work on pod network"
- "Adapt my NFT contract for pod"
- "How do I implement voting on pod?"
Need specific patterns:
- "Create an auction contract with time-based bidding"
- "Generate a token with supply cap"
- "I need a contract with FastTypes"
Scaffolding Workflow
Step 1: Discover Available Templates
Use list_templates to show available contract templates:
// Call pod-templating MCP server
list_templates();
Available contract templates:
| Template | Description | Key FastTypes |
|---|---|---|
basic-contract |
Minimal starter | SharedCounter (example) |
token-simple |
ERC20-style token | Balance, SharedCounter |
nft-simple |
ERC721-style NFT | SharedCounter |
voting-simple |
Voting/proposals | AddressSet, SharedCounter |
auction |
Auction system | Balance, Time utils |
Full project templates (Solidity + Rust + Foundry):
token-contract- Token with CLInft-contract- NFT with CLIvoting-contract- Voting with CLInotary-contract- Notary with CLI
Step 2: Get Template Details
Use get_template_details to understand template requirements:
// Get details for a specific template
get_template_details({
templateName: 'token-simple'
});
Returns:
- Template metadata (name, description, version)
- Required variables (contract_name, token_name, etc.)
- Optional variables with defaults
- Structure overview
- Common customizations
- Next steps
Step 3: Collect Variable Values
Based on template details, gather required values from user:
Example for token-simple:
contract_name: "MyToken"token_name: "My Token"token_symbol: "MTK"decimals: "18"max_supply: "1000000"license(optional): "MIT"
Example for nft-simple:
contract_name: "MyNFT"collection_name: "My NFT Collection"collection_symbol: "MNFT"max_supply: "10000"
Example for voting-simple:
contract_name: "ProposalVote"proposal_description: "Should we upgrade the protocol?"voting_duration: "604800" (7 days in seconds)
Example for auction:
contract_name: "NFTAuction"item_description: "Rare NFT #123"auction_duration: "259200" (3 days in seconds)reserve_price: "1000000000000000000" (1 ETH in wei)
Example for basic-contract:
contract_name: "MyContract"license(optional): "MIT"
Step 4: Render Template
Use render_template to generate contract:
// Render template to project directory
render_template({
templateName: 'token-simple',
targetPath: '/path/to/project/contracts',
variables: {
contract_name: 'MyToken',
token_name: 'My Token',
token_symbol: 'MTK',
decimals: '18',
max_supply: '1000000',
license: 'MIT'
}
});
Result:
- Contract file created at target path
- Variable substitution complete
- Ready for customization
Step 5: Guide Next Steps
After rendering, provide guidance:
Review generated contract
- Verify FastTypes usage
- Check constructor parameters
- Ensure time utilities for time-based logic
Customize for use case
- Load
references/template-guide.mdfor customization examples - Add project-specific logic
- Extend with additional features
- Load
Test commutativity
- Ensure operations work in any order
- Test concurrent operations
- Verify time boundary behavior
Validate before deployment
- Use
pod-source-validatoragent to check best practices - Use
pod-test-engineeragent to generate test suite - Run tests to verify correctness
- Use
Deploy to pod network
- Use
midnight-deployment-engineeragent for deployment - Verify finality via attestations
- Monitor contract on pod explorer
- Use
Template Selection Guide
Choose Based on Use Case
| Need | Template | When to Use |
|---|---|---|
| Minimal starter | basic-contract |
Learning, custom logic |
| Fungible token | token-simple |
Currencies, points, credits |
| NFT collection | nft-simple |
Collectibles, digital assets |
| Governance | voting-simple |
DAO proposals, polls |
| Time-based sale | auction |
NFT auctions, bidding |
| Full project | token-contract |
Need Rust CLI + Foundry |
Template Capabilities
basic-contract:
- SharedCounter example
- Owner management
- Event emissions
- Minimal boilerplate
token-simple:
- Balance FastType for balances
- SharedCounter for supply
- Transfer, mint, burn
- Allowances
- Supply cap
nft-simple:
- SharedCounter for token IDs
- Transfer, mint, burn
- Approvals (single & operator)
- Supply cap
voting-simple:
- AddressSet for voters
- SharedCounter for tallies
- Time-based periods
- Idempotent voting
- Finalization
auction:
- Balance for bids
- Time utilities
- Bid withdrawal
- Winner selection
- Reserve price
Progressive Reference Loading
Load reference documents as needed for detailed guidance:
references/template-guide.md
Load when:
- Need to customize templates beyond basic parameters
- Want to add specific features (transfer fees, metadata URIs, etc.)
- Combining multiple templates
- Need customization examples
Contains:
- Detailed customization guide for each template
- Variable replacement patterns
- Common customizations with code examples
- Integration patterns
- Best practices for combining templates
references/fasttypes-patterns.md
Load when:
- Implementing custom logic with FastTypes
- Need advanced patterns (multi-currency, weighted voting, etc.)
- Want to understand FastTypes deeply
- Debugging order-dependent issues
Contains:
- Comprehensive FastTypes patterns
- Counter, Balance, and Set patterns
- Time-based patterns
- Combined patterns
- Anti-patterns to avoid
- Performance considerations
- Testing strategies
Workflow Example
User request: "Create a new token contract for pod network"
Workflow:
List templates to show options
list_templates();Get details for token-simple
get_template_details({ templateName: 'token-simple' });Gather variables from user:
- "What should the contract be called?" → "GameToken"
- "What's the token name?" → "Game Coin"
- "What's the symbol?" → "GAME"
- "How many decimals?" → "18"
- "Maximum supply? (0 for unlimited)" → "1000000"
Render template:
render_template({ templateName: 'token-simple', targetPath: './contracts', variables: { contract_name: 'GameToken', token_name: 'Game Coin', token_symbol: 'GAME', decimals: '18', max_supply: '1000000' } });Guide next steps:
- "Contract created at ./contracts/GameToken.sol"
- "Install pod SDK:
forge install podnetwork/pod-sdk" - "Compile:
forge build" - "Deploy with constructor args"
- "See references/template-guide.md for customizations"
Common Customizations
After scaffolding, developers often want to customize. Guide them to references/template-guide.md for detailed examples:
Token Customizations
- Transfer fees (percentage)
- Pausable functionality
- Time-locked minting
- Snapshot for governance
NFT Customizations
- Metadata URIs
- Public minting with payment
- Per-address limits
- Rarity attributes
Voting Customizations
- Weighted voting
- Multiple choice
- Quorum requirements
- Token-gated voting
Auction Customizations
- Minimum bid increments
- Automatic time extension
- Buy-now price
- Multi-item auctions
Best Practices
Always Use FastTypes
Templates use FastTypes by default. When customizing:
// ✅ DO: Use FastTypes for shared state
SharedCounter public counter;
Balance public userBalance;
AddressSet public members;
// ❌ DON'T: Use regular variables for concurrent access
uint256 public counter; // Race condition!
Test Commutativity
Verify operations work in any order:
// Test: A then B
await contract.functionA();
await contract.functionB();
// vs
// Test: B then A
await contract.functionB();
await contract.functionA();
// Both should produce same final state
Use Time Utilities
Always use pod time utilities for consensus:
// ✅ DO: Use time utilities
requireTimeAfter(startTime);
requireTimeBefore(endTime);
// ❌ DON'T: Use block.timestamp directly for consensus
require(block.timestamp > startTime); // Validator-local!
Related Skills and Agents
After scaffolding:
- pod-source-validator (agent): Validate generated contract for pod best practices
- pod-test-engineer (agent): Generate comprehensive test suite
- midnight-developer (skill): Learn pod network programming patterns
- midnight-deployment-engineer (agent): Deploy contract to pod network
For ongoing development:
- rag-query (skill): Query pod network documentation
- midnight-network (MCP): Interact with pod blockchain
Quick Reference
MCP Server Tools:
list_templates- Discover available templatesget_template_details- Get template metadata and variablesrender_template- Generate contract with variable substitution
Template Types:
- Simple contracts (standalone .sol files)
- Full projects (Solidity + Rust + Foundry)
Remember: pod network has NO BLOCKS, NO GLOBAL ORDERING. All templates use order-independent patterns with FastTypes.