Files
metamask-integration/scripts/prepare-ethereum-lists-pr.sh

263 lines
6.6 KiB
Bash
Raw Normal View History

#!/bin/bash
# Prepare Ethereum-Lists PR submission
# This script validates and prepares the chain metadata for ethereum-lists/chains PR
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
CHAIN_METADATA="$PROJECT_ROOT/../smom-dbis-138/metamask/ethereum-lists-chain.json"
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_info "========================================="
log_info "Ethereum-Lists PR Preparation"
log_info "========================================="
log_info ""
# Check if jq is installed
if ! command -v jq &> /dev/null; then
log_error "jq is required but not installed"
exit 1
fi
# Validate chain metadata file
if [ ! -f "$CHAIN_METADATA" ]; then
log_error "Chain metadata file not found: $CHAIN_METADATA"
exit 1
fi
log_info "Validating chain metadata..."
if ! jq empty "$CHAIN_METADATA" 2>/dev/null; then
log_error "Chain metadata JSON is invalid"
exit 1
fi
log_success "Chain metadata JSON is valid"
# Extract and validate fields
CHAIN_ID=$(jq -r '.chainId' "$CHAIN_METADATA")
CHAIN_NAME=$(jq -r '.name' "$CHAIN_METADATA")
SHORT_NAME=$(jq -r '.shortName' "$CHAIN_METADATA")
RPC_URLS=$(jq -r '.rpc[]' "$CHAIN_METADATA" | head -1)
EXPLORER_URL=$(jq -r '.explorers[0].url' "$CHAIN_METADATA")
log_info ""
log_info "Chain Metadata:"
log_info " Chain ID: $CHAIN_ID"
log_info " Name: $CHAIN_NAME"
log_info " Short Name: $SHORT_NAME"
log_info " RPC URL: $RPC_URLS"
log_info " Explorer: $EXPLORER_URL"
log_info ""
# Validate required fields
log_info "Validating required fields..."
REQUIRED_FIELDS=("chainId" "name" "shortName" "chain" "network" "nativeCurrency" "rpc" "explorers")
MISSING_FIELDS=()
for field in "${REQUIRED_FIELDS[@]}"; do
if ! jq -e ".$field" "$CHAIN_METADATA" > /dev/null 2>&1; then
MISSING_FIELDS+=("$field")
fi
done
if [ ${#MISSING_FIELDS[@]} -gt 0 ]; then
log_error "Missing required fields: ${MISSING_FIELDS[*]}"
exit 1
fi
log_success "All required fields present"
# Validate RPC URLs
log_info "Validating RPC URLs..."
RPC_COUNT=$(jq '.rpc | length' "$CHAIN_METADATA")
if [ "$RPC_COUNT" -lt 1 ]; then
log_error "At least one RPC URL is required"
exit 1
fi
# Check if RPC URLs use HTTPS
HTTPS_RPC_COUNT=$(jq -r '.rpc[]' "$CHAIN_METADATA" | grep -c "^https://" || echo "0")
if [ "$HTTPS_RPC_COUNT" -eq 0 ]; then
log_warn "No HTTPS RPC URLs found (recommended for production)"
fi
log_success "RPC URLs validated"
# Validate explorer
log_info "Validating explorer configuration..."
if ! jq -e '.explorers[0]' "$CHAIN_METADATA" > /dev/null 2>&1; then
log_error "At least one explorer is required"
exit 1
fi
EXPLORER_NAME=$(jq -r '.explorers[0].name' "$CHAIN_METADATA")
EXPLORER_STANDARD=$(jq -r '.explorers[0].standard' "$CHAIN_METADATA")
if [ "$EXPLORER_STANDARD" != "EIP3091" ]; then
log_warn "Explorer standard should be EIP3091 (found: $EXPLORER_STANDARD)"
fi
log_success "Explorer validated: $EXPLORER_NAME"
# Create PR directory
PR_DIR="$PROJECT_ROOT/ethereum-lists-pr"
mkdir -p "$PR_DIR"
# Copy chain metadata
cp "$CHAIN_METADATA" "$PR_DIR/138.json"
log_success "Created: $PR_DIR/138.json"
# Create PR description
cat > "$PR_DIR/PR_DESCRIPTION.md" << EOF
# Add ChainID 138 - DeFi Oracle Meta Mainnet
## Network Information
- **Chain ID**: 138 (0x8a)
- **Network Name**: DeFi Oracle Meta Mainnet
- **Short Name**: defi-oracle
- **Native Currency**: ETH (18 decimals)
- **Consensus**: IBFT 2.0 (Istanbul BFT)
## RPC Endpoints
- Primary: \`https://rpc.d-bis.org\`
- Secondary: \`https://rpc2.d-bis.org\`
- WebSocket: \`wss://rpc.d-bis.org\`
## Block Explorer
- **Name**: Blockscout
- **URL**: \`https://explorer.d-bis.org\`
- **Standard**: EIP3091
## Network Status
- ✅ Network is live and operational
- ✅ RPC endpoints are publicly accessible
- ✅ Block explorer is deployed
- ✅ Token contracts are deployed
- ✅ Network is stable and tested
## Additional Information
- **Info URL**: https://github.com/Defi-Oracle-Tooling/smom-dbis-138
- **Icon**: https://explorer.d-bis.org/images/logo.png
## Testing
The network has been tested with:
- ✅ MetaMask wallet connection
- ✅ Token transfers
- ✅ Contract interactions
- ✅ Block explorer functionality
## Checklist
- [x] Chain ID is unique (138)
- [x] All required fields are present
- [x] RPC endpoints are accessible
- [x] Block explorer is accessible
- [x] Network is stable
- [x] Documentation is complete
EOF
log_success "Created: $PR_DIR/PR_DESCRIPTION.md"
# Create submission instructions
cat > "$PR_DIR/SUBMISSION_INSTRUCTIONS.md" << 'EOF'
# Ethereum-Lists PR Submission Instructions
## Prerequisites
1. Fork the ethereum-lists/chains repository
2. Clone your fork locally
3. Create a new branch: `git checkout -b add-chainid-138`
## Steps
1. **Copy chain metadata**:
```bash
cp 138.json <ethereum-lists-repo>/_data/chains/eip155-138.json
```
2. **Validate the file**:
```bash
cd <ethereum-lists-repo>
npm install
npm run validate
```
3. **Commit and push**:
```bash
git add _data/chains/eip155-138.json
git commit -m "Add ChainID 138 - DeFi Oracle Meta Mainnet"
git push origin add-chainid-138
```
4. **Create PR**:
- Go to https://github.com/ethereum-lists/chains
- Click "New Pull Request"
- Select your branch
- Use PR_DESCRIPTION.md as the PR description
- Submit PR
## PR Requirements
- [x] Chain ID is unique
- [x] All required fields are present
- [x] RPC endpoints are accessible
- [x] Block explorer is accessible
- [x] Network is stable
- [x] Follows ethereum-lists format
## Review Process
1. Automated validation will run
2. Maintainers will review the PR
3. Network will be tested
4. PR will be merged if approved
## Timeline
- Initial review: 1-2 weeks
- Testing: 1-2 weeks
- Merge: After approval
## Contact
For questions, contact the ethereum-lists maintainers or open an issue.
EOF
log_success "Created: $PR_DIR/SUBMISSION_INSTRUCTIONS.md"
log_info ""
log_info "========================================="
log_info "PR Preparation Complete!"
log_info "========================================="
log_info ""
log_info "Files created in: $PR_DIR"
log_info " - 138.json (chain metadata)"
log_info " - PR_DESCRIPTION.md (PR description)"
log_info " - SUBMISSION_INSTRUCTIONS.md (submission guide)"
log_info ""
log_info "Next steps:"
log_info "1. Review the files in $PR_DIR"
log_info "2. Follow SUBMISSION_INSTRUCTIONS.md"
log_info "3. Submit PR to ethereum-lists/chains"
log_info ""