Copy const example = async () => {
// connect to tomo wallet and get accounts
const accounts = await window . tomo_btc .requestAccounts ()
// the first account is the selected account
const account = accounts[ 0 ]
const signature = await window . tomo_btc .signMessage ( 'Hello Tomo' , 'bip322-simple' )
// do something about the signature
}
Copy import { WalletProvider , Network , Fees , UTXO , WalletInfo } from "./wallet_provider" ;
import {
getAddressBalance ,
getTipHeight ,
getFundingUTXOs ,
getNetworkFees ,
pushTx
} from "../mempool_api" ;
export class TOMOWallet extends WalletProvider {
private tomoWalletInfo : WalletInfo | undefined ;
constructor () {
super ();
}
connectWallet = async () : Promise < this > => {
const workingVersion = "1.1.1" ;
if ( ! window .tomo_btc) {
throw new Error ( "Tomo extension wallet not found" );
}
const tomowallet = window .tomo_btc;
let result = null ;
try {
result = await tomowallet ?.requestAccounts ();
} catch (error) {
throw new Error ( "Bitcoin is not enabled in Tomo wallet" );
}
let compressedPublicKey = null ;
try {
compressedPublicKey = await tomowallet ?.getPublicKey ();
} catch (error) {
throw new Error ( "Bitcoin is not enabled in Tomo wallet" );
}
if (compressedPublicKey && result[ 0 ]) {
this .tomoWalletInfo = {
publicKeyHex : compressedPublicKey ,
address : result[ 0 ] ,
};
return this ;
} else {
throw new Error ( "Failed to connect to Tomo wallet" );
}
};
getWalletProviderName = async () : Promise < string > => {
return "Tomo" ;
};
getAddress = async () : Promise < string > => {
if ( ! this .tomoWalletInfo) {
throw new Error ( "Tomo wallet not connected" );
}
return this . tomoWalletInfo .address;
};
getPublicKeyHex = async () : Promise < string > => {
if ( ! this .tomoWalletInfo) {
throw new Error ( "Tomo wallet not connected" );
}
return this . tomoWalletInfo .publicKeyHex;
};
signPsbt = async (psbtHex : string ) : Promise < string > => {
if ( ! this .tomoWalletInfo) {
throw new Error ( "Tomo wallet not connected" );
}
return await window ?. tomo_btc ?.signPsbt (psbtHex);
};
signPsbts = async (psbtsHexes : string []) : Promise < string []> => {
if ( ! this .tomoWalletInfo) {
throw new Error ( "Tomo wallet not connected" );
}
return await window ?. tomo_btc ?.signPsbts (psbtsHexes);
};
signMessageBIP322 = async (message : string ) : Promise < string > => {
if ( ! this .tomoWalletInfo) {
throw new Error ( "TOMO Wallet not connected" );
}
return await window ?. tomo_btc ?.signMessage (
message ,
"bip322-simple" ,
);
};
getNetwork = async () : Promise < Network > => {
return "testnet" ;
};
on = (eventName : string , callBack : () => void ) => {
if ( ! this .tomoWalletInfo) {
throw new Error ( "TOMO Wallet not connected" );
}
if (eventName === "accountChanged" ) {
return window . tomo_btc .on (eventName , callBack);
}
};
getBalance = async () : Promise < number > => {
return await getAddressBalance ( await this .getAddress ());
};
getNetworkFees = async () : Promise < Fees > => {
return await getNetworkFees ();
};
pushTx = async (txHex : string ) : Promise < string > => {
return await pushTx (txHex);
};
getUtxos = async (address : string , amount : number ) : Promise < UTXO []> => {
return await getFundingUTXOs (address , amount);
};
getBTCTipHeight = async () : Promise < number > => {
return await getTipHeight ();
};
}
Tomo extension wallet support the ECDSA signature of the above four wallet types.