Skip to main content

Bitcoin Provider API

Exodus injects a global API into websites visited by its users at window.BitcoinProvider

interface BitcoinProvider {
connect: (request: string) => Promise<GetAddressResponse>
signTransaction: (request: string) => Promise<SignTransactionResponse>
signMessage: (request: string) => Promise<string>
}

Supported Networks

IDName
MainnetBitcoin Mainnet

Methods

connect(request)

Use connect to request access to the user's account. This will open a pop-up asking the user to approve the connection. If the user approves, Exodus will return addresses related to the Mainnet network.

Example

const payload: GetAddressPayload = {
purposes: [AddressPurposes.ORDINALS, AddressPurposes.PAYMENT],
}
const request = jsontokens.createUnsecuredToken(payload)
const response: GetAddressResponse = await provider.connect(request)

Types


connect: (request: string) => Promise<GetAddressResponse>

// types
interface Address {
address: string;
publicKey: string;
purpose: AddressPurposes;
}

declare enum AddressPurposes {
PAYMENT = "payment",
ORDINALS = "ordinals"
}

interface GetAddressPayload {
purposes: Array<AddressPurposes>;
message: string;
}

interface GetAddressResponse {
addresses: Array<Address>;
}

signTransaction(request)

Use signTransaction to request a Bitcoin transaction signing.

signTransaction: (request: string) => Promise<SignTransactionResponse>

Example

const payload: SignTransactionPayload = {
psbtBase64: `dGhpcyBpcyBhIG5ldyBiYXNlNjQgc3RyaW5nICFmY2Q1Nzg5YS1iYzU1LTQ2ZDgtYjg0YS05MTY5YjI5YWIwYzc=`,
broadcast: false,
inputsToSign: [
{
address: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa',
signingIndexes: [1],
},
],
}
const request = jsontokens.createUnsecuredToken(payload)
const response: SignTransactionResponse = await provider.signTransaction(
request,
)

Types

signTransaction: (request: string) => Promise<SignTransactionResponse>;

// types
interface SignTransactionPayload extends PsbtPayload {
message?: string;
}

type PsbtPayload = {
psbtBase64: string;
inputsToSign: InputToSign[];
broadcast?: boolean;
};

interface InputToSign {
address: string;
signingIndexes: number[];
sigHash?: number; // SIGHASH_ALL will be used by default.
}

interface SignTransactionResponse {
psbtBase64: string;
txId?: string;
}

signMessage(request)

Use signMessage function to request wallet to sign a message.

When you sign a message using Exodus, you should expect following signature types:

  1. ECDSA signatures over the secp256k1 curve when signing with the BTC payment (p2sh(p2wpkh)) address
  2. BIP322 signatures when signing with the Ordinals (p2tr) address

Example

const payload: SignMessagePayload = {
address: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa',
message: 'Lorem ipsum',
}
const request = jsontokens.createUnsecuredToken(payload)

const response = await provider.signMessage(request)

Types

signMessage: (request: string) => Promise<string>

interface SignMessagePayload {
address: string;
message: string;
}

type SignMessageResponse = string;

type SignMessageOptions = RequestOptions<SignMessagePayload, SignMessageResponse>;