Tomo Docs
Tomo Docs
  • Overview
    • Introducing Tomo
    • Tomo's Key Management
  • Tomo SDK
    • TomoEVMKit
      • Quick Start
      • Use with Ethers.js
      • Migration from RainbowKit
      • Migration from Blocknative
      • Supported Chains
    • Tomo Web SDK
      • Quick Start
      • Solana Provider
      • EVM Provider
      • Bitcoin Provider
      • Tron Provider
      • Movement Provider
      • Sui Provider
    • Tomo Telegram SDK
      • Quick Start
      • Wallet Provider
        • EVM Provider
        • Solana Provider
        • Sui Provider (Beta)
        • TON Provider
      • Partners
    • Tomo Enterprise SDK
      • For Babylon
        • Install the SDK
        • Tomo Wallet Provider
        • Bitcoin Provider
        • Cosmos Provider
        • Multiple Connection Mode
        • Integrate Extension Wallet
          • Submit Wallet PR
          • Extend the SDK
          • Q & A
        • Integrate Mobile Wallet
  • TOMO WALLET
    • Tomo Wallets
    • Mobile Wallet
      • Tomo Keys
        • Bonding Curve Explained
        • How to: Tomo Keys
      • TomoID
        • How to: TomoID
        • How to: Connect Instagram
      • Tomo Socials
      • Tomo Android App
      • Tomo iOS App
    • Extension Wallet
      • Developer Manual
        • EVM Integration
        • Bitcoin Integration
      • Example of User Flows
        • Claiming Signet BTC
        • Staking at Testnet
      • Install Link
    • Telegram Wallet
      • Quick Start
      • Chains/Networks
      • User Manual
        • Account Security
        • Gift feature
        • FAQ
        • Transaction
        • Swap
  • ABOUT US
    • Brand Assets
    • Privacy Policy
Powered by GitBook
On this page
  • Using Cosmos wallet provider
  • Using customized SigningStargateClient
  1. Tomo SDK
  2. Tomo Enterprise SDK
  3. For Babylon

Cosmos Provider

Using Cosmos wallet provider

Cosmos wallet provider api is as below:

import { TomoCosmosInjected, WalletProvider } from from '@tomo-inc/tomo-wallet-provider';
import { AminoSignResponse, BroadcastMode, KeplrSignOptions, StdSignature, StdSignDoc } from '@keplr-wallet/types';
import { OfflineAminoSigner, OfflineDirectSigner } from '@keplr-wallet/types/src/cosmjs';
import { SigningStargateClient } from '@cosmjs/stargate';

export declare class CosmosProvider extends WalletProvider {
    provider: TomoCosmosInjected;
    offlineSigner?: OfflineAminoSigner & OfflineDirectSigner;
    clientPromise?: Promise<SigningStargateClient>;
    constructor(chains: any[], provider: TomoCosmosInjected);
    connectWallet(): Promise<this>;
    /**
     * get @cosmjs/stargate SigningStargateClient
     */
    getSigningStargateClient(): Promise<SigningStargateClient>;
    getBalance(searchDenom: string): Promise<bigint>;
    /**
     * Gets the bech32Address of the connected wallet.
     * @returns A promise that resolves to the address of the connected wallet.
     */
    getAddress(): Promise<string>;
    /**
     * get the chainId of the connected wallet
     */
    getNetwork(): Promise<string>;
    signAmino(signerAddress: string, signDoc: StdSignDoc, signOptions?: KeplrSignOptions): Promise<AminoSignResponse>;
    signArbitrary(signer: string, data: string | Uint8Array): Promise<StdSignature>;
    sendTx(tx: Uint8Array, mode: BroadcastMode): Promise<Uint8Array>;
    getOfflineSigner(): Promise<OfflineAminoSigner & OfflineDirectSigner>;
    getPublicKeyHex(): Promise<string>
}

And after connected to wallet, cosmos wallet provider could be used as follows:

<TomoContextProvider
  chainTypes={['cosmos', 'bitcoin']} // can be removed, we support both by default
  cosmosChains={[
    {
      id: 2,
      name: 'Cosmos',
      type: 'cosmos',
      network: 'cosmoshub-4'
      backendUrls:{rpcUrl:"your rpc node url"}
    }
  ]}
  providerOptions={{  // optional, support customized window object context
    getWindow() {
      return window.parent
    }
  }}
  ...
>
  <ChildComponent />
</TomoContextProvider>

// after connected, providers could be used
export function ChildComponent(props: ChildProps) {
  const providers = useTomoProviders()

  const signCosmos = async (address: string, amount: string) => {
    const curChainId = providers.cosmosProvider.getChainId()
    const key = await providers.cosmosProvider.provider.getKey(curChainId)  

    // construct your signDoc
    ...
    
    const { signed, signature } = await providers.cosmosProvider.signAmino(
      key.bech32Address,
      signDoc
    )
  }

  return (
    <div>
      <TomoSocial />
    </div>
  )
}

Using customized SigningStargateClient

const providers = useTomoProviders()

providers.cosmosProvider!.initSigningStargateClient(
    await SigningStargateClient.connectWithSigner(
        rpcUrl,
        providers.cosmosProvider!.offlineSigner!,
        options
    )
);
PreviousBitcoin ProviderNextMultiple Connection Mode

Last updated 4 months ago