Before you can install and interact with the XRP Ledger Snap, you need to connect your DApp to MetaMask and retrieve the provider object.
Steps:
Install MetaMask: Ensure that the MetaMask extension is installed in your browser. You can download it here.
Connect to MetaMask:
In your DApp, prompt the user to connect their MetaMask wallet. This will give you access to the Ethereum provider, which is required to interact with Snaps.
Full code from the site in the MetaMask Snap monorepo
importtype { EIP6963AnnounceProviderEvent, MetaMaskInpageProvider,} from'@metamask/providers';/** * Check if the current provider supports snaps by calling `wallet_getSnaps`. * * @param provider - The provider to use to check for snaps support. Defaults to * `window.ethereum`. * @returns True if the provider supports snaps, false otherwise. */exportasyncfunctionhasSnapsSupport( provider:MetaMaskInpageProvider=window.ethereum,) {try {awaitprovider.request({ method:'wallet_getSnaps', });returntrue; } catch {returnfalse; }}/** * Get a MetaMask provider using EIP6963. This will return the first provider * reporting as MetaMask. If no provider is found after 500ms, this will * return null instead. * * @returns A MetaMask provider if found, otherwise null. */exportasyncfunctiongetMetaMaskEIP6963Provider() {returnnewPromise<MetaMaskInpageProvider|null>((rawResolve) => {// Timeout looking for providers after 500msconsttimeout=setTimeout(() => {resolve(null); },500);/** * Resolve the promise with a MetaMask provider and clean up. * * @param provider - A MetaMask provider if found, otherwise null. */functionresolve(provider:MetaMaskInpageProvider|null) {window.removeEventListener('eip6963:announceProvider', onAnnounceProvider, );clearTimeout(timeout);rawResolve(provider); }/** * Listener for the EIP6963 announceProvider event. * * Resolves the promise if a MetaMask provider is found. * * @param event - The EIP6963 announceProvider event. * @param event.detail - The details of the EIP6963 announceProvider event. */functiononAnnounceProvider({ detail }:EIP6963AnnounceProviderEvent) {if (!detail) {return; }const { info,provider } = detail;if (info.rdns.includes('io.metamask')) {resolve(provider); } }window.addEventListener('eip6963:announceProvider', onAnnounceProvider);window.dispatchEvent(newEvent('eip6963:requestProvider')); });}/** * Get a provider that supports snaps. This will loop through all the detected * providers and return the first one that supports snaps. * * @returns The provider, or `null` if no provider supports snaps. */exportasyncfunctiongetSnapsProvider() {if (typeof window ==='undefined') {returnnull; }if (awaithasSnapsSupport()) {returnwindow.ethereum; }if (window.ethereum?.detected) {for (constproviderofwindow.ethereum.detected) {if (awaithasSnapsSupport(provider)) {return provider; } } }if (window.ethereum?.providers) {for (constproviderofwindow.ethereum.providers) {if (awaithasSnapsSupport(provider)) {return provider; } } }consteip6963Provider=awaitgetMetaMaskEIP6963Provider();if (eip6963Provider && (awaithasSnapsSupport(eip6963Provider))) {return eip6963Provider; }returnnull;}
*If you are using typescript, you might want to install the package: @metamask/providers
2. Install the XRP Ledger Snap
Once you have connected to MetaMask and obtained the provider, you can proceed to install the XRP Ledger Snap. To install the XRP Ledger Snap call the wallet_requestSnaps method with the npm package of the XRP Ledger Snap: npm:@peersyst/xrpl-snap.
Once the XRP Ledger Snap is installed, you can interact with the XRP Ledger directly from your DApp.
After installation, use the XRP Ledger Snap's API to interact with the XRP Ledger. Below is an example of how to fetch the balance of the connected account.
provider.request({ method:'wallet_invokeSnap', params: { snapId:'npm:xrpl-snap', request: { method:'xrpl_request', params: { command:'account_info', account:'rBSG8TXQ6nYw1ihh11wRVibnSZP1SeMx7w'// Add your account here }, }, },});
To know more about the API of the Snap visit the API reference page