Protocol Package Overview
The @0xintuition/protocol package is a comprehensive TypeScript/JavaScript SDK for interacting with the Intuition onchain knowledge graph. It provides low-level access to build, query, and manage atoms (entities), triples (statements), vaults, and bonding rewards on the Intuition blockchain.
What is the Protocol Package?β
The Protocol package is built on top of viem, providing type-safe, performant access to all Intuition smart contracts. It handles:
- Atom Management: Create and query entities (people, organizations, concepts)
- Triple Management: Create statements connecting atoms (subject-predicate-object)
- Vault Operations: Deposit and redeem assets, manage shares
- Trust Bonding: Participate in epoch-based rewards and staking
- Event Parsing: Extract structured data from transaction events
- Configuration: Query protocol parameters and fees
Installationβ
Install the package along with its peer dependency viem:
- npm
- pnpm
- yarn
- bun
npm install viem @0xintuition/protocol
pnpm install viem @0xintuition/protocol
yarn add viem @0xintuition/protocol
bun install viem @0xintuition/protocol
Peer Dependencies: viem ^2.0.0
Quick Startβ
Here's a minimal example to create an atom:
import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
multiVaultCreateAtoms,
multiVaultGetAtomCost,
eventParseAtomCreated,
} from '@0xintuition/protocol'
import { createPublicClient, createWalletClient, http, toHex } from 'viem'
// Setup clients
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
})
const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: http(),
account, // your account (metamask, private key, etc)
})
// Get contract address
const address = getMultiVaultAddressFromChainId(intuitionTestnet.id)
// Create an atom
const atomCost = await multiVaultGetAtomCost({ address, publicClient })
const atomUri = toHex('Hello, Intuition!')
const txHash = await multiVaultCreateAtoms(
{ address, walletClient, publicClient },
{
args: [[atomUri], [atomCost]],
value: atomCost,
}
)
// Parse the created atom
const events = await eventParseAtomCreated(publicClient, txHash)
console.log('Atom ID:', events[0].args.termId)
Key Featuresβ
Type-Safe Interactionsβ
Built on viem for full TypeScript support with auto-completion and type inference:
import type { ReadConfig, WriteConfig } from '@0xintuition/protocol'
// Read-only operations
const readConfig: ReadConfig = {
address: contractAddress,
publicClient: publicClient,
}
// Write operations (transactions)
const writeConfig: WriteConfig = {
address: contractAddress,
publicClient: publicClient,
walletClient: walletClient,
}
Multi-Network Supportβ
Works seamlessly across Intuition Mainnet and Testnet:
import { intuitionMainnet, intuitionTestnet } from '@0xintuition/protocol'
// Mainnet (Chain ID: 1155)
const mainnetClient = createPublicClient({
chain: intuitionMainnet,
transport: http(),
})
// Testnet (Chain ID: 13579)
const testnetClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
})
Comprehensive Event Parsingβ
Extract structured data from transaction receipts:
import {
eventParseAtomCreated,
eventParseTripleCreated,
eventParseDeposited,
} from '@0xintuition/protocol'
// Parse multiple event types from a single transaction
const atomEvents = await eventParseAtomCreated(publicClient, txHash)
const depositEvents = await eventParseDeposited(publicClient, txHash)
console.log('Atom ID:', atomEvents[0]?.args.termId)
console.log('Shares received:', depositEvents[0]?.args.shares)
Batch Operationsβ
Optimize gas costs with batch operations:
import { multiVaultDepositBatch } from '@0xintuition/protocol'
const txHash = await multiVaultDepositBatch(
{ address, walletClient, publicClient },
{
args: [
receiverAddress,
[vaultId1, vaultId2, vaultId3], // Multiple vaults
[curveId1, curveId2, curveId3], // Bonding curves
[assets1, assets2, assets3], // Deposit amounts
[minShares1, minShares2, minShares3], // Slippage protection
],
value: assets1 + assets2 + assets3,
}
)
Package Structureβ
The Protocol package is organized into several modules:
- MultiVault Operations: Core atom, triple, and vault functions
- Trust Bonding: Epoch-based rewards and staking
- Wrapped Trust: Native token wrapping/unwrapping
- Event Parsing: Transaction event extraction
- Configuration: Protocol parameters and deployments
- Types: TypeScript type definitions
- ABIs: Contract ABIs for all protocol contracts
When to Use Protocol Packageβ
The Protocol package is ideal when you need:
- Low-level control: Direct access to contract functions with minimal abstraction
- Performance: Optimized viem-based interactions
- Batch operations: Create multiple atoms/triples or deposit to multiple vaults in one transaction
- Event parsing: Extract detailed event data from transactions
- Custom workflows: Build your own higher-level abstractions
For simpler, more user-friendly interactions, consider using the SDK Package which provides higher-level abstractions including IPFS pinning, JSON-LD support, and simplified APIs.
Next Stepsβ
- Configuration Guide - Set up clients and networks
- API Reference - Explore all available functions
- Examples - See complete workflows
Resourcesβ
- Repository: github.com/0xIntuition/intuition-ts
- NPM Package: @0xintuition/protocol
- Viem Documentation: viem.sh
See Alsoβ
- SDK Package - Higher-level API with IPFS and JSON-LD support
- GraphQL API - Query protocol data efficiently
- Primitives Overview - Understand atoms, triples, and signals