Skip to content

Commit

Permalink
shielded transfer test (#24)
Browse files Browse the repository at this point in the history
* add a test script

* add shielded transfer tests

* fix comment
  • Loading branch information
yito88 committed Apr 12, 2024
1 parent 3d9de30 commit 3e6b7a1
Show file tree
Hide file tree
Showing 2 changed files with 289 additions and 0 deletions.
94 changes: 94 additions & 0 deletions e2e/namada-gaia-simple-transfers
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ NAMADAW="${NAMADA_DIR}/target/debug/namadaw"
DATA_DIR="${HERMES_DIR}/data"
IBC_TOKEN="transfer/channel-0/samoleans"

SHIELDED_ALIAS_A="shielded_a"
SHIELDED_ALIAS_B="shielded_b"
PAYMENT_ALIAS_A="payment_a"
PAYMENT_ALIAS_B="payment_b"
NAMADA_LEDGER_ADDR="127.0.0.1:27657"

GAIA_CHAIN_CONFIG="
Expand Down Expand Up @@ -60,6 +64,15 @@ echo "${GAIA_CHAIN_CONFIG}" >> config_for_namada.toml
cargo run -q --bin hermes -- --config config_for_namada.toml \
keys add --chain gaia-0 --key-file ${DATA_DIR}/gaia-0/user_seed.json --overwrite

# setup Namada shielded keys
${NAMADAW} --base-dir ${base_dir} gen --shielded --alias ${SHIELDED_ALIAS_A} --unsafe-dont-encrypt
${NAMADAW} --base-dir ${base_dir} gen-payment-addr --alias ${PAYMENT_ALIAS_A} --key ${SHIELDED_ALIAS_A}
payment_addr_a=$(${NAMADAW} --base-dir ${base_dir} find --alias ${PAYMENT_ALIAS_A} | awk -v paymentAlias="${PAYMENT_ALIAS_A}" '{if($1 ~ paymentAlias) {print $2}}')

${NAMADAW} --base-dir ${base_dir} gen --shielded --alias ${SHIELDED_ALIAS_B} --unsafe-dont-encrypt
${NAMADAW} --base-dir ${base_dir} gen-payment-addr --alias ${PAYMENT_ALIAS_B} --key ${SHIELDED_ALIAS_B}
payment_addr_b=$(${NAMADAW} --base-dir ${base_dir} find --alias ${PAYMENT_ALIAS_B} | awk -v paymentAlias="${PAYMENT_ALIAS_B}" '{if($1 ~ paymentAlias) {print $2}}')

# Initialize Relayer's balance on Namada
${NAMADAC} --base-dir ${base_dir} \
transfer \
Expand Down Expand Up @@ -185,6 +198,87 @@ ${NAMADAC} --base-dir ${base_dir} balance \
echo "==== Balances on Gaia ===="
gaiad query bank balances ${gaia_user}


echo "~~ Generate the proof from Namada for the following transfer ~~"
resp=$(${NAMADAC} --base-dir ${base_dir} ibc-gen-shielded \
--output-folder-path ${base_dir} \
--target ${payment_addr_a} \
--token "samoleans" \
--amount 10 \
--port-id transfer \
--channel-id channel-0 \
--node ${NAMADA_LEDGER_ADDR})
memo_path=$(echo $resp | awk '{print $8}')

echo "~~ Shielding transfer 10 samoleans from Gaia to Namada ~~"
cargo run --bin hermes -- --config config_for_namada.toml \
tx ft-transfer \
--dst-chain ${chain_id} \
--src-chain gaia-0 \
--src-port transfer \
--src-channel channel-0 \
--amount 10 \
--receiver ${payment_addr_a} \
--denom samoleans \
--timeout-height-offset 1000 \
--memo $(cat ${memo_path})

# wait for relaying
sleep 15

echo "==== Balance of shielded_a on Namada ===="
${NAMADAC} --base-dir ${base_dir} balance \
--owner ${SHIELDED_ALIAS_A} \
--node ${NAMADA_LEDGER_ADDR}

echo "==== Balances on Gaia ===="
gaiad query bank balances ${gaia_user}

echo "~~ Shielded transfer 5 apfel from shielded_a to shielded_b ~~"
${NAMADAC} --base-dir ${base_dir} transfer \
--source ${SHIELDED_ALIAS_A} \
--target ${payment_addr_b} \
--token ${IBC_TOKEN} \
--amount 5 \
--signing-keys relayer \
--node ${NAMADA_LEDGER_ADDR}

echo "==== Balance of shielded_a on Namada ===="
${NAMADAC} --base-dir ${base_dir} balance \
--owner ${SHIELDED_ALIAS_A} \
--node ${NAMADA_LEDGER_ADDR}

echo "==== Balance of shielded_b on Namada ===="
${NAMADAC} --base-dir ${base_dir} balance \
--owner ${SHIELDED_ALIAS_B} \
--node ${NAMADA_LEDGER_ADDR}

echo "~~ Transfer back 5 samoleans from Namada to Gaia ~~"
${NAMADAC} --base-dir ${base_dir} ibc-transfer \
--source ${SHIELDED_ALIAS_B} \
--receiver ${gaia_user} \
--token ${IBC_TOKEN} \
--amount 5 \
--signing-keys relayer \
--channel-id channel-0 \
--node ${NAMADA_LEDGER_ADDR}

# wait for relaying
sleep 15

echo "==== Balances of shielded_a on Namada ===="
${NAMADAC} --base-dir ${base_dir} balance \
--owner ${SHIELDED_ALIAS_A} \
--node ${NAMADA_LEDGER_ADDR}

echo "==== Balances of shielded_b on Namada ===="
${NAMADAC} --base-dir ${base_dir} balance \
--owner ${SHIELDED_ALIAS_B} \
--node ${NAMADA_LEDGER_ADDR}

echo "==== Balances on Gaia ===="
gaiad query bank balances ${gaia_user}

killall hermes
killall gaiad
killall namadan
195 changes: 195 additions & 0 deletions e2e/namada-shielded-transfers
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
#!/bin/bash

# This script executes shielded transfers between Namada instances locally
# `make build` and `make build-wasm-scripts` on Namada directory in advance
# Run with `namada-shielded-transfers ${namada_dir}`

set -e

NAMADA_DIR=$1
if [ -z "${NAMADA_DIR}" ]
then
echo "ERROR: Namada directory should be given"
exit 1
fi
cd $(dirname $0)
HERMES_DIR=${PWD%/e2e*}

NAMADAC="${NAMADA_DIR}/target/debug/namadac"
NAMADAW="${NAMADA_DIR}/target/debug/namadaw"
DATA_DIR="${HERMES_DIR}/data"

SHIELDED_ALIAS_A="shielded_a"
SHIELDED_ALIAS_B="shielded_b"
SHIELDED_ALIAS_B_2="shielded_b_2"
PAYMENT_ALIAS_A="payment_a"
PAYMENT_ALIAS_B="payment_b"
PAYMENT_ALIAS_B_2="payment_b_2"
LEDGER_ADDR_A="127.0.0.1:27657"
LEDGER_ADDR_B="127.0.0.1:28657"
INITIAL_BALANCE=5000

function init_relayer_balance() {
local suffix=$1
local ledger_addr=$2

local base_dir=${DATA_DIR}/namada-${suffix}

${NAMADAC} --base-dir ${base_dir} \
transfer \
--source albert \
--target relayer \
--token nam \
--amount ${INITIAL_BALANCE} \
--node ${ledger_addr}
}

# ==== main ====

# Run 2 Namada chains
${HERMES_DIR}/scripts/setup-namada ${NAMADA_DIR}

cd ${HERMES_DIR}
ids=$(grep "id" config_for_namada.toml | awk -F"'" '/^id/ {print $2}')
chain_a=$(echo ${ids} | awk '{print $1}')
chain_b=$(echo ${ids} | awk '{print $2}')

# Initialize the balances
init_relayer_balance "a" ${LEDGER_ADDR_A}
init_relayer_balance "b" ${LEDGER_ADDR_B}

# Create a channel
cargo run --bin hermes -- --config config_for_namada.toml \
create channel \
--a-chain ${chain_a} \
--b-chain ${chain_b} \
--a-port transfer \
--b-port transfer \
--new-client-connection --yes

base_dir_a=${DATA_DIR}/namada-a
base_dir_b=${DATA_DIR}/namada-b

# setup shielded keys
${NAMADAW} --base-dir ${base_dir_a} gen --shielded --alias ${SHIELDED_ALIAS_A} --unsafe-dont-encrypt
${NAMADAW} --base-dir ${base_dir_a} gen-payment-addr --alias ${PAYMENT_ALIAS_A} --key ${SHIELDED_ALIAS_A}
payment_addr_a=$(${NAMADAW} --base-dir ${base_dir_a} find --alias ${PAYMENT_ALIAS_A} | awk -v paymentAlias="${PAYMENT_ALIAS_A}" '{if($1 ~ paymentAlias) {print $2}}')

${NAMADAW} --base-dir ${base_dir_b} gen --shielded --alias ${SHIELDED_ALIAS_B} --unsafe-dont-encrypt
${NAMADAW} --base-dir ${base_dir_b} gen-payment-addr --alias ${PAYMENT_ALIAS_B} --key ${SHIELDED_ALIAS_B}
payment_addr_b=$(${NAMADAW} --base-dir ${base_dir_b} find --alias ${PAYMENT_ALIAS_B} | awk -v paymentAlias="${PAYMENT_ALIAS_B}" '{if($1 ~ paymentAlias) {print $2}}')

${NAMADAW} --base-dir ${base_dir_b} gen --shielded --alias ${SHIELDED_ALIAS_B_2} --unsafe-dont-encrypt
${NAMADAW} --base-dir ${base_dir_b} gen-payment-addr --alias ${PAYMENT_ALIAS_B_2} --key ${SHIELDED_ALIAS_B_2}
payment_addr_b_2=$(${NAMADAW} --base-dir ${base_dir_b} find --alias ${PAYMENT_ALIAS_B_2} | awk -v paymentAlias="${PAYMENT_ALIAS_B_2}" '{if($1 ~ paymentAlias) {print $2}}')

# faucet apfel on chain_a and chain_b
${NAMADAC} --base-dir ${base_dir_a} transfer \
--source albert \
--target ${payment_addr_a} \
--token apfel \
--amount 1000 \
--signing-keys albert-key \
--node ${LEDGER_ADDR_A}

echo "==== Start Hermes ===="
cargo run --bin hermes -- --config config_for_namada.toml \
start > ${HERMES_DIR}/e2e/hermes.log 2>&1 &

echo "~~ Generate the proof from chain_b for the following transfer ~~"
resp=$(${NAMADAC} --base-dir ${base_dir_b} ibc-gen-shielded \
--output-folder-path ${base_dir_b} \
--target ${payment_addr_b} \
--token "tnam1qyvfwdkz8zgs9n3qn9xhp8scyf8crrxwuq26r6gy" \
--amount 100 \
--port-id transfer \
--channel-id channel-0 \
--node ${LEDGER_ADDR_B})
memo_path=$(echo $resp | awk '{print $8}')

echo "~~ Transfer 100 apfel from chain_a to chain_b ~~"
${NAMADAC} --base-dir ${base_dir_a} ibc-transfer \
--source ${SHIELDED_ALIAS_A} \
--receiver ${payment_addr_b} \
--token apfel \
--amount 100 \
--channel-id channel-0 \
--gas-payer relayer \
--memo-path ${memo_path} \
--node ${LEDGER_ADDR_A}

# wait for relaying
sleep 15

echo "==== Balances on chain A ===="
${NAMADAC} --base-dir ${base_dir_a} balance \
--token apfel \
--owner ${SHIELDED_ALIAS_A} \
--node ${LEDGER_ADDR_A}

echo "==== Balances on chain B ===="
${NAMADAC} --base-dir ${base_dir_b} balance \
--owner ${SHIELDED_ALIAS_B} \
--node ${LEDGER_ADDR_B}

echo "~~ Shielded transfer 50 apfel from shielded_b to shielded_b_2 ~~"
${NAMADAC} --base-dir ${base_dir_b} transfer \
--source ${SHIELDED_ALIAS_B} \
--target ${payment_addr_b_2} \
--token "transfer/channel-0/apfel" \
--amount 50 \
--signing-keys relayer \
--node ${LEDGER_ADDR_B}

echo "==== Balance of shielded_b on chain B ===="
${NAMADAC} --base-dir ${base_dir_b} balance \
--owner ${SHIELDED_ALIAS_B} \
--node ${LEDGER_ADDR_B}

echo "==== Balance of shielded_b_2 on chain B ===="
${NAMADAC} --base-dir ${base_dir_b} balance \
--owner ${SHIELDED_ALIAS_B_2} \
--node ${LEDGER_ADDR_B}

echo "~~ Generate the proof from chain A for the following transfer ~~"
resp=$(${NAMADAC} --base-dir ${base_dir_a} ibc-gen-shielded \
--output-folder-path ${base_dir_a} \
--target ${payment_addr_a} \
--token "transfer/channel-0/tnam1qyvfwdkz8zgs9n3qn9xhp8scyf8crrxwuq26r6gy" \
--amount 50 \
--port-id transfer \
--channel-id channel-0 \
--node ${LEDGER_ADDR_A})
memo_path=$(echo $resp | awk '{print $8}')

echo "~~ Transfer back 50 apfel from shielded_b_2 on chain B to chain A ~~"
${NAMADAC} --base-dir ${base_dir_b} ibc-transfer \
--source ${SHIELDED_ALIAS_B_2} \
--receiver ${payment_addr_a} \
--token "transfer/channel-0/apfel" \
--amount 50 \
--signing-keys relayer \
--channel-id channel-0 \
--memo-path ${memo_path} \
--node ${LEDGER_ADDR_B}

# wait for relaying
sleep 15

echo "==== Balances of shielded_a on chain A ===="
${NAMADAC} --base-dir ${base_dir_a} balance \
--owner ${SHIELDED_ALIAS_A} \
--node ${LEDGER_ADDR_A}

echo "==== Balances of shielded_b on chain B ===="
${NAMADAC} --base-dir ${base_dir_b} balance \
--owner ${SHIELDED_ALIAS_B} \
--node ${LEDGER_ADDR_B}

echo "==== Balance of shielded_b_2 on chain B ===="
${NAMADAC} --base-dir ${base_dir_b} balance \
--owner ${SHIELDED_ALIAS_B_2} \
--node ${LEDGER_ADDR_B}

killall hermes
killall namadan

0 comments on commit 3e6b7a1

Please sign in to comment.