229 lines
6.0 KiB
Markdown
229 lines
6.0 KiB
Markdown
|
|
# Gas API Integration Summary
|
||
|
|
|
||
|
|
**Date**: 2025-01-27
|
||
|
|
**Status**: ✅ Complete
|
||
|
|
|
||
|
|
## What Was Implemented
|
||
|
|
|
||
|
|
A complete real-time gas price fetching and documentation update system for multichain deployment.
|
||
|
|
|
||
|
|
## New Scripts Created
|
||
|
|
|
||
|
|
### 1. `scripts/deployment/get-multichain-gas-prices.sh`
|
||
|
|
|
||
|
|
**Purpose**: Fetches real-time gas prices for all chains using APIs from `.env`
|
||
|
|
|
||
|
|
**Features**:
|
||
|
|
- Fetches gas prices from Etherscan API (Ethereum Mainnet)
|
||
|
|
- Fetches gas prices from RPC endpoints (all chains)
|
||
|
|
- Calculates deployment costs in native tokens
|
||
|
|
- Calculates USD equivalents
|
||
|
|
- Exports environment variables
|
||
|
|
- Saves JSON output for programmatic access
|
||
|
|
|
||
|
|
**Usage**:
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/get-multichain-gas-prices.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. `scripts/deployment/update-gas-estimates.sh`
|
||
|
|
|
||
|
|
**Purpose**: Updates all documentation files with real-time gas prices
|
||
|
|
|
||
|
|
**Features**:
|
||
|
|
- Reads gas price data from `get-multichain-gas-prices.sh`
|
||
|
|
- Updates `GAS_AND_TOKEN_REQUIREMENTS.md`
|
||
|
|
- Updates `TOKENS_AND_CHAINS_SUMMARY.md`
|
||
|
|
- Updates `DEPLOYMENT_QUICK_REFERENCE.md`
|
||
|
|
- Updates timestamps in all files
|
||
|
|
|
||
|
|
**Usage**:
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/update-gas-estimates.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
## Updated Documentation
|
||
|
|
|
||
|
|
### 1. `GAS_AND_TOKEN_REQUIREMENTS.md`
|
||
|
|
- Added real-time gas price update instructions
|
||
|
|
- Updated gas price sections to reference API sources
|
||
|
|
- Added automated update workflow
|
||
|
|
- Added exchange rate notes
|
||
|
|
|
||
|
|
### 2. `MULTICHAIN_DEPLOYMENT_RUNBOOK.md`
|
||
|
|
- Added real-time gas price fetching step
|
||
|
|
- Updated minimum balance recommendations
|
||
|
|
- Added reference to gas requirements document
|
||
|
|
|
||
|
|
### 3. `ENV_EXAMPLE_CONTENT.md`
|
||
|
|
- Added gas API configuration section
|
||
|
|
- Added Etherscan API key documentation
|
||
|
|
- Added Infura Gas API option
|
||
|
|
- Added instructions for real-time updates
|
||
|
|
|
||
|
|
### 4. New Documentation Created
|
||
|
|
- `REAL_TIME_GAS_UPDATES.md` - Complete guide for real-time updates
|
||
|
|
- `REAL_TIME_GAS_SYSTEM.md` - System overview and quick start
|
||
|
|
- `GAS_API_INTEGRATION_SUMMARY.md` - This document
|
||
|
|
|
||
|
|
## Gas Price Sources
|
||
|
|
|
||
|
|
### Ethereum Mainnet
|
||
|
|
1. **Etherscan Gas API v2** (Primary)
|
||
|
|
- Endpoint: `https://api.etherscan.io/v2/api?chainid=1&module=gastracker&action=gasoracle&apikey={KEY}`
|
||
|
|
- Requires: `ETHERSCAN_API_KEY` in `.env`
|
||
|
|
- Returns: FastGasPrice, ProposeGasPrice, SafeGasPrice
|
||
|
|
|
||
|
|
2. **RPC Endpoint** (Fallback)
|
||
|
|
- Uses: `eth_gasPrice` RPC call
|
||
|
|
- Requires: `ETH_MAINNET_RPC_URL` in `.env`
|
||
|
|
|
||
|
|
3. **Default** (Final Fallback)
|
||
|
|
- 20 gwei if all APIs fail
|
||
|
|
|
||
|
|
### Other Chains (Cronos, BSC, Polygon, Gnosis)
|
||
|
|
1. **RPC Endpoint** (Primary)
|
||
|
|
- Uses: `eth_gasPrice` RPC call
|
||
|
|
- Requires: `*_RPC_URL` in `.env`
|
||
|
|
|
||
|
|
2. **Default** (Fallback)
|
||
|
|
- Chain-specific defaults
|
||
|
|
|
||
|
|
## Required Environment Variables
|
||
|
|
|
||
|
|
Add to `.env`:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ethereum Mainnet
|
||
|
|
ETHERSCAN_API_KEY=your_etherscan_api_key_here
|
||
|
|
ETH_MAINNET_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
|
||
|
|
|
||
|
|
# Other Chains
|
||
|
|
CRONOS_RPC_URL=https://evm.cronos.org
|
||
|
|
BSC_RPC_URL=https://bsc-dataseed1.binance.org
|
||
|
|
POLYGON_RPC_URL=https://polygon-rpc.com
|
||
|
|
GNOSIS_RPC_URL=https://rpc.gnosischain.com
|
||
|
|
```
|
||
|
|
|
||
|
|
## Workflow
|
||
|
|
|
||
|
|
### Before Deployment
|
||
|
|
|
||
|
|
1. **Configure `.env`**:
|
||
|
|
```bash
|
||
|
|
cp .env.example .env
|
||
|
|
# Edit .env with your API keys and RPC URLs
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Fetch Real-Time Prices**:
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/get-multichain-gas-prices.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Update Documentation**:
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/update-gas-estimates.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
4. **Review Estimates**:
|
||
|
|
- Check updated documentation
|
||
|
|
- Verify costs are acceptable
|
||
|
|
- Ensure wallet balances are sufficient
|
||
|
|
|
||
|
|
5. **Deploy**:
|
||
|
|
```bash
|
||
|
|
# Proceed with deployment using updated estimates
|
||
|
|
```
|
||
|
|
|
||
|
|
## Output Format
|
||
|
|
|
||
|
|
### Console Output
|
||
|
|
- Current gas prices for all chains
|
||
|
|
- Deployment costs in native tokens
|
||
|
|
- USD equivalents
|
||
|
|
- Total estimated cost
|
||
|
|
|
||
|
|
### JSON Output
|
||
|
|
Saved to `/tmp/multichain_gas_prices.json`:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"timestamp": "2025-01-27 12:00:00 UTC",
|
||
|
|
"gas_prices": {
|
||
|
|
"ethereum_mainnet": { ... },
|
||
|
|
"cronos": { ... },
|
||
|
|
"bsc": { ... },
|
||
|
|
"polygon": { ... },
|
||
|
|
"gnosis": { ... }
|
||
|
|
},
|
||
|
|
"total_usd": "520.05"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Environment Variables
|
||
|
|
Exported for use in other scripts:
|
||
|
|
- `ETH_GAS_WEI`, `ETH_GAS_GWEI`, `ETH_COST`, `ETH_USD_COST`
|
||
|
|
- `CRONOS_GAS_WEI`, `CRONOS_COST`, `CRONOS_USD_COST`
|
||
|
|
- `BSC_GAS_WEI`, `BSC_COST`, `BSC_USD_COST`
|
||
|
|
- `POLYGON_GAS_WEI`, `POLYGON_COST`, `POLYGON_USD_COST`
|
||
|
|
- `GNOSIS_GAS_WEI`, `GNOSIS_COST`, `GNOSIS_USD_COST`
|
||
|
|
- `TOTAL_USD`
|
||
|
|
|
||
|
|
## Benefits
|
||
|
|
|
||
|
|
1. **Always Current**: Uses real-time gas prices, not outdated estimates
|
||
|
|
2. **Automated**: No manual calculation needed
|
||
|
|
3. **Multi-Chain**: Supports all 5 chains simultaneously
|
||
|
|
4. **Documentation Sync**: Keeps all docs automatically updated
|
||
|
|
5. **Programmatic**: JSON output for automation/CI/CD
|
||
|
|
6. **Transparent**: Shows exactly where prices come from
|
||
|
|
|
||
|
|
## Testing
|
||
|
|
|
||
|
|
To test the system:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Ensure .env is configured
|
||
|
|
cat .env | grep -E "ETHERSCAN_API_KEY|.*_RPC_URL"
|
||
|
|
|
||
|
|
# 2. Test gas price fetching
|
||
|
|
./scripts/deployment/get-multichain-gas-prices.sh
|
||
|
|
|
||
|
|
# 3. Verify JSON output
|
||
|
|
cat /tmp/multichain_gas_prices.json | jq .
|
||
|
|
|
||
|
|
# 4. Test documentation update
|
||
|
|
./scripts/deployment/update-gas-estimates.sh
|
||
|
|
|
||
|
|
# 5. Verify documentation was updated
|
||
|
|
grep -A 5 "Current Real-Time Estimate" docs/deployment/GAS_AND_TOKEN_REQUIREMENTS.md
|
||
|
|
```
|
||
|
|
|
||
|
|
## Dependencies
|
||
|
|
|
||
|
|
- **cast** (Foundry) - For RPC gas price calls
|
||
|
|
- **bc** - For calculations
|
||
|
|
- **curl** - For API calls
|
||
|
|
- **jq** (optional) - For JSON parsing in scripts
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. **Configure `.env`**: Add all required API keys and RPC URLs
|
||
|
|
2. **Test Scripts**: Run the scripts to verify they work
|
||
|
|
3. **Update Documentation**: Run update script to populate real-time values
|
||
|
|
4. **Review Estimates**: Check that costs are reasonable
|
||
|
|
5. **Deploy**: Use updated estimates for deployment planning
|
||
|
|
|
||
|
|
## Related Files
|
||
|
|
|
||
|
|
- `scripts/deployment/get-multichain-gas-prices.sh` - Gas price fetcher
|
||
|
|
- `scripts/deployment/update-gas-estimates.sh` - Documentation updater
|
||
|
|
- `docs/deployment/GAS_AND_TOKEN_REQUIREMENTS.md` - Cost breakdown
|
||
|
|
- `docs/deployment/REAL_TIME_GAS_SYSTEM.md` - System overview
|
||
|
|
- `docs/deployment/REAL_TIME_GAS_UPDATES.md` - Detailed guide
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Status**: ✅ Ready for use
|
||
|
|
**Last Updated**: 2025-01-27
|
||
|
|
|