Static Analysis with Slither and Aderyn
Static analyzers are a foundational piece of an audit pipeline — they catch many common Solidity security flaws early, reducing manual review burdens.
Slither Setup and Usage
Slither is by now an industry staple for Solidity security analysis, offering quick vulnerability detection and useful contract metrics. Here’s a minimal setup for Slither:
pip install slither-analyzer
## Or use the binary for faster runtime
Run Slither on your contract folder:
slither ./contracts --json results.json
The JSON output includes warnings for reentrancy, uninitialized storage, unchecked external calls, and more. For example, a typical unsafe-approval detection looks like this:
{
"type": "High",
"check": "unsafe-approval",
"description": "Contract uses open-ended ERC20 approvals"
}
Slither also supports custom detectors if you want to extend analysis beyond default checks — handy for AI agent-specific logic.
Version note: Slither’s Solidity compatibility matures quickly; always check the current docs to confirm support for your compiler version.
Aderyn: On-chain Contract Analysis
Aderyn is a newer static analyzer designed to work with on-chain bytecode analysis, complementing Slither’s source-level focus. It can discover patterns like delegatecall misuse or proxy upgrade vulnerabilities directly from deployed contracts.
Set up Aderyn (pseudo example):
git clone https://github.com/oryo/aderyn.git
cd aderyn
cargo build --release
./target/release/aderyn analyze --address 0xYourContractAddress --chain mainnet
The tool outputs findings highlighting suspicious opcode sequences and suspicious proxy storage layout differences.
Because it works off-chain without source access, Aderyn helps verify if deployed AI smart contracts or upgrades align with your security assumptions.
Building a Practical Audit Pipeline
A manual audit quickly becomes impractical with rapid deployments and automated agent workflows. I prefer to integrate analysis tools into CI pipelines, running Slither upon each PR and periodically scanning deployed contracts with Aderyn.
Example GitHub Actions snippet:
name: Solidity Audit Pipeline
on: [pull_request]
jobs:
slither_analysis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install Slither
run: pip install slither-analyzer
- name: Run Slither
run: slither ./contracts --json results.json
- name: Upload Results
uses: actions/upload-artifact@v3
with:
name: slither-results
path: results.json
This setup flags common Solidity issues before merging code. For deployed environments, scheduled Aderyn scans alert on abnormal bytecode changes or upgrade safety issues.
Spotting Unsafe Contract Patterns
Some contract patterns repeatedly surface as hazards, especially in AI or multi-agent contexts:
- Unlimited ERC20 approvals: Attackers can drain tokens if session keys or AI agents misuse allowances.
- Unchecked delegatecalls: Proxy or plugin systems allow arbitrary code execution if delegatecall proxies aren’t tightly controlled.
- Reentrancy vulnerabilities: Even subtle re-entrancy bugs can be disastrous in autonomous contract loops.
- Overly permissive roles: Excessive admin or operator rights lead to elevated risk surfaces.
Here’s an example Solidity snippet flagged by Slither for open-ended approval:
function approveMax(IERC20 token) external {
token.approve(spender, type(uint256).max);
}
Replacing type(uint256).max with explicit spending limits or using session keys scoped per action is safer.
Secure Agent Wallets: Session Keys and Spending Limits
When AI agents control on-chain funds, their wallets become critical attack points. Using session keys with scoped spending limits is a best practice I’ve implemented to restrict damage if keys leak.
Session keys allow you to generate ephemeral signatures with constraints. For example, a session key might only approve spends up to 1 ETH or only interact with certain contract addresses.
Example session key pattern (pseudo-code):
struct SessionKey {
address key;
uint256 allowance;
uint256 expiry;
}
mapping(address => SessionKey) public sessionKeys;
modifier onlyValidSessionKey() {
require(sessionKeys[msg.sender].allowance > 0, "Invalid or expired");
_;
}
The smart contract enforces these limits before allowing token transfers or agent operations. Without this, AI agents wielding a full private key can expose your entire wallet balance.
And honestly? Setting up session keys requires careful UX and tooling, or developers complicate onboarding agents—that’s where some frameworks lag.
Integrating AI into Your Security Workflow
Security tooling also needs to keep pace with AI agent development. For example, you might want to automate pattern detection using NLP models trained on Solidity source or bytecode patterns flagged for risk. Or feed static analysis outputs into AI decision agents that recommend fixes.
Currently, integrations are mostly experimental. Tools like FreqAI (see freqai-ml-integrations) provide templates to embed ML insights into dev workflows, but practitioner caution is warranted since false positives/negatives remain common.
Automation can speed audits, but human vetting remains essential, especially around complex session-key logic.
Common Pitfalls and Troubleshooting
Here’s a quick list of gotchas I’ve run into when working on auditing AI smart contracts:
| Issue |
Description |
Fix / Tip |
| Slither version mismatches |
Slither flags false positives on newer Solidity features |
Match Slither version with your compiler release |
| Unlimited spend approvals |
Opening ERC20 approvals to max uint256 |
Use fixed limits or session keys |
| Proxy contract upgrade risks |
Unsafe delegatecall patterns or storage clashes |
Use Aderyn to analyze bytecode upgrades |
| Session key expiration bugs |
Keys staying valid past intended time |
Add expiry checks at contract and client side |
| Overly broad admin roles |
Admins able to pause or upgrade without multisig approval |
Enforce multisig and role scopes |
If you want deeper troubleshooting for algo trading or MEV bots, see mev-bot-development and trading-bot-troubleshooting.
Summary and Next Steps
AI smart contract security and auditing are still evolving. Slither and Aderyn provide complementary static analysis layers that catch a wide range of issues from source to bytecode. Building CI-based audit pipelines reduces late-stage bugs.
Combining static analysis with sound key management like session keys and spending limits hardens agent wallets against compromise. But I believe continuous monitoring and manual review remain critical — these tools reduce but don’t eliminate risk.
For builders shipping autonomous agents or integrating payment protocols like x402, start by mastering static analyzers and securing your agent wallets with scoped session keys. Then expand into dynamic, AI-assisted audits as maturity improves.
Explore related practical setups in our agent-payment-protocols-x402 and freqai-ml-integrations guides to keep advancing your crypto×AI projects.
If you want hands-on examples building audit pipelines or wallets with session keys, check out the linked tutorials on this site. Diving into actual code and error cases helps way more than abstract theory.