Integrating Leap Wallet

This documentation provides a guide on integrating Leap Wallet into your Aptos/Movement application. By following these steps, you can seamlessly detect, connect, and interact with Leap

Detecting Leap Wallet

To integrate Leap Wallet into your Aptos/Movement application, we recommend using the @aptos-labs/wallet-standard package. This standardised package ensures consistent wallet detection and interaction across different wallet providers.

Prerequisites

Before you begin implementing wallet detection, you'll need to install the required package. Open your terminal and run one of the following commands based on your package manager:

# If you're using npm
npm install @aptos-labs/wallet-standard

# If you're using yarn
yarn add @aptos-labs/wallet-standard

Implementing Wallet Detection

Once you've installed the package, you can use the following code snippet to detect available Aptos/Movement wallets, including Leap:

import { getAptosWallets } from '@aptos-labs/wallet-standard'

// Fetch all available Aptos wallets
const wallets = getAptosWallets()
// Access the list of detected wallets
const aptosWallets = wallets.aptosWallets

After detecting the wallets, you can find the Leap wallet instance in the aptosWallets object. This will give you access to all wallet functions, including connect, which we'll explore in detail in the following sections.

Alternative Detection Method

You can also access the Leap wallet directly through the window object:

const leapWallet = window.leap?.aptos

This method provides direct access to the Leap wallet interface when available in the browser environment.

Note: Make sure to implement proper error handling and wallet availability checks in your application to ensure a smooth user experience.

Connecting to Leap Wallet

This section assumes you have completed the wallet detection steps outlined above and have access to the Leap wallet object.

Establishing Connection

To interact with Leap wallet, you'll need to establish a connection first. This will trigger a prompt asking the user for permission to connect your dApp with Leap wallet.

Creating the Wallet Adapter

To ensure seamless interaction, wrap the Leap wallet object with a StandardWalletAdapter:

import { AptosWallet, NetworkInfo } from '@aptos-labs/wallet-standard';

// Assuming leap is the detected Leap Wallet object
const adapter = leap.aptos as AptosWallet;

// Establish connection with specified network
await adapter.features['aptos:connect'].connect(SILENT_CONNECT, networkInfo);

Note: The networkInfo parameter specifies which Aptos/Movement network to connect to. We'll cover network configuration in detail in the "Network Management" section below.

Disconnecting

To terminate the connection with Leap wallet:

await adapter.features['aptos:disconnect'].disconnect()

Message Signing

Creating a Sign Message Payload

Before signing a message, create a payload that conforms to the AptosSignMessageInput type:

import { type AptosSignMessageInput } from "@aptos-labs/wallet-standard";

const messagePayload: AptosSignMessageInput = {
  message: "Welcome to Leap Wallet",
  address: true,
  nonce: "RandomNonceString",
};

Signing the Message

Use the adapter's signMessage function to sign your payload:

await adapter.features["aptos:signMessage"].signMessage(messagePayload);

Transaction Management

Setting Up the Aptos Client

First, initialize the Aptos client with your desired network configuration:

import { Aptos, Network, AptosConfig } from "@aptos-labs/ts-sdk";

const aptosConfig = new AptosConfig({
  network: Network.MAINNET,
});

const aptos = new Aptos(aptosConfig);

Creating and Signing Transactions

To create a transaction payload:

const transaction = await aptos.transaction.build.simple({
  sender: YOUR_ACCOUNT_ADDRESS,
  data: {
    function: "0x1::coin::transfer",
    typeArguments: ["0x1::aptos_coin::AptosCoin"],
    functionArguments: [
      "0x960dbc655b847cad38b6dd056913086e5e0475abc27152b81570fd302cb10c38",
      100,
    ],
  },
});

Option 1: Sign Now, Submit Later

If you need to sign a transaction and submit it later:

// Sign the transaction
const signedTx = await adapter.features["aptos:signTransaction"].signTransaction(transaction);

await aptos.transaction.submit.simple({
  senderAuthenticator: signedTx.args,
  transaction: transaction,
});

Option 2: Sign and Submit Immediately

For immediate signing and submission:

await adapter.features["aptos:signAndSubmitTransaction"].signAndSubmitTransaction(transaction);

Network Management

The Leap wallet adapter supports dynamic network switching. You can manage networks in two ways:

1. Specify Network During Connection

Pass the network information during the initial connection:

interface NetworkInfo {
  name: Network;
  chainId: number;
  url?: string;
}

await adapter.features["aptos:connect"].connect(SILENT_CONNECT, networkInfo);

2. Change Network After Connection

Switch networks on an already connected adapter:

await adapter.features['aptos:changeNetwork']!.changeNetwork(networkInfo);

Note: The NetworkInfo interface must conform to the specifications from @aptos-labs/wallet-standard.

Last updated