Chains
Stacks

Stacks

Veridex supports Stacks as a spoke chain with native passkey verification via Clarity's built-in secp256r1-verify.

Why Stacks?

Stacks is uniquely suited for Veridex because of three native Clarity features:

FeatureBenefit
secp256r1-verifyNative P-256 passkey signature verification — no ZK proofs needed
secp256k1-recover?Native session key verification
Sponsored transactionsGasless operations — relayer pays STX fees
Post-ConditionsProtocol-level spending safety unique to Stacks

Chain Configuration

PropertyTestnetMainnet
CAIP-2 IDstacks:2147483648stacks:1
Wormhole Chain ID5000350004
RPC URLhttps://api.testnet.hiro.sohttps://api.hiro.so
Explorerexplorer.hiro.so/?chain=testnetexplorer.hiro.so
Native TokenSTXSTX

SDK Integration

Core SDK

import { createSDK, StacksClient } from '@veridex/sdk';
 
// Initialize for Stacks testnet
const sdk = createSDK('stacks', { network: 'testnet' });
 
// Register passkey (verified on-chain via secp256r1-verify)
const credential = await sdk.passkey.register('alice', 'My Stacks Wallet');
 
// Get vault address
const vault = sdk.getVaultAddress();

Agent SDK

import { StacksChainClient, StacksSpendingTracker } from '@veridex/agentic-payments';
 
// Stacks-specific chain client with Pyth pricing
const client = new StacksChainClient({ network: 'testnet' });
 
// Get real-time STX price
const stxPrice = await client.getNativeTokenPriceUSD();
console.log('STX/USD:', stxPrice);
 
// USD-aware spending tracker
const tracker = new StacksSpendingTracker({
  dailyLimitUSD: 100,
  network: 'testnet',
});
 
// Convert microSTX to USD
const usdValue = await tracker.convertToUSD(1000000n, 'STX'); // 1 STX

Stacks Utilities

The SDK exports Stacks-specific utilities:

import {
  // Address utilities
  isValidStacksPrincipal,
  isValidStacksStandardPrincipal,
  isValidStacksContractName,
  getStacksNetworkFromAddress,
  getStacksContractPrincipal,
  parseStacksContractPrincipal,
  isStacksContractPrincipal,
  getStacksExplorerTxUrl,
  getStacksExplorerAddressUrl,
 
  // Cryptographic utilities
  stacksCompressPublicKey,
  stacksRsToCompactSignature,
  stacksDerToCompactSignature,
  stacksComputeKeyHash,
  stacksComputeKeyHashFromCoords,
 
  // Hash builders for contract interactions
  stacksBuildRegistrationHash,
  stacksBuildSessionRegistrationHash,
  stacksBuildRevocationHash,
  stacksBuildExecuteHash,
  stacksBuildWithdrawalHash,
 
  // Post-condition builders
  buildStxWithdrawalPostConditions,
  buildStxDepositPostConditions,
  buildSbtcWithdrawalPostConditions,
  buildStacksExecutePostConditions,
  validateStacksPostConditions,
} from '@veridex/sdk';

Deployed Contracts

All contracts are deployed on Stacks testnet:

ContractAddress
vault-traitST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.vault-trait
session-traitST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.session-trait
veridex-session-verifierST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.veridex-session-verifier
veridex-spokeST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.veridex-spoke
veridex-vaultST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.veridex-vault
veridex-wormhole-verifierST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.veridex-wormhole-verifier
veridex-vault-vaaST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.veridex-vault-vaa

Architecture

Three-Layer Spending Limits

Stacks provides a unique three-layer spending safety model:

Passkey Flow on Stacks

Session Key Flow

Post-Conditions

Stacks Post-Conditions are a protocol-level safety feature. They guarantee that a transaction will fail if it transfers more than the specified amount.

import {
  buildStxWithdrawalPostConditions,
  validateStacksPostConditions,
} from '@veridex/sdk';
 
// Build post-conditions for a withdrawal
const postConditions = buildStxWithdrawalPostConditions({
  vaultAddress: 'ST1CKNN84MDPCJRQDHDCY34GMRKQ3TASNNDJQDRTN.veridex-vault',
  amount: 1000000n, // 1 STX in microSTX
});
 
// Validate post-conditions before submitting
const validation = validateStacksPostConditions(postConditions);
if (!validation.valid) {
  console.warn('Post-condition issues:', validation.warnings);
}

Gasless Transactions

Stacks supports native sponsored transactions. The relayer can pay STX gas fees on behalf of users:

// The relayer handles sponsorship automatically
// Users never need to hold STX for gas
const sdk = createSDK('stacks', {
  network: 'testnet',
  relayerUrl: 'https://relayer.veridex.network',
});

Relayer Sponsorship Limits

LimitValue
Per-identity rate50 tx/hour
Per-tx fee cap0.5 STX
Hourly budget50 STX

x402 on Stacks

The Stacks x402 integration uses the x402-stacks protocol for HTTP payment gating:

import { createAgentWallet, StacksChainClient } from '@veridex/agentic-payments';
 
const agent = await createAgentWallet({
  masterCredential: { /* ... */ },
  session: {
    dailyLimitUSD: 50,
    perTransactionLimitUSD: 10,
    expiryHours: 24,
    allowedChains: [50003], // Stacks testnet
  },
});
 
// Agent automatically handles x402 payments in STX
const response = await agent.fetch('https://stacks-data-api.example.com/market');

Testnet Faucet

Get testnet STX from the Stacks faucet:

Next Steps