@totemsdk/chain-provider
v0.1.3
Published
Unified ChainStateProvider interface for Totem SDK — Hosted, PureMinima, Composite
Downloads
1,242
Maintainers
Readme
@totemsdk/chain-provider
Unified abstraction over all chain data sources.
A strategy pattern for chain access. Any Totem SDK tool that needs on-chain data accepts a ChainStateProvider. Swap implementations without changing application code.
Install
npm install @totemsdk/chain-providerWhat's inside
The interface
interface ChainStateProvider {
getCoins(query: CoinQuery): Promise<Coin[]>;
getCoin(id: string): Promise<Coin | null>;
getMMRProof(coinId: string): Promise<MMRProof>;
getChainTip(): Promise<ChainTip>;
getToken(id: string): Promise<Token | null>;
searchTokens(query: string): Promise<Token[]>;
broadcastTxPoW(hex: string): Promise<BroadcastResult>;
}Concrete implementations
| Class | Connects to |
|-------|------------|
| HostedProvider | Axia / MEG hosted API (requires project credentials) |
| PureMinimaRpcProvider | A local or self-hosted PureMinima node directly |
| LookupNodeProvider | A personal lookup node over Hyperswarm DHT |
| CompositeProvider | Fans out across multiple providers with fallback logic |
Five other packages (omnia, statechain, lookup-node, lookup-client, chain-provider itself) accept ChainStateProvider — this is the pivot point between the upper SDK and chain data.
Usage
Hosted provider (fastest setup)
import { HostedProvider } from '@totemsdk/chain-provider';
const provider = new HostedProvider({
baseUrl: 'https://api.axia.to',
projectId: 'your-project-id',
projectSecret: process.env.AXIA_SECRET,
});
const tip = await provider.getChainTip();
const coins = await provider.getCoins({ address: 'Mx...' });Self-hosted node
import { PureMinimaRpcProvider } from '@totemsdk/chain-provider';
const provider = new PureMinimaRpcProvider({
nodeUrl: 'http://localhost:9005',
});Composite with fallback
import { CompositeProvider, HostedProvider, PureMinimaRpcProvider } from '@totemsdk/chain-provider';
const provider = new CompositeProvider([
new PureMinimaRpcProvider({ nodeUrl: 'http://localhost:9005' }),
new HostedProvider({ baseUrl: 'https://api.axia.to', projectId: '...' }),
]);
// Queries hit the first provider; fallback to the second on errorPersonal lookup node
import { LookupNodeProvider } from '@totemsdk/chain-provider';
const provider = new LookupNodeProvider({
publicKey: '...your-lookup-node-pubkey...',
});See also
@totemsdk/pureminima-rpc— the RPC client used byPureMinimaRpcProvider@totemsdk/lookup-client—LookupClientProviderimplementation@totemsdk/node— Node.jsMinimaProvider@totemsdk/omnia— usesChainStateProviderfor coin queries
