Examples
Copy-paste code snippets and run live demos
Validate Address
AddressesCheck 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
ProvidersCreate 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
ContractsCall 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
TransactionsCreate 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
WalletsGenerate 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
WalletsDerive 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
TransactionsSend 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
TransactionsSend 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';