> 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/bnb-chain-dapps-integration.md).

# BNB Chain DApps Integration

## To detect MapNode Extension with BNB Chain

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

```javascript
if(window.mapnode || window.binancChain || window.binanceChain?.isMapNode){
    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.ethereum + window.binance` and removal `window.web3`

***

## 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.binanceChain.request({method: 'bsc_accounts'});
// Alias for connection
window.binanceChain.request({method: 'bsc_requestAccounts'});​
//Check if dapp connected
window.binancChain.isConnected();
```

```javascript
// Connect & get accounts
window.ethereum.request({method: 'eth_accounts'});
// Alias for connection
window.ethereum.request({method: 'eth_requestAccounts'});​
//Check if dapp connected
window.ethereum.isConnected();
```

***

## To disconnect MapNode Extension Wallet

To disconnect MapNode Extension, please use:

```
window.binanceSmartChain.disconnect()
```

```
window.ethereum.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.binanceChain.request({ method: 'bsc_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.binChain.request({ method: 'has_wallet', params: ['binanceSmartChain']})
// Example
window.binanceChain.request({ method: 'has_wallet', params: ['binanceSmartChain'] }).then(() => {
  // Wallet Exists
}).catch(e => { 
  // Wallet not found
})
```

### Sign Transaction

return: `Promise<Signature | RPC: 2.0>`

```javascript
// Example Sign Transactionconst
const signature = window.binanceSmartChain.request({
    method: 'bsc_sign',
    params: {
        "undefined": "string",
        "to": "string",
        "gas": "string",
        "gasPrice": "string",
        "value": "string",
        "data": "string",
        "nonce": "string"
    }
});
```

### Transfer

return `Promise<hash>`

```javascript
window.binanceSmartChain.request({
  method: 'bsc_sendTransaction',
  params: [
    {
      undefined: 'string',
      to: 'string',
      gas: 'string',
      gasPrice: 'string',
      value: 'string',
      data: 'string',
      nonce: 'string'
    }
  ]
})
```

### RPC Request

return `Promise<binanceSmartChain RPC>` Currently only support HTTP(s) method Reference: [RPC Method](https://docs.binance.org/smart-chain/developer/rpc.html#json-rpc-methods)

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

***

## To handle events

### List of events

Currently we only support some action event from wallet extension

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

| Events          | Trigger                                          |
| --------------- | ------------------------------------------------ |
| accountsChanged | Receive when active account changed in Extension |
| networkChanged  | Receive when active network changed in Extension |
| chainChanged    | Receive when active chain changed in Extension   |
| disconnect      | Receive when disconnect from Extension           |
| close           | Alias for disconnect event                       |

| Method               | Description           |
| -------------------- | --------------------- |
| on(event, callback)  | Add event listener    |
| off(event, callback) | Remove event listener |
