CLI Tools Overview
Command-line interfaces for interacting with the KUSD Protocol using Foundry's cast.
Prerequisites
- Foundry installed
- KalyChain RPC URL
- Private key with KLC for gas
Setup
# Set environment variables
export RPC_URL=https://testnetrpc.kalychain.io/rpc
export PRIVATE_KEY=your_private_key
# Contract addresses (testnet)
export VAT=0x30e50aD44cd1890A6bf9F09Bf6b8AfE62a6a390D
export PSM=0xF61448725934d38b7fF94f9162AEed729486de35
export KUSD=0xd15F19c457AaaCB7A389B305Dac8611Cd2294c36
export USDC=0x148d19609F3Ad595F8455225510f89cF0F121013
Querying System State
Check Total System Debt
cast call $VAT "debt()(uint256)" --rpc-url $RPC_URL
Check Collateral Type Info
cast call $VAT "ilks(bytes32)(uint256,uint256,uint256,uint256,uint256)" \
$(cast --format-bytes32-string "USDC-A") --rpc-url $RPC_URL
Check Global Debt Ceiling
cast call $VAT "Line()(uint256)" --rpc-url $RPC_URL
PSM Operations
Approve USDC for PSM
cast send $USDC "approve(address,uint256)" $PSM $(cast --max-uint) \
--private-key $PRIVATE_KEY --rpc-url $RPC_URL --legacy
Sell USDC for KUSD
# Swap 100 USDC for KUSD (USDC has 6 decimals)
cast send $PSM "sellGem(address,uint256)" $YOUR_ADDRESS 100000000 \
--private-key $PRIVATE_KEY --rpc-url $RPC_URL --legacy
Buy USDC with KUSD
# First approve KUSD
cast send $KUSD "approve(address,uint256)" $PSM $(cast --max-uint) \
--private-key $PRIVATE_KEY --rpc-url $RPC_URL --legacy
# Buy 100 USDC with KUSD
cast send $PSM "buyGem(address,uint256)" $YOUR_ADDRESS 100000000 \
--private-key $PRIVATE_KEY --rpc-url $RPC_URL --legacy
Check PSM Liquidity
# KUSD available in PSM
cast call $KUSD "balanceOf(address)(uint256)" $PSM --rpc-url $RPC_URL
# USDC available in pocket
cast call $PSM "pocket()(address)" --rpc-url $RPC_URL
Vault Operations
Check Your Vault
cast call $VAT "urns(bytes32,address)(uint256,uint256)" \
$(cast --format-bytes32-string "USDC-A") \
$YOUR_ADDRESS \
--rpc-url $RPC_URL
Check KUSD Balance
cast call $KUSD "balanceOf(address)(uint256)" $YOUR_ADDRESS --rpc-url $RPC_URL
Useful Conversions
# Convert bytes32 to string
cast --parse-bytes32-string 0x555344432d410000...
# Format to bytes32
cast --format-bytes32-string "USDC-A"
# Convert wei to ether
cast --from-wei 1000000000000000000
# Convert to ray (27 decimals)
cast --to-uint256 1000000000000000000000000000