Build
SDK
Wallet Integrate

Wallet integration

This document will introduce how to integrate Rooch's wallet functions (query, transfer) into wallets, asset browsers, aggregators and other applications, and will introduce the TS SDK methods provided by Rooch to wallet developers.

Client operations

useRoochClientQuery provides an encapsulation for calling RPC methods. After passing the RPC method name and parameter list, the return result is processed. For details about which RPC methods, parameters and return results can be passed, please refer to Rooch JSON RPC (opens in a new tab).

export declare function useRoochClientQuery<T extends keyof RpcMethods, TData = RpcMethods[T]['result']>(...args: undefined extends RpcMethods[T]['params'] ? [method: T, params?: RpcMethods[T]['params'], options?: UseRoochClientQueryOptions<T, TData>] : [method: T, params: RpcMethods[T]['params'], options?: UseRoochClientQueryOptions<T, TData>]): UseQueryResult<TData, Error>;

Here are some examples of calls:

  • Example of calling the rooch_getBlances method:
const {
data: assetsList,
isPending,
refetch: refetchAssetsList,
} = useRoochClientQuery(
'getBalances',
{
  owner: BitcoinAddressToRoochAddress(address).toHexAddress(),
},
{ refetchInterval: 5000 }
);
  • Example of calling btc_queryUTXOs method:
const { data: utxoList, isPending: isUTXOPending } = useRoochClientQuery(
'queryUTXO',
{
  filter: {
    owner: address,
  },
  cursor: queryOptions.cursor,
  limit: queryOptions.pageSize,
},
{ enabled: !!address }
);

Account related

Get session key

export declare function useCurrentSession(): import("@roochnetwork/rooch-sdk").Session | null;

Example:

import { useCurrentSession } from '@roochnetwork/rooch-sdk-kit';
 
const sessionKey = useCurrentSession();

Get current address

import { useCurrentAddress } from '@roochnetwork/rooch-sdk-kit';
 
const address = useCurrentAddress();

Network switching

For network switching, use the useSwitchNetwork method, passing the following parameters:

type UseSwitchNetworkArgs = string;

If you are connected to the network, you can use the useCurrentNetwork method.

Get context

The useRoochContext method is used to obtain the context. The context information is as follows:

export interface ClientProviderContext {
    client: RoochClient;
    networks: NetworkConfigs;
    network: NetworkType;
    config: NetworkConfig | null;
    selectNetwork: (network: string) => void;
}

Send transaction

UseSignAndExecuteTransaction method, to execute signed transactions, needs to pass the following parameters:

type UseSignAndExecuteTransactionArgs = {
    transaction: Transaction;
    signer?: Signer;
};

Transfer

Coin

export declare function useTransferCoin({ mutationKey, ...mutationOptions }?: UseSwitchNetworkMutationOptions): UseMutationResult<UseTransferCoinResult, Error, UseTransferCoinArgs, unknown>;
  • For transfer transactions, you can use the useTransferCoin method, passing the following parameters:
type UseTransferCoinArgs = {
    signer?: Signer;
    recipient: address;
    amount: number | bigint;
    coinType: TypeArgs;
};

Object

For object transfer, you can use the useTransferObject method, passing the following parameters:

type UseTransferObjectArgs = {
    signer: Signer;
    recipient: string;
    objectId: string;
    objectType: TypeArgs;
};

Integrate wallet functionality into Rooch SDK

Rooch currently provides a set of TypeScript SDKs, providing a convenient development experience for Rooch developers or application developers.

Introduce

rooch-sdk provides some basic encapsulation, while rooch-sdk-kit provides more practical development tools for application development. Wallet integration uses these tools. The relevant code is stored in the rooch repo. The detailed path is:

rooch/sdk/typescript/rooch-sdk-kit/src/wellet

How to integrate a wallet into Rooch

At present, Rooch has integrated UniSat, OneKey and OKX. If the wallet manufacturer needs to integrate the wallet into Rooch, it needs to use the SDK to do some corresponding development and submit the code for wallet integration to the above directory.

Assets created on Rooch only need to call a getBalance interface.

Taking UniSat as an example, apart from some code development related to operating connections, the final asset must be displayed. The most critical thing is this code:

getBalance(): Promise<{ confirmed: number; unconfirmed: number; total: string }> {
return this.getTarget().getBalance()
}