- 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.
165 lines
4.8 KiB
Bash
Executable File
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 "$@"
|
|
|