lez-programs/scripts/demo-full-flow.sh

126 lines
4.9 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# LP-0013 End-to-End Demo Script
# Demonstrates the full mint authority lifecycle against a real LEZ sequencer.
#
# Prerequisites:
# - lgs (logos-scaffold): https://github.com/logos-blockchain/logos-execution-zone
# - spel CLI: https://github.com/logos-co/spel (built with: cargo build --release -p spel-cli)
# - A funded wallet (run: lgs wallet topup)
#
# Usage:
# # From inside an lgs scaffold project directory:
# cd <your-lgs-scaffold-dir>
# RISC0_DEV_MODE=0 bash <path-to-lez-programs>/scripts/demo-full-flow.sh
#
# Environment variables (all optional, auto-detected):
# DEMO_DIR — path to lgs scaffold project (default: current directory)
# LEZ_PROGRAMS — path to lez-programs repo (default: auto-detected from script location)
# SPEL — path to spel binary (default: ~/rebase-lez/spel/target/release/spel)
# TOKEN_BIN — path to token.bin (default: auto-detected from LEZ_PROGRAMS)
# IDL — path to token IDL (default: auto-detected from LEZ_PROGRAMS)
#
# The script will:
# 1. Start a local LEZ sequencer
# 2. Fund the wallet
# 3. Create token accounts
# 4. Submit NewFungibleDefinitionWithAuthority transaction
# 5. Submit Mint transaction
# 6. Submit SetAuthority (revoke) transaction
# 7. Run unit tests to verify authority logic (60 tests)
set -euo pipefail
# Cross-platform timeout command
if command -v gtimeout &>/dev/null; then
TIMEOUT="gtimeout"
elif command -v timeout &>/dev/null; then
TIMEOUT="timeout"
else
echo "Warning: no timeout command found, running without timeout"
TIMEOUT=""
fi
SPEL="${SPEL:-$HOME/rebase-lez/spel/target/release/spel}"
LEZ_PROGRAMS="${LEZ_PROGRAMS:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
IDL="${IDL:-$LEZ_PROGRAMS/artifacts/token-idl.json}"
TOKEN_BIN="${TOKEN_BIN:-$LEZ_PROGRAMS/target/riscv-guest/token-methods/token-guest/riscv32im-risc0-zkvm-elf/release/token.bin}"
DEMO_DIR="${DEMO_DIR:-$(pwd)}"
WALLET_DIR="${WALLET_DIR:-$DEMO_DIR/.scaffold/wallet}"
echo "================================================================"
echo " LP-0013: Token Program Mint Authority — End-to-End Demo"
echo " RISC0_DEV_MODE=${RISC0_DEV_MODE:-not set}"
echo "================================================================"
echo ""
echo "[1/7] Checking localnet..."
cd "$DEMO_DIR"
if lgs localnet status 2>/dev/null | grep -q "ready: true"; then
echo " Localnet already running."
else
lgs localnet start
echo " Localnet started."
fi
echo "[2/7] Funding wallet..."
lgs wallet topup 2>&1 | grep -E "complete|funded|Address" || true
echo " Wallet funded."
echo "[3/7] Creating token accounts..."
DEF_RESULT=$(lgs wallet -- account new --public 2>&1)
DEF_ID=$(echo "$DEF_RESULT" | grep -oE '[0-9a-f]{64}' | head -1)
SUPPLY_RESULT=$(lgs wallet -- account new --public 2>&1)
SUPPLY_ID=$(echo "$SUPPLY_RESULT" | grep -oE '[0-9a-f]{64}' | head -1)
RECIPIENT_RESULT=$(lgs wallet -- account new --public 2>&1)
RECIPIENT_ID=$(echo "$RECIPIENT_RESULT" | grep -oE '[0-9a-f]{64}' | head -1)
echo " Definition account: $DEF_ID"
echo " Supply account: $SUPPLY_ID"
echo " Recipient account: $RECIPIENT_ID"
echo "[4/7] Creating token with mint authority..."
NSSA_WALLET_HOME_DIR="$WALLET_DIR" \
${TIMEOUT:+$TIMEOUT 30} "$SPEL" --idl "$IDL" --program "$TOKEN_BIN" \
-- new-fungible-definition-with-authority \
--definition-target-account "$DEF_ID" \
--holding-target-account "$SUPPLY_ID" \
--name "DemoCoin" \
--initial-supply 1000000 \
--mint-authority "$DEF_ID"
echo " Token 'DemoCoin' submitted. Initial supply: 1,000,000"
sleep 2
echo "[5/7] Minting 500,000 additional tokens..."
NSSA_WALLET_HOME_DIR="$WALLET_DIR" \
${TIMEOUT:+$TIMEOUT 30} "$SPEL" --idl "$IDL" --program "$TOKEN_BIN" \
-- mint \
--definition-account "$DEF_ID" \
--user-holding-account "$RECIPIENT_ID" \
--amount-to-mint 500000
echo " Mint transaction submitted. New total supply: 1,500,000"
sleep 2
echo "[6/7] Revoking mint authority..."
NSSA_WALLET_HOME_DIR="$WALLET_DIR" \
${TIMEOUT:+$TIMEOUT 30} "$SPEL" --idl "$IDL" --program "$TOKEN_BIN" \
-- set-authority \
--definition-account "$DEF_ID" \
--new-authority none
echo " Authority revoked. Supply permanently fixed at 1,500,000"
sleep 2
echo "[7/7] Running unit tests to verify authority logic..."
cd "$LEZ_PROGRAMS"
RISC0_DEV_MODE=0 cargo test -p token_program -p lez-authority --lib 2>&1 | grep -E "test result|authority|ok$"
echo ""
echo "================================================================"
echo " LP-0013 Demo Complete"
echo " Summary:"
echo " [1/4] NewFungibleDefinitionWithAuthority → supply=1,000,000"
echo " [2/4] Mint 500,000 → supply=1,500,000"
echo " [3/4] SetAuthority (revoke) → supply fixed"
echo " [4/4] 60 unit tests passing → all authority cases verified"
echo "================================================================"