> For the complete documentation index, see [llms.txt](https://docs.mapnode.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mapnode.io/developer-guide/solana-dapps-integration.md).

# Solana DApps Integration

## To detect MapNode Extension with Solana

To detect whether your browser is running MapNode Extension, please use:

```javascript
if(window.mapnode){
    console.log('MapNode Extension is installed!');
}
```

Notice: MapNode Extension Testnet is under development and not available now. The MapNode Extension on Ethereum JavaScript provider API is specified by [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193). Support `window.mapnode.sol`

***

## To connect MapNode Extension Wallet

To connect MapNode Extension means to access the user's \[blockchain - like Ethereum] account(s).

```javascript
// Connect & get accounts
window.mapnode.sol.request({method: 'sol_accounts'});
// Alias for connection
window.mapnode.sol.request({method: 'sol_requestAccounts'});​
//Check if dapp connected
window.mapnode.sol.isConnected();
```

***

## To disconnect MapNode Extension Wallet

To disconnect MapNode Extension, please use:

```
window.mapnode.sol.disconnect()
```

## To experience functions

Once your account is connected, let's start experiencing more functions.‌

### Get Current Account

return `Promise<Array[String]>`

* If wallet can not be found, return `[]` instead of `throw Error`

```javascript
window.mapnode.sol.request({ method: 'sol_accounts' }).then(accounts => {
  if (accounts[0]) {
    // Do something with accounts
  } else {
    // Wallet not found
  }
})
```

### Check wallet whether exists or not

return `Promise<{data: Boolean}>`

```javascript
window.mapnode.sol.request({ method: 'has_wallet', params: ['solana'] })
// Example
window.mapnode.sol.request({ method: 'has_wallet', params: ['solana'] }).then(() => {
  // Wallet Exists
}).catch(e => { 
  // Wallet not found
})
```

### Sign Transaction

return: \`Promise<({signature: base58, publicKey: PublicKey})>

```javascript
// Example Sign Transaction
const signature = window.mapnode.sol.request({
    method: 'sol_sign',
    params: [<Transaction>]
}).then(({publicKey, signature}) => {
	//Do something with publicKey and signature
});
```

### Verify Signature

return `Promise<boolean>`

```javascript
window.mapnode.sol.request({
  method: 'sol_verify',
  params: [signature, msg]
})
```

### RPC Request

return `Promise<Solana RPC>` Currently only support HTTP(s) method Reference:

```javascript
window.mapnode.sol.request({method: '<Your Method>', params: [args1,....]})
```

***

## To handle events

### List of events

Currently we only support some action event from wallet extension

```javascript
window.mapnode.sol.on('event_name', callback);
​//Example
window.mapnode.sol.on('close', () => window.location.reload());
window.mapnode.sol.on('accountsChanged', () => window.location.reload());
```

<table><thead><tr><th width="184.0317835309541">Events</th><th>Trigger</th></tr></thead><tbody><tr><td>accountsChanged</td><td>Receive when active account changed in Extension</td></tr><tr><td>networkChanged</td><td>Receive when active network changed in Extension</td></tr><tr><td>chainChanged</td><td>Receive when active chain changed in Extension</td></tr><tr><td>disconnect</td><td>Receive when disconnect from Extension</td></tr><tr><td>close</td><td>Alias for disconnect event</td></tr></tbody></table>

<table><thead><tr><th width="359.9860751564186">Method</th><th>Description</th></tr></thead><tbody><tr><td>on(event, callback)</td><td>Add event listener</td></tr><tr><td>off(event, callback)</td><td>Remove event listener</td></tr></tbody></table>
