Files
smom-dbis-138/scripts/deployment/update-token-list.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

165 lines
4.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Update Token List Script
# Updates token-list.json with deployed contract addresses
set -euo pipefail
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/init.sh"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
CONTRACT_ADDRESSES_FILE="${PROJECT_ROOT}/contracts-deployed.json"
TOKEN_LIST_FILE="${PROJECT_ROOT}/metamask/token-list.json"
# Logging function
log() {
log_success "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
error() {
log_error "[ERROR] $1"
exit 1
}
warn() {
log_warn "[WARNING] $1"
}
# Validate contract address
validate_address() {
local address=$1
if [[ ! "$address" =~ ^0x[a-fA-F0-9]{40}$ ]]; then
return 1
fi
return 0
}
# Update token in token list
update_token() {
local token_address=$1
local token_symbol=$2
local token_name=$3
local token_decimals=${4:-18}
local token_logo=${5:-}
if ! validate_address "$token_address"; then
error "Invalid token address: $token_address"
fi
log "Updating token: $token_symbol ($token_name) at $token_address"
# Check if token already exists in list
local token_exists=$(jq -r ".tokens[] | select(.address == \"$token_address\") | .address" "$TOKEN_LIST_FILE")
if [ -n "$token_exists" ]; then
log "Token already exists in list, updating..."
# Update existing token
jq --arg address "$token_address" \
--arg symbol "$token_symbol" \
--arg name "$token_name" \
--argjson decimals "$token_decimals" \
--arg logo "$token_logo" \
'(.tokens[] | select(.address == $address)) |= . + {
symbol: $symbol,
name: $name,
decimals: $decimals,
logoURI: $logo
}' "$TOKEN_LIST_FILE" > "${TOKEN_LIST_FILE}.tmp" && \
mv "${TOKEN_LIST_FILE}.tmp" "$TOKEN_LIST_FILE"
else
log "Adding new token to list..."
# Add new token
local new_token=$(jq -n \
--argjson chainId 138 \
--arg address "$token_address" \
--arg name "$token_name" \
--arg symbol "$token_symbol" \
--argjson decimals "$token_decimals" \
--arg logo "$token_logo" \
'{
chainId: $chainId,
address: $address,
name: $name,
symbol: $symbol,
decimals: $decimals,
logoURI: $logo
}')
jq ".tokens += [$new_token]" "$TOKEN_LIST_FILE" > "${TOKEN_LIST_FILE}.tmp" && \
mv "${TOKEN_LIST_FILE}.tmp" "$TOKEN_LIST_FILE"
fi
# Update timestamp
jq ".timestamp = \"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)\"" "$TOKEN_LIST_FILE" > "${TOKEN_LIST_FILE}.tmp" && \
mv "${TOKEN_LIST_FILE}.tmp" "$TOKEN_LIST_FILE"
log "Token updated successfully"
}
# Validate token list
validate_token_list() {
log "Validating token list..."
# Validate JSON schema
if command -v ajv &> /dev/null; then
if ajv validate -s "${PROJECT_ROOT}/metamask/token-list.schema.json" -d "$TOKEN_LIST_FILE"; then
log "Token list schema validation passed"
else
error "Token list schema validation failed"
fi
else
warn "ajv-cli not installed, skipping schema validation"
fi
# Validate JSON syntax
if jq empty "$TOKEN_LIST_FILE" 2>/dev/null; then
log "Token list JSON syntax is valid"
else
error "Token list JSON syntax is invalid"
fi
}
# Main function
main() {
log "Updating token list..."
# Check if contract addresses file exists
if [ ! -f "$CONTRACT_ADDRESSES_FILE" ]; then
error "Contract addresses file not found: $CONTRACT_ADDRESSES_FILE"
fi
# Check if token list file exists
if [ ! -f "$TOKEN_LIST_FILE" ]; then
error "Token list file not found: $TOKEN_LIST_FILE"
fi
# Read contract addresses
WETH_ADDRESS=$(jq -r '.weth // empty' "$CONTRACT_ADDRESSES_FILE")
# Update WETH token
if [ -n "$WETH_ADDRESS" ] && [ "$WETH_ADDRESS" != "null" ]; then
update_token \
"$WETH_ADDRESS" \
"WETH" \
"Wrapped Ether" \
18 \
"https://explorer.d-bis.org/images/tokens/weth.png"
else
warn "WETH address not found in contract addresses file"
fi
# Validate token list
validate_token_list
log "Token list updated successfully"
log "Token list file: $TOKEN_LIST_FILE"
log "Next steps:"
log " 1. Commit token list changes: git add $TOKEN_LIST_FILE && git commit -m 'Update token list with deployed addresses'"
log " 2. Submit token list: ./scripts/deployment/submit-token-list.sh"
}
# Run main function
main "$@"