Install
$ agentstack add skill-keep-starknet-strange-starknet-agentic-cairo-deploy Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Pipes remote content directly into a shell (remote code execution).
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ● Dynamic code execution Used
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Cairo Deploy
Reference for deploying Cairo smart contracts to Starknet using sncast (Starknet Foundry).
When to Use
- Deploying contracts to Starknet devnet, Sepolia, or mainnet
- Declaring contract classes
- Setting up deployer accounts
- Configuring network endpoints
- Verifying deployed contracts
- Invoking/calling deployed contracts
When NOT to Use
- Writing or refactoring contract logic (
cairo-contract-authoring). - Unit, integration, or fuzz testing (
cairo-testing). - Gas or performance optimization (
cairo-optimization). - Security review of existing code (
cairo-auditor).
Quick Start
- Build with
scarb build, then declare and deploy withsncast. - Use [skills catalog](../README.md) when the task moves back into authoring, testing, or auditing.
Setup
Install Starknet Foundry
# Install via asdf (recommended for version pinning)
asdf plugin add starknet-foundry
asdf install starknet-foundry 0.56.0
asdf global starknet-foundry 0.56.0
# Or install directly
curl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh
snfoundryup
.tool-versions
Pin versions for reproducible builds:
scarb 2.15.1
starknet-foundry 0.56.0
> Note: snforge 0.56.0 requires Scarb >= 2.12.0. Check github.com/foundry-rs/starknet-foundry/releases for the latest.
Build
# Build contracts (generates Sierra + CASM)
scarb build
Output goes to target/dev/:
myproject_MyContract.contract_class.json(Sierra)myproject_MyContract.compiled_contract_class.json(CASM)
Account Setup
Create a New Account
# Generate account on Sepolia
sncast account create \
--url https://starknet-sepolia.g.alchemy.com/v2/YOUR_KEY \
--name my-deployer
# This outputs the account address — fund it with ETH/STRK before deploying
# Deploy the account contract
sncast account deploy \
--url https://starknet-sepolia.g.alchemy.com/v2/YOUR_KEY \
--name my-deployer
Import Existing Account
sncast account import \
--url https://starknet-sepolia.g.alchemy.com/v2/YOUR_KEY \
--name my-deployer \
--address 0x123... \
--private-key 0xabc... \
--type oz
Account types: oz (OpenZeppelin), argent, braavos
sncast.toml
Configure defaults to avoid repeating flags:
[default]
url = "https://starknet-sepolia.g.alchemy.com/v2/YOUR_KEY"
account = "my-deployer"
accounts-file = "~/.starknet_accounts/starknet_open_zeppelin_accounts.json"
wait = true
[mainnet]
url = "https://starknet-mainnet.g.alchemy.com/v2/YOUR_KEY"
account = "mainnet-deployer"
Use profiles: sncast --profile mainnet declare ...
Declare (Register Class)
Before deploying, declare the contract class on-chain:
# Declare contract
sncast declare \
--contract-name MyContract
# Output:
# class_hash: 0x1234...
# transaction_hash: 0xabcd...
If the class is already declared, sncast will tell you — that's fine, use the existing class hash.
Deploy (Create Instance)
# Deploy with constructor args
sncast deploy \
--class-hash 0x1234... \
--constructor-calldata 0xOWNER_ADDRESS
# Multiple constructor args (space-separated)
sncast deploy \
--class-hash 0x1234... \
--constructor-calldata 0xOWNER 0xTOKEN_ADDRESS 1000
Constructor Calldata Encoding
Arguments are passed as felt252 values:
ContractAddress— pass as hex0x123...u256— pass as TWO felts:low high(e.g.,1000 0for 1000)felt252— pass directlybool—1for true,0for falseByteArray(strings) — use sncast's string encoding or pass raw
Invoke (Write)
# Call a write function
sncast invoke \
--contract-address 0xCONTRACT \
--function "transfer" \
--calldata 0xRECIPIENT 1000 0
Call (Read)
# Call a view function (free, no tx)
sncast call \
--contract-address 0xCONTRACT \
--function "get_balance" \
--calldata 0xACCOUNT
Programmatic Deployment (starknet.js)
import { Account, CallData, Contract, RpcProvider } from "starknet";
const provider = new RpcProvider({ nodeUrl: process.env.STARKNET_RPC! });
const account = new Account(provider, process.env.ACCOUNT_ADDRESS!, process.env.PRIVATE_KEY!);
const declareTx = await account.declare({ contract: compiledSierra, casm: compiledCasm });
await provider.waitForTransaction(declareTx.transaction_hash);
const deployTx = await account.deploy({
classHash: declareTx.class_hash,
constructorCalldata: CallData.compile({ owner: process.env.OWNER! }),
});
await provider.waitForTransaction(deployTx.transaction_hash);
const contract = new Contract(abi, deployTx.contract_address[0], provider).connect(account);
await contract.invoke("set_fee", [10]);
const fee = await contract.call("get_fee", []);
console.log({ fee });
Multicall
Execute multiple calls in a single transaction:
# Create a multicall file
cat > multicall.toml **Note:** `sncast verify` supports both Walnut and Voyager backends. Use `--verifier walnut` or `--verifier voyager` explicitly.
## Upgradeable Contracts
For contracts using OZ UpgradeableComponent:
```bash
# 1. Declare new class
sncast declare --contract-name MyContractV2
# 2. Call upgrade on existing contract
sncast invoke \
--contract-address 0xEXISTING_CONTRACT \
--function "upgrade" \
--calldata 0xNEW_CLASS_HASH
Common Errors
| Error | Cause | Fix | |-------|-------|-----| | Contract not found | Account not deployed | Run sncast account deploy | | Insufficient max fee | Not enough ETH/STRK for gas | Fund the deployer account | | Class already declared | Same class hash exists | Use the existing class hash for deploy | | Entry point not found | Wrong function name | Check the contract ABI | | Invalid calldata | Wrong number/type of args | Check constructor signature, remember u256 = 2 felts |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: keep-starknet-strange
- Source: keep-starknet-strange/starknet-agentic
- License: MIT
- Homepage: https://starknet-agentic.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.