SDK Reference
SDK Reference
Code Examples
Common integration patterns for @chainportal/sdk -- token creation, NFT minting, airdrops, and more.
All examples below use EVM hooks (wagmi + viem). Solana, Cosmos, Aptos, SUI, and NEAR hooks follow the exact same pattern — just swap the import and hook name.
Token Creation with Error Handling
import { useTokenCreation } from '@chainportal/sdk';
import { useState } from 'react';
function TokenCreator() {
const { createToken, isCreating, error, result } = useTokenCreation();
const [name, setName] = useState('');
const [symbol, setSymbol] = useState('');
const [supply, setSupply] = useState('1000000');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
try {
const tx = await createToken({
name,
symbol,
decimals: 18,
initialSupply: supply,
features: { mintable: true, burnable: true },
});
console.log('Token deployed at:', tx.contractAddress);
} catch (err) {
console.error('Creation failed:', err);
}
};
return (
<form onSubmit={handleSubmit}>
<input value={name} onChange={(e) => setName(e.target.value)} placeholder="Token Name" />
<input value={symbol} onChange={(e) => setSymbol(e.target.value)} placeholder="Symbol" />
<input value={supply} onChange={(e) => setSupply(e.target.value)} placeholder="Supply" />
<button type="submit" disabled={isCreating}>
{isCreating ? 'Deploying...' : 'Create Token'}
</button>
{error && <p className="text-red-500">{error.message}</p>}
{result && (
<p className="text-green-500">
Deployed: <code>{result.contractAddress}</code>
</p>
)}
</form>
);
}Multi-Chain Token Management
import { useTokenManagement } from '@chainportal/sdk';
import { useAccount } from 'wagmi';
function TokenManager({ contractAddress }: { contractAddress: string }) {
const { address } = useAccount();
const {
mint,
burn,
pause,
unpause,
isLoading,
} = useTokenManagement(contractAddress);
return (
<div className="space-y-4">
<button onClick={() => mint(address!, '1000')}>
Mint 1,000 Tokens
</button>
<button onClick={() => burn('500')}>
Burn 500 Tokens
</button>
<button onClick={() => pause()}>
Pause Transfers
</button>
<button onClick={() => unpause()}>
Resume Transfers
</button>
</div>
);
}Airdrop with CSV Upload
import { useAirdrop } from '@chainportal/sdk';
function AirdropForm({ tokenAddress }: { tokenAddress: string }) {
const { distribute, isLoading } = useAirdrop();
const handleFileUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (!file) return;
const text = await file.text();
const recipients = text
.trim()
.split('\n')
.slice(1) // skip header
.map((line) => {
const [address, amount] = line.split(',');
return { address: address.trim(), amount: amount.trim() };
});
await distribute({
tokenAddress,
recipients,
});
};
return (
<div>
<label>
Upload CSV (address,amount):
<input type="file" accept=".csv" onChange={handleFileUpload} />
</label>
{isLoading && <p>Distributing tokens...</p>}
</div>
);
}Check Factory Status
import { useFactoryStatus, getTokenReadyChains } from '@chainportal/sdk';
function ChainStatus() {
// Check specific chain
const { isReady } = useFactoryStatus(11155111); // Sepolia
// Get all ready chains
const readyChains = getTokenReadyChains();
return (
<div>
<p>Sepolia ready: {isReady ? 'Yes' : 'No'}</p>
<p>Total ready chains: {readyChains.length}</p>
<ul>
{readyChains.map((chain) => (
<li key={chain.id}>{chain.name}</li>
))}
</ul>
</div>
);
}Solana Token Creation
import { useSolanaTokenCreation } from '@chainportal/sdk';
import { useWallet } from '@solana/wallet-adapter-react';
function SolanaTokenCreator() {
const wallet = useWallet();
const { createToken, isCreating } = useSolanaTokenCreation();
const handleCreate = async () => {
if (!wallet.publicKey) return;
await createToken({
name: 'My Solana Token',
symbol: 'MST',
decimals: 9,
initialSupply: '1000000',
mintAuthority: wallet.publicKey.toBase58(),
});
};
return (
<button onClick={handleCreate} disabled={isCreating || !wallet.connected}>
Create SPL Token
</button>
);
}