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.
This commit is contained in:
164
scripts/deployment/update-token-list.sh
Executable file
164
scripts/deployment/update-token-list.sh
Executable file
@@ -0,0 +1,164 @@
|
||||
#!/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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user