Skip to main content

Overview

Starknet is a Layer 2 scaling solution that uses STARK proofs for validity. zkTerm integrates with Starknet for on-chain zkID verification, STRK token transfers, and cross-chain bridging.

Features

  1. zkID Proof Registry - Store zkID verification proofs on-chain via Cairo smart contract
  2. Wallet Management - Create and manage Starknet wallets within zkTerm
  3. STRK Transfers - Send STRK tokens to any Starknet address
  4. Cross-Chain Bridge - Bridge ETH/SOL to Starknet via StarkGate + Hyperlane

zkID Proof Registry

zkTerm deploys a Cairo smart contract on Starknet Sepolia that stores zkID proofs: Contract Functions:
FunctionDescription
store_proofStore a new zkID proof with proof_id, proof_hash, and zk_id
get_proofRetrieve proof details by proof_id
verify_proof_existsCheck if a proof exists on-chain
Events:
ProofStored {
    proof_id: felt252,
    proof_hash: felt252,
    zk_id: felt252,
    owner: ContractAddress,
    timestamp: u64
}

Terminal Commands

List Starknet Wallets

zk wallet list --chain starknet

Create Starknet Wallet

zk wallet create --chain starknet --name "my-stark-wallet"

Transfer STRK

zk starknet transfer <amount> --to <address> --from <wallet>
Example:
> zk starknet transfer 1.5 --to 0x1234...5678 --from mystark
Password: ********

STRK TRANSFER

  Amount:    1.5 STRK
  To:        0x1234...5678
  From:      mystark (0xabcd...ef01)

  TxHash:    0x7890...1234
  Explorer:  https://starkscan.co/tx/0x7890...1234

Check Balance

zk starknet balance <address>

Cross-Chain Bridge

Ethereum to Starknet

zk bridge eth <amount> --to <starknet-address>
Supported tokens: ETH, USDC, USDT, WBTC, DAI, STRK, WETH

Solana to Starknet

zk bridge sol <amount> --to <starknet-address>
Supported tokens: SOL, DREAMS, TRUMP, JUP, BONK, PUMP, FARTCOIN Bridge uses StarkGate with Hyperlane for Solana route.

Check Bridge Status

zk bridge status <tx-id>

Bridge History

zk bridge history

API Reference

List Wallets

GET /api/starknet/wallets
Response:
{
  "wallets": [
    {
      "id": "uuid",
      "name": "my-stark-wallet",
      "address": "0x1234...5678",
      "isActive": true
    }
  ]
}

Transfer STRK

POST /api/starknet/transfer
Content-Type: application/json

{
  "amount": "1.5",
  "recipientAddress": "0x1234...5678",
  "password": "your-password",
  "walletId": "wallet-uuid"
}
Response:
{
  "success": true,
  "txHash": "0x7890...1234",
  "explorerUrl": "https://starkscan.co/tx/0x7890..."
}

Initiate Bridge

POST /api/bridge/initiate
Content-Type: application/json

{
  "bridgeType": "sol-starknet",
  "direction": "deposit",
  "token": "SOL",
  "amount": "1.5",
  "destAddress": "0x1234...5678"
}
Response:
{
  "success": true,
  "transaction": { ... },
  "starkgateUrl": "https://starkgate.starknet.io/solana/bridge?...",
  "instructions": {
    "step1": "Click the StarkGate URL",
    "step2": "Connect wallet and confirm",
    "step3": "Track with zk bridge status <tx-id>"
  }
}

Technical Details

RPC Configuration

zkTerm connects to Starknet via RPC providers with fallback:
const providers = [
  'https://starknet-mainnet.public.blastapi.io',
  'https://free-rpc.nethermind.io/mainnet-juno',
];

Gas Sponsorship

Server wallet pays gas fees for zkID proof submissions so users don’t need STRK tokens.

Security

  1. Private keys encrypted with user password
  2. Wallet mutex locking prevents concurrent access
  3. Private keys zeroized from memory after use

Environment Variables

VariableDescription
STARKNET_RPC_URLStarknet RPC endpoint
STARKNET_PRIVATE_KEYServer wallet for gas sponsorship
ZKID_REGISTRY_ADDRESSCairo contract address