Skip to main content

Example: Create Atom from String

This example demonstrates creating an atom from a plain text string, including setup, error handling, and querying the result.

Complete Code​

import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
createAtomFromString,
getAtomDetails,
wait,
} from '@0xintuition/sdk'
import { createPublicClient, createWalletClient, http, parseEther, formatEther } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'

async function main() {
// 1. Setup account and clients
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)

const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
})

const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: http(),
account,
})

const address = getMultiVaultAddressFromChainId(intuitionTestnet.id)

console.log('Connected to Intuition Testnet')
console.log('Account:', account.address)

// 2. Check balance
const balance = await publicClient.getBalance({ address: account.address })
console.log('Balance:', formatEther(balance), 'tTRUST')

if (balance < parseEther('0.1')) {
throw new Error('Insufficient balance. Get testnet tokens from faucet.')
}

// 3. Create atom
const atomData = 'TypeScript'
const depositAmount = parseEther('0.01')

console.log(`\nCreating atom: "${atomData}"`)
console.log('Deposit:', formatEther(depositAmount), 'tTRUST')

const atom = await createAtomFromString(
{ walletClient, publicClient, address },
atomData,
depositAmount
)

console.log('\nβœ“ Atom created successfully!')
console.log(' Atom ID:', atom.state.termId)
console.log(' Creator:', atom.state.creator)
console.log(' Vault:', atom.state.atomWallet)
console.log(' Transaction:', atom.transactionHash)

// 4. Wait for indexing
console.log('\nWaiting for indexing...')
await wait(atom.transactionHash, {
pollingInterval: 1000,
timeout: 30000,
})

// 5. Query atom details
console.log('Fetching atom details...')
const details = await getAtomDetails(atom.state.termId)

console.log('\nβœ“ Atom Details:')
console.log(' Label:', details.label)
console.log(' Creator:', details.creator)
console.log(' Total Shares:', details.vault.totalShares)
console.log(' Share Price:', details.vault.currentSharePrice)
console.log(' Positions:', details.vault.positionCount)

console.log('\nSuccess!')
}

main()
.then(() => process.exit(0))
.catch((error) => {
console.error('Error:', error)
process.exit(1)
})

Run the Example​

# Set your private key
export PRIVATE_KEY=0xYOUR_PRIVATE_KEY

# Run the script
npx tsx create-atom-example.ts

Expected Output​

Connected to Intuition Testnet
Account: 0xYourAddress
Balance: 10.5 tTRUST

Creating atom: "TypeScript"
Deposit: 0.01 tTRUST

βœ“ Atom created successfully!
Atom ID: 0x1234567890abcdef...
Creator: 0xYourAddress
Vault: 0xVaultAddress
Transaction: 0xTransactionHash

Waiting for indexing...
Fetching atom details...

βœ“ Atom Details:
Label: TypeScript
Creator: 0xYourAddress
Total Shares: 1000000
Share Price: 0.01
Positions: 1

Success!

See Also​