# 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 ### Method 1: Using force-deploy-link.sh (Recommended) This script creates a standalone contract and deploys it: ```bash cd /home/intlc/projects/proxmox/explorer-monorepo ./scripts/force-deploy-link.sh [GAS_PRICE] ``` **Example**: ```bash ./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 ```bash 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): ```bash cd /home/intlc/projects/proxmox/explorer-monorepo ./scripts/deploy-via-rpc-json.sh [GAS_PRICE] [GAS_LIMIT] ``` **Example**: ```bash ./scripts/deploy-via-rpc-json.sh 20000000000 10000000 ``` --- ## Deployment Checklist Before deploying, ensure: - [x] PRIVATE_KEY is set in .env - [x] RPC_URL is accessible - [x] Deployer has sufficient balance (✅ 999M+ ETH) - [x] Network is operational (✅ Block 175408+) - [x] Chain ID is correct (✅ 138) - [x] Foundry is installed - [x] 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** ```bash LINK_TOKEN= ``` 2. **Mint Initial Supply** (if not done automatically) ```bash cast send $LINK_TOKEN "mint(address,uint256)" \ $DEPLOYER 1000000e18 \ --rpc-url $RPC_URL \ --private-key $PRIVATE_KEY \ --legacy ``` 3. **Fund Bridge Contracts** ```bash # 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** ```bash 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): ```bash curl -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["",{"tracer":"callTracer"}],"id":1}' \ http://192.168.11.250:8545 | jq ``` 2. **Check Transaction Status**: ```bash cast receipt --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.