Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Telescope SDKs

Telescope-generated SDKs (xplajs, osmojs, neutronjs) use protobuf RPCs instead of cosmjs's JSON API. schemos provides a generic adapter via schemos/telescope.

See Telescope Adapters API for full type reference.

Why an Adapter?

CosmWasm is an opt-in Cosmos SDK module. MsgExecuteContract and query RPCs live in each chain's telescope package — not in a shared package:

@interchainjs/cosmos-types  → Cosmos SDK core only (no cosmwasm)
 
Per-chain telescope packages (include cosmwasm if chain supports it):
@xpla/xplajs               → cosmwasm/wasm/v1/tx
osmojs                      → cosmwasm/wasm/v1/tx
neutronjs                   → cosmwasm/wasm/v1/tx

The adapter accepts callbacks so schemos doesn't depend on any specific chain SDK.

Query Adapter

import { createQueryAdapter } from 'schemos/telescope'
import { createTypedContract } from 'schemos'
import { cw20 } from 'schemos/schemas'
import { createGetSmartContractState } from '@xpla/xplajs/cosmwasm/wasm/v1/query.rpc.func'
 
const smartContractState = createGetSmartContractState(rpcEndpoint)
const adapter = createQueryAdapter(smartContractState)
 
const token = createTypedContract(adapter, 'xpla1...', {
  query: cw20.query,
  responses: cw20.responses,
})
 
const { 
const balance: string
balance
} = await token.query('balance', { address: 'xpla1...' })

Execute Adapter

import { createExecuteAdapter } from 'schemos/telescope'
import { createTypedContract } from 'schemos'
import { cw20 } from 'schemos/schemas'
import { MsgExecuteContract } from '@xpla/xplajs/cosmwasm/wasm/v1/tx'
import { createGetSmartContractState } from '@xpla/xplajs/cosmwasm/wasm/v1/query.rpc.func'
 
const smartContractState = createGetSmartContractState(rpcEndpoint)
const { signAndBroadcast } = signingClient
 
const adapter = createExecuteAdapter(
  smartContractState,
  signAndBroadcast,
  (p) =>
    MsgExecuteContract.encode(
      MsgExecuteContract.fromPartial({ ...p, funds: [...p.funds] }),
    ).finish(),
)
 
const token = createTypedContract(adapter, 'xpla1...', cw20)
 
await token.execute(
  sender,
  'transfer',
  { recipient: 'xpla1...', amount: '1000' },
  'auto',
)

Chain-specific imports

xplajs

import { MsgExecuteContract } from '@xpla/xplajs/cosmwasm/wasm/v1/tx'
import { createGetSmartContractState } from '@xpla/xplajs/cosmwasm/wasm/v1/query.rpc.func'

osmojs

import { MsgExecuteContract } from 'osmojs/cosmwasm/wasm/v1/tx'

neutronjs

import { MsgExecuteContract } from 'neutronjs/cosmwasm/wasm/v1/tx'
import { createGetSmartContractState } from 'neutronjs/cosmwasm/wasm/v1/query.rpc.func'