chore: sync submodule state (parent ref update)
Made-with: Cursor
This commit is contained in:
275
scripts/setup-token-list-hosting.sh
Executable file
275
scripts/setup-token-list-hosting.sh
Executable file
@@ -0,0 +1,275 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Setup Public Token List Hosting for MetaMask
|
||||
# This script prepares token list for hosting on various platforms
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
TOKEN_LIST="$PROJECT_ROOT/../token-lists/lists/dbis-138.tokenlist.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 "Token List Hosting Setup"
|
||||
log_info "========================================="
|
||||
log_info ""
|
||||
|
||||
# Validate token list
|
||||
if [ ! -f "$TOKEN_LIST" ]; then
|
||||
log_error "Token list not found: $TOKEN_LIST"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! jq empty "$TOKEN_LIST" 2>/dev/null; then
|
||||
log_error "Token list JSON is invalid"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Token list JSON is valid"
|
||||
|
||||
# Create hosting directory
|
||||
HOSTING_DIR="$PROJECT_ROOT/token-list-hosting"
|
||||
mkdir -p "$HOSTING_DIR"
|
||||
|
||||
# Copy token list
|
||||
cp "$TOKEN_LIST" "$HOSTING_DIR/token-list.json"
|
||||
log_success "Copied token list to hosting directory"
|
||||
|
||||
# Create GitHub Pages setup
|
||||
log_info "Creating GitHub Pages setup..."
|
||||
cat > "$HOSTING_DIR/github-pages-setup.md" << 'EOF'
|
||||
# GitHub Pages Token List Hosting
|
||||
|
||||
## Setup Steps
|
||||
|
||||
1. **Create GitHub Repository**:
|
||||
```bash
|
||||
git init
|
||||
git add token-list.json
|
||||
git commit -m "Add ChainID 138 token list"
|
||||
git remote add origin https://github.com/your-org/token-list.git
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
2. **Enable GitHub Pages**:
|
||||
- Go to repository Settings
|
||||
- Navigate to Pages
|
||||
- Source: Deploy from a branch
|
||||
- Branch: main
|
||||
- Folder: / (root)
|
||||
- Click Save
|
||||
|
||||
3. **Access Token List**:
|
||||
- URL: `https://your-org.github.io/token-list/token-list.json`
|
||||
- Or custom domain: `https://your-domain.com/token-list.json`
|
||||
|
||||
4. **Add to MetaMask**:
|
||||
- Settings → Security & Privacy → Token Lists
|
||||
- Add custom token list
|
||||
- Enter: `https://your-org.github.io/token-list/token-list.json`
|
||||
|
||||
## CORS Configuration
|
||||
|
||||
GitHub Pages automatically serves with CORS headers, so no additional configuration needed.
|
||||
|
||||
## Auto-Update
|
||||
|
||||
When you update token-list.json and push to main, GitHub Pages automatically updates.
|
||||
EOF
|
||||
|
||||
log_success "Created: $HOSTING_DIR/github-pages-setup.md"
|
||||
|
||||
# Create nginx hosting configuration
|
||||
log_info "Creating nginx hosting configuration..."
|
||||
cat > "$HOSTING_DIR/nginx-token-list.conf" << 'EOF'
|
||||
# Nginx configuration for token list hosting
|
||||
# Add to your nginx server block
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name your-domain.com;
|
||||
|
||||
# SSL Configuration
|
||||
ssl_certificate /etc/ssl/certs/your-domain.crt;
|
||||
ssl_certificate_key /etc/ssl/private/your-domain.key;
|
||||
|
||||
# Token List Location
|
||||
location /token-list.json {
|
||||
alias /var/www/token-list/token-list.json;
|
||||
|
||||
# CORS Headers
|
||||
add_header Access-Control-Allow-Origin * always;
|
||||
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "Content-Type" always;
|
||||
add_header Access-Control-Max-Age 3600 always;
|
||||
add_header Content-Type application/json always;
|
||||
|
||||
# Cache for 1 hour
|
||||
expires 1h;
|
||||
add_header Cache-Control "public, must-revalidate";
|
||||
|
||||
# Handle OPTIONS
|
||||
if ($request_method = OPTIONS) {
|
||||
add_header Access-Control-Allow-Origin * always;
|
||||
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
|
||||
add_header Access-Control-Max-Age 3600 always;
|
||||
add_header Content-Length 0;
|
||||
return 204;
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
log_success "Created: $HOSTING_DIR/nginx-token-list.conf"
|
||||
|
||||
# Create IPFS hosting guide
|
||||
cat > "$HOSTING_DIR/ipfs-hosting-guide.md" << 'EOF'
|
||||
# IPFS Token List Hosting
|
||||
|
||||
## Setup Steps
|
||||
|
||||
1. **Install IPFS**:
|
||||
```bash
|
||||
# Download from https://ipfs.io
|
||||
# Or use package manager
|
||||
```
|
||||
|
||||
2. **Start IPFS Node**:
|
||||
```bash
|
||||
ipfs daemon
|
||||
```
|
||||
|
||||
3. **Add Token List**:
|
||||
```bash
|
||||
ipfs add token-list.json
|
||||
# Note the hash returned
|
||||
```
|
||||
|
||||
4. **Pin Token List**:
|
||||
```bash
|
||||
ipfs pin add <hash>
|
||||
```
|
||||
|
||||
5. **Access Token List**:
|
||||
- IPFS Gateway: `https://ipfs.io/ipfs/<hash>`
|
||||
- Pinata Gateway: `https://gateway.pinata.cloud/ipfs/<hash>`
|
||||
- Cloudflare Gateway: `https://cloudflare-ipfs.com/ipfs/<hash>`
|
||||
|
||||
6. **Add to MetaMask**:
|
||||
- Use one of the gateway URLs above
|
||||
- Add to MetaMask token lists
|
||||
|
||||
## Pinning Services
|
||||
|
||||
For permanent hosting, use a pinning service:
|
||||
- Pinata: https://pinata.cloud
|
||||
- Infura: https://infura.io
|
||||
- NFT.Storage: https://nft.storage
|
||||
|
||||
## Advantages
|
||||
|
||||
- Decentralized
|
||||
- Permanent (if pinned)
|
||||
- No single point of failure
|
||||
- CORS-friendly gateways
|
||||
EOF
|
||||
|
||||
log_success "Created: $HOSTING_DIR/ipfs-hosting-guide.md"
|
||||
|
||||
# Create hosting comparison
|
||||
cat > "$HOSTING_DIR/HOSTING_COMPARISON.md" << 'EOF'
|
||||
# Token List Hosting Options Comparison
|
||||
|
||||
## GitHub Pages
|
||||
|
||||
**Pros**:
|
||||
- Free
|
||||
- Easy setup
|
||||
- Automatic HTTPS
|
||||
- Version control
|
||||
- Auto-updates
|
||||
|
||||
**Cons**:
|
||||
- Requires GitHub account
|
||||
- Public repository
|
||||
- Limited customization
|
||||
|
||||
**Best For**: Quick setup, version control
|
||||
|
||||
---
|
||||
|
||||
## IPFS
|
||||
|
||||
**Pros**:
|
||||
- Decentralized
|
||||
- Permanent (if pinned)
|
||||
- No single point of failure
|
||||
- Multiple gateways
|
||||
|
||||
**Cons**:
|
||||
- Requires IPFS node or pinning service
|
||||
- Hash changes on update
|
||||
- Gateway dependency
|
||||
|
||||
**Best For**: Decentralized hosting, permanent storage
|
||||
|
||||
---
|
||||
|
||||
## Custom Domain/CDN
|
||||
|
||||
**Pros**:
|
||||
- Full control
|
||||
- Custom domain
|
||||
- CDN performance
|
||||
- Professional appearance
|
||||
|
||||
**Cons**:
|
||||
- Requires server/CDN
|
||||
- SSL certificate needed
|
||||
- Maintenance required
|
||||
- Cost
|
||||
|
||||
**Best For**: Production, professional setup
|
||||
|
||||
---
|
||||
|
||||
## Recommendation
|
||||
|
||||
1. **Start**: GitHub Pages (quick, free)
|
||||
2. **Production**: Custom domain with CDN
|
||||
3. **Backup**: IPFS (permanent, decentralized)
|
||||
EOF
|
||||
|
||||
log_success "Created: $HOSTING_DIR/HOSTING_COMPARISON.md"
|
||||
|
||||
log_info ""
|
||||
log_info "========================================="
|
||||
log_info "Token List Hosting Setup Complete!"
|
||||
log_info "========================================="
|
||||
log_info ""
|
||||
log_info "Files created in: $HOSTING_DIR"
|
||||
log_info " - token-list.json (token list file)"
|
||||
log_info " - github-pages-setup.md (GitHub Pages guide)"
|
||||
log_info " - nginx-token-list.conf (nginx config)"
|
||||
log_info " - ipfs-hosting-guide.md (IPFS guide)"
|
||||
log_info " - HOSTING_COMPARISON.md (hosting options)"
|
||||
log_info ""
|
||||
log_info "Next steps:"
|
||||
log_info "1. Choose hosting method"
|
||||
log_info "2. Follow setup guide"
|
||||
log_info "3. Host token list"
|
||||
log_info "4. Add URL to MetaMask"
|
||||
log_info "5. Verify token list works"
|
||||
log_info ""
|
||||
Reference in New Issue
Block a user