ibc testing using emerynet and local chain #15
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: IBC Testing with Emerynet and Devnet | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
jobs: | |
ibc-testing: | |
runs-on: ubuntu-latest | |
env: | |
EMERYNET_BALANCE_FILE: emerynet_file.txt | |
DEVNET_BALANCE_FILE: devnet_file.txt | |
EMERYNET_CHAIN_ID: agoric-emerynet-8 | |
DEVNET_CHAIN_ID: agoricdev-23 | |
EMERYNET_NODE: https://emerynet.rpc.agoric.net:443 | |
DEVNET_NODE: https://devnet.rpc.agoric.net | |
WALLET_ADDRESS_EMERYNET: agoric10emrzln03exuc9uv98mjwmp95735mjm6k2n9xm | |
WALLET_ADDRESS_DEVNET: agoric1khw65emzav9t0cdhj3aw9x2v7m60jekjdf4whl | |
RELAYER_CONFIG: /workspace/relayer/config-testnet.toml | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
- name: Install Agoric globally | |
run: npm install -g agoric | |
- name: Locating files for Agoric Relayer | |
run: mkdir -p ~/.ibc-setup && cp -r ibc-setup/* ~/.ibc-setup/ | |
- name: Start Testnet Docker Services | |
run: docker-compose -f docker-compose-testnet.yaml up -d | |
- name: Fetch Emerynet Wallet Balance | |
run: | | |
curl https://emerynet.api.agoric.net/cosmos/bank/v1beta1/balances/$WALLET_ADDRESS_EMERYNET | | |
jq -r '.balances[] | select(.denom == "ubld") | .amount | tonumber' > $EMERYNET_BALANCE_FILE | |
- name: Fetch Devnet Wallet Balance | |
run: | | |
curl https://devnet.api.agoric.net/cosmos/bank/v1beta1/balances/$WALLET_ADDRESS_DEVNET | | |
jq -r '.balances | length' > $DEVNET_BALANCE_FILE | |
- name: Confirm Connection Status | |
run: | | |
timeout 600 bash -c ' | |
until docker logs relayer 2>&1 | grep -q "OpenConfirmConnection.*connection_id"; do | |
echo "Awaiting confirmation for connection..." | |
sleep 1 | |
done | |
echo "Connection confirmed." | |
line=$(docker logs relayer 2>&1 | grep "OpenConfirmConnection.*connection_id") | |
connection_id=$(echo $line | awk -F "[ ,]" '\''{for(i=1;i<=NF;i++){if($i=="connection_id:"){print $(i+1)}}}'\'') | |
counterparty_connection_id=$(echo $line | awk -F "[ ,]" '\''{for(i=1;i<=NF;i++){if($i=="counterparty_connection_id:"){print $(i+1)}}}'\'') | |
if [[ -z "$connection_id" || -z "$counterparty_connection_id" ]]; then | |
echo "Error: Connection ID or Counterparty Connection ID is empty" | |
exit 1 | |
fi | |
echo "Connection ID: $connection_id" | |
echo "Counterparty Connection ID: $counterparty_connection_id" | |
config_file="$HOME/.ibc-setup/app.yaml" | |
sed -i "s|^srcConnection: .*|srcConnection: $counterparty_connection_id|" "$config_file" | |
sed -i "s|^destConnection: .*|destConnection: $connection_id|" "$config_file" | |
cat "$config_file" | |
' | |
- name: Start Agoric Relayer | |
run: agoric ibc-relayer start --poll 10 & | |
- name: Monitor Channel Initialization | |
run: | | |
timeout 360 bash -c "\ | |
until line=\$(docker logs relayer 2>&1 | grep 'OpenInitChannel'); do | |
echo 'Waiting for channel initialization...' | |
sleep 1 | |
done | |
if [[ -n \$line ]]; then | |
channel_id=\$(echo \$line | awk -F'channel_id: ' '{print \$2}' | awk -F', ' '{print \$1}') | |
echo \"Channel ID extracted: \$channel_id\" | |
echo \$channel_id > channel_id.txt | |
else | |
echo 'Channel initialization timed out.' | |
exit 1 | |
fi" | |
- name: Confirm Channel Status | |
run: | | |
channel_id=$(cat channel_id.txt) | |
timeout 300 bash -c "\ | |
until docker logs relayer 2>&1 | grep -q 'OpenConfirmChannel.*$channel_id'; do | |
echo 'Awaiting confirmation for channel ID: $channel_id...' | |
sleep 1 | |
done | |
echo 'Channel ID $channel_id confirmed.'" | |
- name: Execute IBC Token Transfer | |
run: | | |
docker exec relayer hermes --config $RELAYER_CONFIG tx ft-transfer --src-chain $EMERYNET_CHAIN_ID --src-channel $(cat channel_id.txt) \ | |
--dst-chain $DEVNET_CHAIN_ID --src-port transfer --amount 100 --denom 'ubld' --timeout-seconds 1000 && \ | |
sleep 5 | |
- name: Verify Token Transfer on Emerynet | |
run: | | |
NEW_EMERYNET_BALANCE=$(curl https://emerynet.api.agoric.net/cosmos/bank/v1beta1/balances/$WALLET_ADDRESS_EMERYNET | | |
jq -r '.balances[] | select(.denom == "ubld") | .amount | tonumber') | |
ORIGINAL_EMERYNET_BALANCE=$(cat $EMERYNET_BALANCE_FILE) | |
BALANCE_DIFFERENCE=$((ORIGINAL_EMERYNET_BALANCE - NEW_EMERYNET_BALANCE)) | |
if [ "$BALANCE_DIFFERENCE" -ne 100 ]; then | |
echo "Token transfer discrepancy detected: Expected 100, found $BALANCE_DIFFERENCE." | |
exit 1 | |
else | |
echo "Token transfer validated: Balance difference is exactly 100." | |
fi | |
- name: Verify Token Transfer on Devnet | |
run: | | |
sleep 180 | |
OLD_BALANCE_LENGTH=$(cat "$DEVNET_BALANCE_FILE") | |
NEW_BALANCE_LENGTH=$(curl -s https://devnet.api.agoric.net/cosmos/bank/v1beta1/balances/"$WALLET_ADDRESS_DEVNET" | jq -r '.balances | length') | |
echo "Old Balance Length: $OLD_BALANCE_LENGTH" | |
echo "New Balance Length: $NEW_BALANCE_LENGTH" | |
OLD_BALANCE_LENGTH=$(echo "$OLD_BALANCE_LENGTH" | awk '{print int($1)}') | |
NEW_BALANCE_LENGTH=$(echo "$NEW_BALANCE_LENGTH" | awk '{print int($1)}') | |
if [ "$OLD_BALANCE_LENGTH" -gt "$NEW_BALANCE_LENGTH" ]; then | |
exit 0 | |
else | |
exit 1 | |
fi |