Installation & Setup
The Intuition SDK is a comprehensive TypeScript library for building applications on the Intuition protocol. This guide covers installation, configuration, and getting your development environment ready.
Prerequisitesβ
- Node.js: Version 18.x or higher
- Package Manager: npm, pnpm, yarn, or bun
- TypeScript (recommended): Version 5.x or higher
Auto-Generated Package Documentationβ
For a complete list of 0xintuition/sdk functions and interfaces, see the Intuition SDK documentation.
For a complete list of 0xintuition/protocol functions and interfaces, see the Intuition Protocol documentation.
For a complete list of 0xintuition/graphql functions and interfaces, see the Intuition Protocol documentation.
Installationβ
Install the SDK using your preferred package manager:
- npm
- pnpm
- bun
npm install @0xintuition/sdk viem@^2.0.0
pnpm add @0xintuition/sdk viem@^2.0.0
bun add @0xintuition/sdk viem@^2.0.0
The SDK requires viem@2.x as a peer dependency. Viem is a lightweight, type-safe Ethereum library that powers all blockchain operations.
Verify Installationβ
Create a test file to verify everything is working:
import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
} from '@0xintuition/sdk'
console.log('Network:', intuitionTestnet.name)
console.log('Chain ID:', intuitionTestnet.id)
console.log('MultiVault:', getMultiVaultAddressFromChainId(intuitionTestnet.id))
Run it with npx tsx test-install.ts or your preferred TypeScript runner.
Client Configurationβ
The SDK uses Viem clients for blockchain interactions. You need two types:
| Client Type | Purpose | Required For |
|---|---|---|
| Public Client | Read-only operations | Querying data, checking balances |
| Wallet Client | Write operations | Creating atoms, triples, deposits |
Basic Setupβ
import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
} from '@0xintuition/sdk'
import { createPublicClient, createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
// 1. Create account from private key
const account = privateKeyToAccount('0xYOUR_PRIVATE_KEY')
// 2. Create public client (for reading data)
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
})
// 3. Create wallet client (for transactions)
const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: http(),
account,
})
// 4. Get contract address
const address = getMultiVaultAddressFromChainId(intuitionTestnet.id)
Configuration Objectβ
Most SDK functions accept a configuration object:
import type { WriteConfig } from '@0xintuition/sdk'
const config: WriteConfig = {
address, // MultiVault contract address
publicClient, // For reading blockchain data
walletClient, // For sending transactions
}
Network Configurationβ
The SDK supports multiple networks with built-in chain definitions.
Supported Networksβ
| Network | Chain ID | Type | Status |
|---|---|---|---|
| Intuition Mainnet | 1155 | Production | β Active |
| Intuition Testnet | 13579 | Development | β Active |
| Base Mainnet | 8453 | Production | β Active |
| Base Sepolia | 84532 | Development | β Active |
Testnet Configurationβ
import { intuitionTestnet } from '@0xintuition/sdk'
import { createPublicClient, http } from 'viem'
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
})
// Network details available:
// Chain ID: 13579
// Currency: tTRUST
// RPC: https://testnet.rpc.intuition.systems/http
// Explorer: https://testnet.explorer.intuition.systems
Mainnet Configurationβ
import { intuitionMainnet } from '@0xintuition/sdk'
import { createPublicClient, http } from 'viem'
const publicClient = createPublicClient({
chain: intuitionMainnet,
transport: http(),
})
// Network details available:
// Chain ID: 1155
// Currency: TRUST
// RPC: https://rpc.intuition.systems/http
// Explorer: https://explorer.intuition.systems
Contract Addressesβ
The SDK provides utilities to get contract addresses for any supported network:
import {
getMultiVaultAddressFromChainId,
getContractAddressFromChainId,
intuitionDeployments,
} from '@0xintuition/sdk'
// Get MultiVault address (most commonly used)
const multiVaultAddress = getMultiVaultAddressFromChainId(chainId)
// Get other contract addresses
const trustBonding = getContractAddressFromChainId('TrustBonding', chainId)
const wrappedTrust = getContractAddressFromChainId('WrappedTrust', chainId)
Account Optionsβ
Private Keyβ
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount('0xYOUR_PRIVATE_KEY')
Mnemonic Phraseβ
import { mnemonicToAccount } from 'viem/accounts'
const account = mnemonicToAccount(
'your twelve word mnemonic phrase goes here'
)
Browser Wallet (MetaMask, etc.)β
import { createWalletClient, custom } from 'viem'
import { intuitionTestnet } from '@0xintuition/sdk'
const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: custom(window.ethereum),
})
Environment Variablesβ
Store sensitive data in environment variables:
PRIVATE_KEY=0xYOUR_PRIVATE_KEY
PINATA_API_JWT=your-pinata-jwt-token
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const pinataApiJWT = process.env.PINATA_API_JWT
TypeScript Configurationβ
For optimal TypeScript support:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"lib": ["ES2020"],
"moduleResolution": "bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true
}
}
Advanced Configurationβ
Custom RPC Endpointβ
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http('https://your-custom-rpc-endpoint.com'),
})
Fallback Transportsβ
Configure backup RPC endpoints for reliability:
import { fallback, http } from 'viem'
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: fallback([
http('https://testnet.rpc.intuition.systems/http'),
http('https://backup-rpc.example.com'),
]),
})
Batch Requests (Multicall)β
Enable batching for multiple read operations:
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
batch: {
multicall: true,
},
})
Complete Configuration Exampleβ
import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
} from '@0xintuition/sdk'
import type { WriteConfig } from '@0xintuition/sdk'
import {
createPublicClient,
createWalletClient,
http,
fallback,
} from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
// Account
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
// Public client with fallback and batching
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: fallback([
http('https://testnet.rpc.intuition.systems/http'),
http('https://backup-rpc.example.com'),
]),
batch: {
multicall: true,
},
})
// Wallet client
const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: http('https://testnet.rpc.intuition.systems/http'),
account,
})
// Contract address
const address = getMultiVaultAddressFromChainId(intuitionTestnet.id)
// Export configuration
export const config: WriteConfig = {
address,
publicClient,
walletClient,
pinataApiJWT: process.env.PINATA_API_JWT,
}
Optional: Pinata for IPFSβ
For IPFS operations (uploading metadata), you'll need a Pinata API token:
- Sign up at pinata.cloud
- Create an API key and get your JWT token
- Pass it in the config when using IPFS upload functions
import { createAtomFromIpfsUpload } from '@0xintuition/sdk'
const atom = await createAtomFromIpfsUpload(
{
walletClient,
publicClient,
address,
pinataApiJWT: 'your-pinata-jwt-token',
},
{
name: 'My Project',
description: 'A blockchain project',
}
)
Local Developmentβ
For contributing or testing with a custom build:
- npm
- pnpm
- bun
git clone https://github.com/0xIntuition/intuition-ts.git
cd intuition-ts/packages/sdk
npm install
npm run build
npm link
# In your project
npm link @0xintuition/sdk
git clone https://github.com/0xIntuition/intuition-ts.git
cd intuition-ts/packages/sdk
pnpm install
pnpm build
pnpm link --global
# In your project
pnpm link --global @0xintuition/sdk
git clone https://github.com/0xIntuition/intuition-ts.git
cd intuition-ts/packages/sdk
bun install
bun run build
bun link
# In your project
bun link @0xintuition/sdk
Troubleshootingβ
Module Resolution Errorsβ
- Ensure
viemis version^2.0.0or higher - Check your
tsconfig.jsonmodule resolution settings - Clear cache and reinstall:
rm -rf node_modules package-lock.json
npm install
Type Errorsβ
- Ensure TypeScript version is 5.x or higher
- Update
@types/nodeto the latest version - Run
npx tsc --noEmitto check for type errors
Package Informationβ
- NPM: @0xintuition/sdk
- Repository: github.com/0xIntuition/intuition-ts
- Discord: Intuition Discord
Next Stepsβ
- Quick Start - Create your first atom and triple
- Working with Atoms - Learn about creating atoms
- React Integration - Use the SDK with React
See Alsoβ
- Viem Documentation
- Protocol Package - Low-level contract interactions
- GraphQL API - Query protocol data