Skip to content
Polkadot-API

Extension-based signers

In order to use an extension-based wallet, you can use the utilities exported at polkadot-api/pjs-signer.

Let's go step by step:

Detect available extensions

Wallets announce themselves with a name through a global variable, and PAPI is able to detect them.

import {  } from "polkadot-api/pjs-signer"
 
const extensionsArrow
= ()

Once we get the available extensions by name, we can connect to them.

Connect to extension

The extension will provide with a list of accounts available for usage. Note that, generally, the user will control which addresses are available.

import {  } from "polkadot-api/pjs-signer"
 
const  = await ([0]) 

This returns a type InjectedExtension, with the following fields:

  • name: string. Wallet identified, same one returned in getInjectedExtensions
  • disconnect: () => void. Callback to close connection with the wallet.
  • getAccounts: () => InjectedPolkadotAccount[]. Get accounts available in that moment in time. InjectedPolkadotAccount
  • subscribe: (cb: (accounts: InjectedPolkadotAccount[]) => void) => () => void. Subscribe function accepting a callback that will be called every time the wallet announces account changes. Returns a function to unsubscribe. InjectedPolkadotAccount

Use PolkadotSigner

Once we connected to the extension, we can get the accounts available through getAccounts or subscribe functions.

These accounts have InjectedPolkadotAccount type, with the following fields:

  • polkadotSigner: PolkadotSigner ready to use.
  • address: string. This comes from the wallet, it generally is an AccountId32 (i.e. regular Polkadot accounts) or an AccountId20 (i.e. Ethereum-like account).
  • genesisHash: (string | null)?. The wallet optionally informs which genesisHash is supported for this address.
  • name: string?. Optional name given by the wallet to the account (e.g. human-readable name given by the user).
  • type: string?. Optional account type. The possible values are "ed25519" | "sr25519" | "ecdsa" | "ethereum".
let  = .()
const  = .(() => {
   = 
})
 
const  = [0].
const  = await .(.([0, 1, 2, 3]))
 
// we call it if don't want to track account changes anymore
()