@intentsolutionsio/flash-loan-simulator 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +22 -0
- package/LICENSE +21 -0
- package/README.md +411 -0
- package/agents/flashloan-agent.md +261 -0
- package/package.json +43 -0
- package/skills/simulating-flash-loans/ARD.md +454 -0
- package/skills/simulating-flash-loans/PRD.md +239 -0
- package/skills/simulating-flash-loans/SKILL.md +109 -0
- package/skills/simulating-flash-loans/config/settings.yaml +241 -0
- package/skills/simulating-flash-loans/references/errors.md +297 -0
- package/skills/simulating-flash-loans/references/examples.md +532 -0
- package/skills/simulating-flash-loans/references/implementation.md +73 -0
- package/skills/simulating-flash-loans/scripts/flash_simulator.py +492 -0
- package/skills/simulating-flash-loans/scripts/formatters.py +512 -0
- package/skills/simulating-flash-loans/scripts/profit_calculator.py +315 -0
- package/skills/simulating-flash-loans/scripts/protocol_adapters.py +416 -0
- package/skills/simulating-flash-loans/scripts/risk_assessor.py +439 -0
- package/skills/simulating-flash-loans/scripts/strategy_engine.py +596 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Flash Loan Simulator - Error Handling Reference
|
|
2
|
+
|
|
3
|
+
## RPC Connection Errors
|
|
4
|
+
|
|
5
|
+
### ERR-001: RPC Connection Timeout
|
|
6
|
+
```
|
|
7
|
+
Error: Request timed out after 30000ms
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
**Cause:** Network latency or overloaded RPC endpoint.
|
|
11
|
+
|
|
12
|
+
**Solution:**
|
|
13
|
+
1. Switch to a different RPC endpoint:
|
|
14
|
+
```yaml
|
|
15
|
+
rpc_endpoints:
|
|
16
|
+
ethereum: "https://rpc.ankr.com/eth" # Free, no signup
|
|
17
|
+
backup: "https://eth.llamarpc.com" # Alternative
|
|
18
|
+
```
|
|
19
|
+
2. Increase timeout in settings.yaml
|
|
20
|
+
3. Check network connectivity
|
|
21
|
+
|
|
22
|
+
### ERR-002: RPC Rate Limited
|
|
23
|
+
```
|
|
24
|
+
Error: 429 Too Many Requests
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Cause:** Free RPC tier limits exceeded.
|
|
28
|
+
|
|
29
|
+
**Solution:**
|
|
30
|
+
1. Add delay between requests:
|
|
31
|
+
```python
|
|
32
|
+
import time
|
|
33
|
+
time.sleep(0.5) # 500ms between calls
|
|
34
|
+
```
|
|
35
|
+
2. Switch to a different free RPC (rotate between Ankr, Chainstack, Llamarpc)
|
|
36
|
+
3. Use a private RPC for production (Alchemy, Chainstack, Infura, or QuickNode)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Simulation Errors
|
|
41
|
+
|
|
42
|
+
### ERR-010: Insufficient Liquidity
|
|
43
|
+
```
|
|
44
|
+
Error: Loan amount exceeds available liquidity
|
|
45
|
+
Provider: Aave V3
|
|
46
|
+
Available: 50,000 ETH
|
|
47
|
+
Requested: 100,000 ETH
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Cause:** Flash loan amount exceeds pool depth.
|
|
51
|
+
|
|
52
|
+
**Solution:**
|
|
53
|
+
1. Reduce loan amount
|
|
54
|
+
2. Split across multiple providers
|
|
55
|
+
3. Use a different asset with more liquidity
|
|
56
|
+
|
|
57
|
+
### ERR-011: Unsupported Asset
|
|
58
|
+
```
|
|
59
|
+
Error: Asset 'SHIB' not supported by provider 'dYdX'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Cause:** Provider doesn't support the requested token.
|
|
63
|
+
|
|
64
|
+
**Solution:**
|
|
65
|
+
1. Check provider's supported assets:
|
|
66
|
+
```bash
|
|
67
|
+
python flash_simulator.py compare SHIB 1000
|
|
68
|
+
```
|
|
69
|
+
2. Use a different provider (Aave V3 supports more assets)
|
|
70
|
+
3. Swap to a supported intermediary token
|
|
71
|
+
|
|
72
|
+
### ERR-012: Chain Mismatch
|
|
73
|
+
```
|
|
74
|
+
Error: Provider 'dYdX' not available on chain 'polygon'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Cause:** Provider only operates on specific chains.
|
|
78
|
+
|
|
79
|
+
**Solution:**
|
|
80
|
+
1. Check provider chains:
|
|
81
|
+
- dYdX: Ethereum only
|
|
82
|
+
- Aave V3: Ethereum, Polygon, Arbitrum, Optimism, Avalanche
|
|
83
|
+
- Balancer: Ethereum, Polygon, Arbitrum
|
|
84
|
+
2. Switch to a multi-chain provider
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Strategy Errors
|
|
89
|
+
|
|
90
|
+
### ERR-020: No Profitable Route
|
|
91
|
+
```
|
|
92
|
+
Error: All simulated routes result in loss
|
|
93
|
+
Best route: -0.05 ETH (-$125.00)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Cause:** Current market conditions don't support the arbitrage.
|
|
97
|
+
|
|
98
|
+
**Solution:**
|
|
99
|
+
1. Wait for better price differences
|
|
100
|
+
2. Try different token pairs
|
|
101
|
+
3. Consider smaller trade sizes (less slippage)
|
|
102
|
+
4. Check for stale price data
|
|
103
|
+
|
|
104
|
+
### ERR-021: Negative Profit Margin
|
|
105
|
+
```
|
|
106
|
+
Warning: Strategy unprofitable after costs
|
|
107
|
+
Gross profit: +0.10 ETH
|
|
108
|
+
Total costs: -0.15 ETH
|
|
109
|
+
Net profit: -0.05 ETH
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Cause:** Costs (gas + fees) exceed the arbitrage opportunity.
|
|
113
|
+
|
|
114
|
+
**Solution:**
|
|
115
|
+
1. Use a zero-fee provider (dYdX)
|
|
116
|
+
2. Wait for lower gas prices
|
|
117
|
+
3. Increase trade size to improve margin ratio
|
|
118
|
+
4. Find larger price discrepancies
|
|
119
|
+
|
|
120
|
+
### ERR-022: High MEV Competition
|
|
121
|
+
```
|
|
122
|
+
Warning: MEV competition score 85/100
|
|
123
|
+
This pair has high bot activity
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Cause:** ETH/USDC and similar pairs are heavily competed.
|
|
127
|
+
|
|
128
|
+
**Solution:**
|
|
129
|
+
1. Use Flashbots Protect for private transactions
|
|
130
|
+
2. Try less-competitive pairs
|
|
131
|
+
3. Consider smaller, faster trades
|
|
132
|
+
4. Implement MEV protection in production
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Risk Assessment Errors
|
|
137
|
+
|
|
138
|
+
### ERR-030: Critical Risk Score
|
|
139
|
+
```
|
|
140
|
+
Warning: Risk score 78/100 (CRITICAL)
|
|
141
|
+
Viability: NO-GO
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Cause:** Multiple risk factors are elevated.
|
|
145
|
+
|
|
146
|
+
**Solution:**
|
|
147
|
+
1. Review individual risk factors:
|
|
148
|
+
```bash
|
|
149
|
+
python flash_simulator.py arbitrage ETH USDC 100 --risk-analysis
|
|
150
|
+
```
|
|
151
|
+
2. Address the highest-scoring factors
|
|
152
|
+
3. Consider a different strategy or timing
|
|
153
|
+
|
|
154
|
+
### ERR-031: Protocol Risk Warning
|
|
155
|
+
```
|
|
156
|
+
Warning: Using unaudited protocol 'NewDEX'
|
|
157
|
+
Protocol risk score: 80/100
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Cause:** Less-established protocol increases smart contract risk.
|
|
161
|
+
|
|
162
|
+
**Solution:**
|
|
163
|
+
1. Verify protocol audits before using
|
|
164
|
+
2. Stick to well-audited protocols (Aave, Uniswap, Balancer)
|
|
165
|
+
3. Limit exposure to newer protocols
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Gas Estimation Errors
|
|
170
|
+
|
|
171
|
+
### ERR-040: Gas Price Spike
|
|
172
|
+
```
|
|
173
|
+
Warning: Current gas price 150 gwei (normal: 30 gwei)
|
|
174
|
+
Strategy breakeven gas: 45 gwei
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Cause:** Network congestion causing unprofitable gas costs.
|
|
178
|
+
|
|
179
|
+
**Solution:**
|
|
180
|
+
1. Wait for gas prices to normalize
|
|
181
|
+
2. Use gas oracles to estimate future prices:
|
|
182
|
+
```python
|
|
183
|
+
# Check if current gas is above breakeven
|
|
184
|
+
if current_gas > breakeven_gas:
|
|
185
|
+
print("Wait for lower gas prices")
|
|
186
|
+
```
|
|
187
|
+
3. Set gas price limits in execution scripts
|
|
188
|
+
|
|
189
|
+
### ERR-041: Gas Estimation Failed
|
|
190
|
+
```
|
|
191
|
+
Error: Could not estimate gas for transaction
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Cause:** Transaction would revert on-chain.
|
|
195
|
+
|
|
196
|
+
**Solution:**
|
|
197
|
+
1. Check token approvals
|
|
198
|
+
2. Verify sufficient balances
|
|
199
|
+
3. Test on forked mainnet first
|
|
200
|
+
4. Review transaction parameters
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Input Validation Errors
|
|
205
|
+
|
|
206
|
+
### ERR-050: Invalid Amount
|
|
207
|
+
```
|
|
208
|
+
Error: Invalid amount 'abc' - must be numeric
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Solution:**
|
|
212
|
+
```bash
|
|
213
|
+
# Correct usage
|
|
214
|
+
python flash_simulator.py arbitrage ETH USDC 100 # Integer
|
|
215
|
+
python flash_simulator.py arbitrage ETH USDC 100.5 # Decimal
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### ERR-051: Invalid Token Symbol
|
|
219
|
+
```
|
|
220
|
+
Error: Unknown token 'ETHEREUM' - did you mean 'ETH'?
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Solution:**
|
|
224
|
+
Use standard token symbols: ETH, WETH, USDC, USDT, DAI, WBTC
|
|
225
|
+
|
|
226
|
+
### ERR-052: Invalid Provider
|
|
227
|
+
```
|
|
228
|
+
Error: Unknown provider 'aavev3' - valid options: aave, dydx, balancer, uniswap
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Solution:**
|
|
232
|
+
```bash
|
|
233
|
+
# Use lowercase provider names
|
|
234
|
+
python flash_simulator.py arbitrage ETH USDC 100 --provider aave
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Output/Format Errors
|
|
240
|
+
|
|
241
|
+
### ERR-060: JSON Export Failed
|
|
242
|
+
```
|
|
243
|
+
Error: Cannot serialize Decimal to JSON
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Cause:** Custom Decimal types not handled.
|
|
247
|
+
|
|
248
|
+
**Solution:** The simulator handles this automatically. If using custom code:
|
|
249
|
+
```python
|
|
250
|
+
from formatters import DecimalEncoder
|
|
251
|
+
import json
|
|
252
|
+
json.dumps(data, cls=DecimalEncoder)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Recovery Procedures
|
|
258
|
+
|
|
259
|
+
### Complete Reset
|
|
260
|
+
If simulator is in an inconsistent state:
|
|
261
|
+
```bash
|
|
262
|
+
# Clear any cached data
|
|
263
|
+
rm -rf ~/.cache/flash-simulator/
|
|
264
|
+
|
|
265
|
+
# Reinstall dependencies
|
|
266
|
+
pip install --upgrade web3 httpx
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Verify RPC Connectivity
|
|
270
|
+
```bash
|
|
271
|
+
# Test RPC endpoint
|
|
272
|
+
curl -X POST -H "Content-Type: application/json" \
|
|
273
|
+
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
|
|
274
|
+
https://rpc.ankr.com/eth
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Test Simulation Engine
|
|
278
|
+
```bash
|
|
279
|
+
# Run built-in demo
|
|
280
|
+
python strategy_engine.py
|
|
281
|
+
python profit_calculator.py
|
|
282
|
+
python risk_assessor.py
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Getting Help
|
|
288
|
+
|
|
289
|
+
1. Check script help: `python flash_simulator.py --help`
|
|
290
|
+
2. Review examples: `references/examples.md`
|
|
291
|
+
3. Test on mainnet fork before real execution
|
|
292
|
+
4. Start with small amounts on testnet
|
|
293
|
+
|
|
294
|
+
**Remember:** Flash loans are complex DeFi operations. Always test thoroughly and understand the risks before any real execution.
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
*[Tons of Skills](https://tonsofskills.com) by [Intent Solutions](https://intentsolutions.io) | [jeremylongshore.com](https://jeremylongshore.com)*
|