Quai Vision

Examples

Copy-paste code snippets and run live demos

Validate Address
Addresses
Check if an address is a valid Quai or Qi address
import { isQuaiAddress, isQiAddress } from 'quais';

const address = '0x0012345678901234567890123456789012345678';

if (isQuaiAddress(address)) {
  console.log('Valid Quai address');
} else if (isQiAddress(address)) {
  console.log('Valid Qi address');
} else {
  console.log('Invalid address');
}
Connect to Provider
Providers
Create a JsonRpcProvider connection to the Quai network
import { JsonRpcProvider } from 'quais';

const provider = new JsonRpcProvider(
  'https://rpc.quai.network',
  undefined,
  { usePathing: true }
);

const blockNumber = await provider.getBlockNumber();
console.log('Current block:', blockNumber);
Read Contract State
Contracts
Call a read-only method on a smart contract
import { Contract, JsonRpcProvider } from 'quais';

const provider = new JsonRpcProvider('https://rpc.quai.network');
const tokenAddress = '0x...';
const abi = ['function symbol() view returns (string)'];

const contract = new Contract(tokenAddress, abi, provider);
const symbol = await contract.symbol();

console.log('Token symbol:', symbol);
Send Transaction
Transactions
Create and send a Quai transaction
import { Wallet, parseQuai } from 'quais';

const wallet = new Wallet(privateKey, provider);

const tx = {
  to: '0x...',
  value: parseQuai('1.5'),
  gasLimit: 21000n,
};

const response = await wallet.sendTransaction(tx);
const receipt = await response.wait();

console.log('Transaction confirmed:', receipt.hash);
Create HD Wallet
Wallets
Generate a new Quai HD wallet with mnemonic
import { QuaiHDWallet, Mnemonic } from 'quais';

// Generate new mnemonic
const mnemonic = Mnemonic.fromEntropy(randomBytes(16));
console.log('Mnemonic:', mnemonic.phrase);

// Create HD wallet
const wallet = QuaiHDWallet.fromMnemonic(mnemonic);

// Derive address for Cyprus-1
const address = await wallet.getNextAddress(0, 'Cyprus-1');
console.log('Address:', address);
Derive Zone Address
Wallets
Derive addresses for specific zones from HD wallet
import { QuaiHDWallet } from 'quais';

const wallet = QuaiHDWallet.fromMnemonic(mnemonic);

// Derive addresses for different zones
const zones = ['Cyprus-1', 'Paxos-1', 'Hydra-1'];

for (const zone of zones) {
  const address = await wallet.getNextAddress(0, zone);
  console.log(`${zone}: ${address}`);
}
Qi UTXO Transaction
Transactions
Send a Qi transaction using UTXO model
import { QiHDWallet, QiTransaction } from 'quais';

const wallet = QiHDWallet.fromMnemonic(mnemonic);

// Get available UTXOs
const utxos = await wallet.getUtxos();

// Create Qi transaction
const tx = new QiTransaction({
  inputs: utxos.slice(0, 2),
  outputs: [
    { address: recipientAddress, amount: 1000n }
  ]
});

// Sign and send
const signed = await wallet.signTransaction(tx);
const hash = await provider.sendTransaction(signed);
Cross-Shard Transfer
Transactions
Send tokens between different shards
import { Wallet, parseQuai } from 'quais';

// From Cyprus-1 to Paxos-1
const fromWallet = new Wallet(privateKey, cyprusProvider);

const tx = {
  to: '0x10...', // Paxos-1 address
  value: parseQuai('5.0'),
  // Cross-shard automatically detected from address prefix
};

const response = await fromWallet.sendTransaction(tx);
// Transaction will route through Prime chain
const receipt = await response.wait();
Quick Reference
Common imports and utilities

Core Imports

import {
  JsonRpcProvider,
  WebSocketProvider,
  BrowserProvider,
  Contract,
  Wallet,
  QuaiHDWallet,
  QiHDWallet,
} from 'quais';

Utility Functions

import {
  parseQuai,
  formatQuai,
  isQuaiAddress,
  isQiAddress,
  getShardForAddress,
} from 'quais';