General Questions
What is Cowboy?
What is Cowboy?
- Python-based actors (smart contracts) instead of Solidity
- Dual-metered gas system (Cycles for compute, Cells for data)
- Native timers for autonomous execution
- Verifiable off-chain compute via a runner network (LLM, HTTP, MCP)
- CBFS — encrypted distributed storage with FUSE mount
- Ethereum-compatible keys — the same secp256k1 addresses work on both chains
Why Python instead of Solidity?
Why Python instead of Solidity?
- 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?
Is Cowboy EVM-compatible?
Is Cowboy EVM-compatible?
- Different VM (Python-based PVM instead of EVM)
- Different transaction format
- Different gas model (Cycles + Cells vs. single gas)
- Same secp256k1 curve
- Same 20-byte address derivation
- An existing Ethereum key works unchanged — same address, same signing flow
What's the difference between Cowboy and Ethereum?
What's the difference between Cowboy and Ethereum?
Technical Questions
How does dual-metered gas work?
How does dual-metered gas work?
- 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?
How does off-chain compute work?
How does off-chain compute work?
- Submit Task: Actor calls
runner.llm(),runner.http(), orrunner.mcp()from within an@runner.continuationhandler (CIP-6 SDK) - VRF Selection: Runners deterministically selected via VRF snapshot
- Execution: Selected runners execute the task off-chain (LLM inference, HTTP call, MCP tool)
- Result Submission: Runners submit results + optional proof on-chain
- Resume: Actor’s continuation resumes in a later block with the result
- Payment: Actor chooses a winning result; payment flows to the runner(s)
Is Cowboy deterministic?
Is Cowboy deterministic?
- ✅ 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?
- 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?
- 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?
- Use standard Python test frameworks (pytest/unittest) to unit-test business logic
- The
cowboy_sdkships amock_hostmodule for stubbing the PVM host API
cowboy init devtargets the shared Mesa devnet- Deploy and execute actors against a real chain without a source checkout
- Use this when you are working from the full Cowboy source workspace and need your own validator or runner
- Point the CLI at it with
cowboy init local
How much does it cost to deploy an actor?
How much does it cost to deploy an actor?
cowboy init dev creates a devnet wallet and requests funds from the configured faucet.Mainnet (when live):- Costs are metered separately by Cycles (compute) and Cells (bytes) with their respective basefees + tips
- Influencing factors: bytecode size (Cells), constructor complexity (Cycles), current basefees
- Set
--cycles-limitand--cells-limitoncowboy actor deploy; see Fee Model
Can I use external Python packages?
Can I use external Python packages?
- ❌
requests,httpx,urllib.request— network I/O - ❌
numpy,pandas,tensorflow,torch— native C/C++ extensions - ❌
os,subprocess,socket— system calls - ❌
random,time— non-deterministic (use protocol-provided APIs)
- ✅
collections,itertools,functools— deterministic data structures - ✅
json— encoding/decoding - ✅
math— deterministic software FP - ✅
hashlib— BLAKE3, SHA-256, etc. - ✅
pvm_host— low-level host API - ✅
cowboy_sdk— high-level SDK (CIP-6)
- Use
runner.llm()/runner.http()/runner.mcp()from an@runner.continuationhandler (CIP-2) - Large data: store in CBFS volumes
How do I debug a failed transaction?
How do I debug a failed transaction?
- 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?
- 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?
- 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?
- 🐛 GitHub Issues — Bug reports and feature requests
- 📧 Support:
Support@cowboy.io - 📖 Contributing Guide — How to propose protocol changes (CIPs)
How can I contribute?
How can I contribute?
-
Code:
- Core protocol (Rust)
- SDK improvements (Python)
- Tooling and CLI
-
Documentation:
- Write tutorials
- Fix typos
- Add examples
-
Testing:
- Test against the Mesa devnet (
cowboy init dev) - Run a local devnet from a full source workspace when you need contributor-level control
- Report bugs on GitHub
- Test against the Mesa devnet (
-
Community:
- Answer questions in GitHub Discussions
- Write blog posts and tutorials
- Create videos and demos

