General Questions
What is Cowboy?
What is Cowboy?
Cowboy is a Layer 1 blockchain protocol designed for autonomous agents and verifiable off-chain computation. It features:
- Python-based smart contracts (Actors) instead of Solidity
- Dual-metered gas system (Cycles for compute, Cells for data)
- Native timers for autonomous execution
- Verifiable off-chain compute for AI/ML and external data
Why Python instead of Solidity?
Why Python instead of Solidity?
Advantages of Python:✅ Familiar: 80%+ of AI/ML developers already know Python
✅ Expressive: Cleaner, more readable code
✅ Ecosystem: Direct access to data structures, algorithms
✅ AI-Ready: Natural fit for AI agent logicHow we make it work:
- Deterministic Python VM (no system calls, no I/O)
- Software floating-point for consensus
- Strict module whitelist
- Comprehensive gas metering
What are Actors?
What are Actors?
Actors are Cowboy’s equivalent of smart contracts. Key differences:
Conceptual example (pseudocode):
| Concept | Ethereum | Cowboy |
|---|---|---|
| Contract | Solidity contract | Python Actor |
| Function | External function | Handler method |
| State | Storage variables | storage API |
| Call | Transaction | Message |
| Address | 0x… | 0x… |
Is Cowboy EVM-compatible?
Is Cowboy EVM-compatible?
No, Cowboy is not EVM-compatible. Key differences:❌ Not compatible:
- Different VM (Python instead of EVM)
- Different transaction format
- Different gas model (Cycles + Cells vs single gas)
- Similar concepts (accounts, transactions, blocks)
What's the difference between Cowboy and Ethereum?
What's the difference between Cowboy and Ethereum?
| Feature | Ethereum | Cowboy |
|---|---|---|
| Language | Solidity | Python |
| VM | EVM | Python VM |
| Gas Model | Single gas | Cycles + Cells |
| Timers | No (need Gelato, etc.) | Native |
| Off-Chain Compute | Oracles (Chainlink) | Native (CIP-2) |
| Consensus | PoS (Gasper) | HotStuff BFT |
| Target Use Case | General DeFi | AI Agents + Computation |
Technical Questions
How does dual-metered gas work?
How does dual-metered gas work?
Cowboy separates resource pricing into two dimensions:Cycles (Computation):
- Measures CPU work
- Every bytecode instruction costs cycles
- Example: Function call = 10 cycles
- Measures data and storage
- 1 Cell = 1 byte
- Charged at I/O boundaries
- Fair pricing: Don’t subsidize compute-heavy apps with storage costs
- Independent markets: Each resource has its own basefee
- Predictable: Know exactly what you’re paying for
How are timers different from Gelato/Chainlink Automation?
How are timers different from Gelato/Chainlink Automation?
Cowboy Native Timers (CIP-1):✅ Protocol-native: No external service required
✅ Gas bidding: Actors bid for execution priority
✅ Guaranteed execution: Timers eventually execute (not reliant on keepers)
✅ Fair scheduling: Based on economic priority, not FCFSvs. External Automation:
See Timers & Scheduler.
| Feature | Gelato/Chainlink | Cowboy |
|---|---|---|
| Integration | External contract | Native API |
| Reliability | Depends on keepers | Protocol-guaranteed |
| Priority | FCFS or fixed | Dynamic bidding |
| Cost | Fixed fee + gas | Just gas (cycles) |
How does off-chain compute work?
How does off-chain compute work?
Verifiable Off-Chain Compute (CIP-2):
- Submit Task: Actor calls
submit_task()with task definition - VRF Selection: Runners deterministically selected via VRF
- Execution: Selected runners execute task (AI model, API call, etc.)
- Result Submission: Runners submit results on-chain
- Callback: Actor receives results in callback handler
- Payment: Actor pays winning runner(s)
Is Cowboy deterministic?
Is Cowboy deterministic?
Yes, completely deterministic. All nodes must produce identical results.How we achieve it:Use instead:
- ✅ Software floating-point (no hardware FPU)
- ✅ No JIT compilation
- ✅ Deterministic GC (reference counting)
- ✅ No system calls (time, random, I/O)
- ✅ Module whitelist
- ✅ Use protocol-provided randomness/time context APIs (instead of local RNG/system time)
- ✅ Use protocol storage and off-chain submission interfaces (see related docs)
How is consensus achieved?
How is consensus achieved?
Cowboy uses HotStuff BFT consensus:Properties:
- Byzantine Fault Tolerant (BFT)
- Deterministic finality (no reorgs)
- Leader rotation
- Requires 2/3+ honest validators
- Leader proposes block
- Validators vote (QC = Quorum Certificate)
- Block finalized with 2/3+ votes
- Next leader elected
- ✅ Faster: 2s vs 10min
- ✅ Finality: Immediate vs probabilistic
- ❌ More validators needed
Development Questions
Do I need to know Rust?
Do I need to know Rust?
No! You only need Python to build actors.Rust is only needed if you want to:
- Contribute to the core protocol
- Build custom validator nodes
- Optimize VM performance
- ✅ Python only
- ✅ Familiar SDK
- ✅ Standard Python tooling
How do I test actors locally?
How do I test actors locally?
Testing Options:1. Unit Tests (Fastest):
- Use standard Python test frameworks (e.g., pytest/unittest) to unit-test business logic
- Use dependency injection/lightweight stubs to replace protocol interactions
- Local devnet and dedicated testing tools will be released in a future milestone
- Use the public testnet for end-to-end validation (deploy, invoke, receipt)
How much does it cost to deploy an actor?
How much does it cost to deploy an actor?
Testnet: Free! (Get tokens from faucet)Mainnet (illustrative principles):
- Costs are metered separately by Cycles and Cells and computed via their respective basefee/tip
- Influencing factors: bytecode size (Cells), constructor logic complexity (Cycles), current basefees, etc.
Can I use external Python packages?
Can I use external Python packages?
No, with exceptions.Forbidden:
❌
requests - Network I/O
❌ numpy - Native C extensions
❌ pandas - Native dependencies
❌ tensorflow - Too large, native codeAllowed (whitelist):
✅ collections - Data structures
✅ itertools - Iteration utilities
✅ json - JSON encoding
✅ math - Math functions (deterministic impl)
✅ hashlib - HashingFor external data/compute:- Use Off-chain Compute (CIP-2) to execute off-chain and return verifiable results
How do I debug a failed transaction?
How do I debug a failed transaction?
Steps (general guidance):
- Check the transaction receipt/error message (block explorer or SDK)
- Common causes:
- Insufficient Cycles limit: increase
gas_limit_cyclesor optimize computation - Insufficient Cells limit: increase
gas_limit_cellsor reduce data - Input or business validation failure: verify input data and business logic
- Insufficient permissions: check access control and caller
- Insufficient Cycles limit: increase
- Unit test locally before on-chain validation
How do I upgrade an actor?
How do I upgrade an actor?
Actors are immutable by default; conceptual strategies include:
- Proxy pattern: delegate calls to a replaceable implementation with strict access control
- Redeploy: deploy a new version, migrate state, update frontend addresses
- Migration contract: dedicated migration process (batch validation/rollback strategy)
Economics & Token Questions
How are fees calculated?
How are fees calculated?
Why do basefees fluctuate?
Why do basefees fluctuate?
Dual EIP-1559 Mechanism:Basefees adjust dynamically based on demand:Example:Benefits:
- Fair pricing (supply/demand)
- Predictable (can estimate fees)
- Anti-spam (expensive during congestion)
Community & Support
Where can I get help?
Where can I get help?
Official Channels:
- 💬 Discord - Real-time support
- 📖 Forum - Technical discussions
- 🐛 GitHub Issues - Bug reports
- 🐦 Twitter - Updates
How can I contribute?
How can I contribute?
Ways to Contribute:
- Code:
- Core protocol (Rust)
- SDK improvements (Python)
- Tooling and CLI
- Documentation:
- Write tutorials
- Fix typos
- Add examples
- Testing:
- Test on testnet
- Report bugs
- Suggest improvements
- Community:
- Answer questions on Discord
- Write blog posts
- Create videos

