Files
explorer-monorepo/docs/LINK_TOKEN_DEPLOYMENT_READINESS.md
T

5.8 KiB

LINK Token Deployment Readiness Report

Date: 2025-12-24
ChainID: 138
Status: ✅ READY FOR DEPLOYMENT


Test Results Summary

✅ Passed Tests

  1. Environment Variables

    • ✅ PRIVATE_KEY: Valid and configured
    • ✅ Deployer Address: 0x4A666F96fC8764181194447A7dFdb7d471b301C8
    • ✅ RPC_URL: http://192.168.11.250:8545
  2. Network Connectivity

    • ✅ RPC accessible (block: 175408+)
    • ✅ Chain ID matches (138)
  3. Deployer Account

    • ✅ Balance: 999,630,748.4 ETH (more than sufficient)
    • ✅ Nonce: 50
  4. Contract Files

    • ✅ MockLinkToken.sol found at: /home/intlc/projects/smom-dbis-138/contracts/tokens/MockLinkToken.sol
    • ✅ DeployMockLinkToken.s.sol found at: /home/intlc/projects/smom-dbis-138/script/DeployMockLinkToken.s.sol
  5. Foundry Installation

    • ✅ Foundry installed
    • ✅ Cast installed
  6. Deployment Scripts

    • ✅ scripts/force-deploy-link.sh - Ready
    • ✅ scripts/deploy-link-token.sh - Ready
    • ✅ scripts/deploy-via-rpc-json.sh - Ready

⚠️ Warnings

  1. Contract Compilation

    • ⚠️ Direct compilation in source project may require dependencies
    • ✅ force-deploy-link.sh creates standalone contract (no dependencies needed)
  2. Existing LINK Token

    • ⚠️ LINK_TOKEN configured in .env: 0xd6969bC19b53f866C64f2148aE271B2Dae0C58E4
    • ⚠️ Contract not found on-chain (previous deployment attempt failed)

Contract Specification

MockLinkToken Contract

Location: /home/intlc/projects/smom-dbis-138/contracts/tokens/MockLinkToken.sol

Properties:

  • Name: "Chainlink Token"
  • Symbol: "LINK"
  • Decimals: 18
  • Type: ERC20 (minimal implementation)

Functions:

  • mint(address to, uint256 amount) - Mint tokens
  • transfer(address to, uint256 amount) - Transfer tokens
  • transferFrom(address from, address to, uint256 amount) - Transfer from
  • approve(address spender, uint256 amount) - Approve spender
  • balanceOf(address) - Get balance
  • allowance(address owner, address spender) - Get allowance
  • totalSupply() - Get total supply

Initial Supply: 1,000,000 LINK (1M) minted to deployer


Deployment Methods

This script creates a standalone contract and deploys it:

cd /home/intlc/projects/proxmox/explorer-monorepo
./scripts/force-deploy-link.sh [GAS_PRICE]

Example:

./scripts/force-deploy-link.sh 20000000000  # 20 gwei

Advantages:

  • ✅ No external dependencies
  • ✅ Creates contract inline
  • ✅ Multiple deployment methods (forge script, forge create, cast send)
  • ✅ Automatic verification

Method 2: Using Source Project Script

cd /home/intlc/projects/smom-dbis-138
forge script script/DeployMockLinkToken.s.sol:DeployMockLinkToken \
  --rpc-url http://192.168.11.250:8545 \
  --broadcast \
  --legacy \
  --gas-price 20000000000

Requirements:

  • Source project must have all dependencies installed
  • May need: forge install for dependencies

Method 3: Using deploy-via-rpc-json.sh

Direct JSON-RPC deployment (bypasses forge):

cd /home/intlc/projects/proxmox/explorer-monorepo
./scripts/deploy-via-rpc-json.sh [GAS_PRICE] [GAS_LIMIT]

Example:

./scripts/deploy-via-rpc-json.sh 20000000000 10000000

Deployment Checklist

Before deploying, ensure:

  • PRIVATE_KEY is set in .env
  • RPC_URL is accessible
  • Deployer has sufficient balance (✅ 999M+ ETH)
  • Network is operational (✅ Block 175408+)
  • Chain ID is correct (✅ 138)
  • Foundry is installed
  • Deployment script is ready

Note: Previous deployment attempts failed due to network-level restrictions. The DEBUG API should be enabled to get revert reasons if deployment fails again.


Post-Deployment Steps

After successful deployment:

  1. Update .env

    LINK_TOKEN=<deployed_address>
    
  2. Mint Initial Supply (if not done automatically)

    cast send $LINK_TOKEN "mint(address,uint256)" \
      $DEPLOYER 1000000e18 \
      --rpc-url $RPC_URL \
      --private-key $PRIVATE_KEY \
      --legacy
    
  3. Fund Bridge Contracts

    # WETH9 Bridge: 10 LINK
    cast send $LINK_TOKEN "transfer(address,uint256)" \
      $WETH9_BRIDGE 10e18 \
      --rpc-url $RPC_URL \
      --private-key $PRIVATE_KEY \
      --legacy
    
    # WETH10 Bridge: 10 LINK
    cast send $LINK_TOKEN "transfer(address,uint256)" \
      $WETH10_BRIDGE 10e18 \
      --rpc-url $RPC_URL \
      --private-key $PRIVATE_KEY \
      --legacy
    
  4. Update Token Lists

    • Update token-lists/lists/dbis-138.tokenlist.json
    • Update token-list.json
  5. Run Database Migration

    psql -U postgres -d explorer -f backend/database/migrations/0009_add_link_token.up.sql
    

Troubleshooting

If Deployment Fails

  1. Check DEBUG API (if enabled):

    curl -X POST -H "Content-Type: application/json" \
      --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["<tx_hash>",{"tracer":"callTracer"}],"id":1}' \
      http://192.168.11.250:8545 | jq
    
  2. Check Transaction Status:

    cast receipt <tx_hash> --rpc-url http://192.168.11.250:8545
    
  3. Check Network Logs:

    • Besu logs: journalctl -u besu-rpc -n 100
    • Network permissions
    • Gas limits

Common Issues

  • "Intrinsic gas exceeds gas limit": Increase gas limit
  • "Transaction reverted": Check DEBUG API for revert reason
  • "Contract not found": Wait for confirmation or check transaction status

Next Steps

  1. ✅ Run deployment test suite
  2. ⏳ Deploy LINK token contract
  3. ⏳ Verify deployment
  4. ⏳ Mint initial supply
  5. ⏳ Fund bridge contracts
  6. ⏳ Update configurations
  7. ⏳ Complete prerequisites

Status: All components verified and ready for deployment.