Skip to content

Instantly share code, notes, and snippets.

@lenkan
Created March 11, 2026 13:25
Show Gist options
  • Select an option

  • Save lenkan/f965bd0eaa41e7ea665f6aa1af4ebe0b to your computer and use it in GitHub Desktop.

Select an option

Save lenkan/f965bd0eaa41e7ea665f6aa1af4ebe0b to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
# If not kli is installed, install it
if ! command -v kli &> /dev/null; then
echo "kli could not be found, installing it..."
python3 -m venv .venv
source .venv/bin/activate
pip install keri==1.2.12
fi
pkill kli || true
function cleanup() {
pkill kli || true
}
trap cleanup EXIT
suffix=$(head /dev/urandom | tr -dc a-z0-9 | head -c4)
delegator="delegator_${suffix}"
delegator_witness="delegator_witness_${suffix}"
delegate="delegate_${suffix}"
delegate_witness="delegate_witness_${suffix}"
delegator_witness_http_port="5642"
delegator_witness_tcp_port="5632"
delegate_witness_http_port="5643"
delegate_witness_tcp_port="5633"
delegator_witness_url="http://127.0.0.1:$delegator_witness_http_port"
delegate_witness_url="http://127.0.0.1:$delegate_witness_http_port"
config_dir="$(mktemp -d)/keri"
mkdir -p "$config_dir/keri/cf"
delegator_config_json="$config_dir/keri/cf/delegator_config.json"
delegate_config_json="$config_dir/keri/cf/delegate_config.json"
kli init --name "$delegator_witness" --nopasscode
kli incept --name "$delegator_witness" --alias witness --icount 1 --ncount 0 --isith 1 --nsith 0 --toad 0
delegator_witness_aid=$(kli aid --name "$delegator_witness" --alias witness)
kli ends add --name "$delegator_witness" --alias witness --eid "$delegator_witness_aid" --role controller
kli location add --name "$delegator_witness" --alias witness --url "$delegator_witness_url"
kli witness start --name "$delegator_witness" --alias witness -H "$delegator_witness_http_port" -T "$delegator_witness_tcp_port" &
delegator_witness_pid=$!
while ! curl -s "$delegator_witness_url" > /dev/null; do
echo "Waiting for delegator witness to be ready..."
sleep 1
done
kli init --name "$delegate_witness" --nopasscode
kli incept --name "$delegate_witness" --alias witness --icount 1 --ncount 0 --isith 1 --nsith 0 --toad 0
delegate_witness_aid=$(kli aid --name "$delegate_witness" --alias witness)
kli ends add --name "$delegate_witness" --alias witness --eid "$delegate_witness_aid" --role controller
kli location add --name "$delegate_witness" --alias witness --url "$delegate_witness_url"
kli witness start --name "$delegate_witness" --alias witness -H "$delegate_witness_http_port" -T "$delegate_witness_tcp_port" &
delegate_witness_pid=$!
while ! curl -s "$delegate_witness_url" > /dev/null; do
echo "Waiting for delegate witness to be ready..."
sleep 1
done
cat << EOF > "$delegator_config_json"
{
"dt": "2026-03-10T00:00:00.000000+00:00",
"iurls": [
"$delegator_witness_url/oobi/$delegator_witness_aid/controller"
]
}
EOF
cat << EOF > "$delegate_config_json"
{
"dt": "2026-03-10T00:00:00.000000+00:00",
"iurls": [
"$delegate_witness_url/oobi/$delegate_witness_aid/controller"
]
}
EOF
kli init --name "$delegator" --config-dir "$config_dir" --config-file delegator_config --nopasscode
kli init --name "$delegate" --config-dir "$config_dir" --config-file delegate_config --nopasscode
kli incept --name "$delegator" --alias delegator --icount 1 --ncount 1 --isith 1 --nsith 1 --transferable --toad 1 --wit "$delegator_witness_aid"
kli ends add --name "$delegator" --alias delegator --eid "$delegator_witness_aid" --role mailbox
delegator_aid=$(kli aid --name "$delegator" --alias delegator)
delegator_oobi=$(kli oobi generate --name "$delegator" --alias delegator --role witness | tail -n 1)
kli incept --name "$delegate" --alias proxy --icount 1 --ncount 1 --isith 1 --nsith 1 --transferable --toad 1 --wit "$delegate_witness_aid"
kli ends add --name "$delegate" --alias proxy --eid "$delegate_witness_aid" --role mailbox
proxy_oobi=$(kli oobi generate --name "$delegate" --alias proxy --role witness | tail -n 1)
kli oobi resolve --name "$delegate" --oobi-alias delegator --oobi "$delegator_oobi"
kli oobi resolve --name "$delegator" --oobi-alias delegate --oobi "$proxy_oobi"
kli incept --name "$delegate" --alias delegate --icount 1 --ncount 1 --isith 1 --nsith 1 --transferable --toad 1 --wit "$delegate_witness_aid" --delpre "$delegator_aid" --proxy proxy &
PID_LIST="$!"
kli delegate confirm --name "$delegator" --alias delegator --interact -Y &
PID_LIST+=" $!"
wait $PID_LIST
kli ends add --name "$delegate" --alias delegate --eid "$delegate_witness_aid" --role mailbox
delegate_aid=$(kli aid --name "$delegate" --alias delegate)
delegate_oobi=$(kli oobi generate --name "$delegate" --alias delegate --role witness | tail -n 1)
kli kevers --name "$delegator" --prefix "$delegate_aid"
kli kevers --name "$delegate" --prefix "$delegate_aid"
kli kevers --name "$delegate_witness" --prefix "$delegate_aid"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment