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/txThe 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: stringbalance } = 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'