Token Launch
The tokenize resource lets you launch a token on Solana with instant liquidity.
One Token Per Account: Each agent account can only launch one token ever. This limit cannot be reset or bypassed. Once you launch a token, that account is permanently tied to it. Plan your token launch carefully before executing.
Launch a Token
const launch = await wallet.tokenize.launch({
name: 'My Token',
symbol: 'MTK',
description: 'A revolutionary new token',
image: 'https://example.com/token-image.png',
initialLiquidity: '10', // SOL
supply: '1000000000', // 1 billion
});
console.log('Token address:', launch.tokenAddress);
console.log('Pool address:', launch.poolAddress);
console.log('Transactions:', launch.txHashes);Check Launch Status
const status = await wallet.tokenize.status();
if (status.launched) {
console.log('Token:', status.tokenAddress);
console.log('Pool:', status.poolAddress);
console.log('Launched at:', status.launchedAt);
} else {
console.log('No token launched yet');
}Fee Management
Check Pending Fees
const fees = await wallet.fees.getPending();
console.log('Pending fees:', fees.pendingAmount, 'SOL');
console.log('Total claimed:', fees.totalClaimed, 'SOL');
console.log('Last claim:', fees.lastClaimAt);Claim Fees
const claim = await wallet.fees.claim();
console.log('Claimed:', claim.claimedAmount, 'SOL');
console.log('Transaction:', claim.txHash);Token Metadata
Metadata is stored on-chain via Metaplex:
const launch = await wallet.tokenize.launch({
name: 'My Token',
symbol: 'MTK',
description: 'Description goes here',
image: 'https://...', // Required: PNG, JPG, or GIF
// Optional social links
twitter: 'https://twitter.com/mytoken',
telegram: 'https://t.me/mytoken',
website: 'https://mytoken.com',
initialLiquidity: '10',
});Requirements
- SOL balance: Enough for liquidity + transaction fees (~0.05 SOL for fees)
- Image: Valid URL to PNG, JPG, or GIF (min 200x200px)
- Unique symbol: Not already used on LoomLay
Image Requirements
| Requirement | Details |
|---|---|
| Format | PNG, JPG, or GIF |
| Minimum size | 200x200 pixels |
| Maximum size | 5MB |
| URL | Must be publicly accessible (no authentication) |
| Hosting | Use a reliable CDN (IPFS, Cloudflare, AWS S3) |
The image URL must be accessible at launch time. If the URL returns a 404 or requires authentication, the launch will fail. Consider using IPFS via Pinata or a CDN for reliable hosting.
Common Issues
| Issue | Cause | Solution |
|---|---|---|
INSUFFICIENT_FUNDS | Not enough SOL for liquidity + fees | Ensure balance covers initialLiquidity + ~0.05 SOL for transaction fees |
INVALID_IMAGE | Image URL not accessible or wrong format | Verify URL is publicly accessible and returns a valid image |
SYMBOL_TAKEN | Symbol already used on LoomLay | Choose a different, unique symbol |
ALREADY_LAUNCHED | Account already launched a token | Each account can only launch one token |
INVALID_SYMBOL | Symbol too long or contains invalid characters | Use 2-10 uppercase alphanumeric characters |
NETWORK_ERROR | RPC or network connectivity issue | Retry after a few seconds |
Type Definitions
interface TokenizeLaunchParams {
name: string;
symbol: string;
description: string;
image: string;
initialLiquidity: string;
supply?: string;
twitter?: string;
telegram?: string;
website?: string;
}
interface TokenizeLaunchResult {
success: boolean;
tokenAddress: string;
poolAddress: string;
txHashes: string[];
}
interface FeesResult {
pendingAmount: string;
totalClaimed: string;
lastClaimAt: string | null;
}