---
description: >-
  Welcome to Fin Extension Wallet Developer Guide. This documentation contains
  guides for developers to get started developing on Fin Extension Wallet.‌
---

# Dev Guide V1 - Sei DApps Integration

## Sei DApps Integration <a href="#devguide-seidappsintegration-seidappsintegration" id="devguide-seidappsintegration-seidappsintegration"></a>

Welcome to Fin Wallet Extension Developer Guide. This documentation contains guides for developers to get started developing on Fin Wallet Extension.‌

### To detect Fin Wallet Extension with Cosmos Base Chain <a href="#devguide-seidappsintegration-todetectfinwalletextensionwithcosmosbasechain" id="devguide-seidappsintegration-todetectfinwalletextensionwithcosmosbasechain"></a>

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

```
if (window.fin) {
  console.log('Fin Wallet Extension is installed!');
}// Some code
```

### Notice: Fin Wallet Extension Testnet is under development and not available now. <a href="#devguide-seidappsintegration-notice-finwalletextensiontestnetisunderdevelopmentandnotavailablenow." id="devguide-seidappsintegration-notice-finwalletextensiontestnetisunderdevelopmentandnotavailablenow."></a>

### To connect Fin Extension Wallet <a href="#devguide-seidappsintegration-toconnectfinextensionwallet" id="devguide-seidappsintegration-toconnectfinextensionwallet"></a>

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

```
// Connect only
const connection = window.fin.cosmos('<chain: String>');
// Connect & get accounts
connection.request({ method: 'cosmos_accounts' });
// Check whether dapp connected or not
connection.isConnected();// Some code
```

Currently chains support: \['terra','cosmos']

### To disconnect Fin Extension Wallet <a href="#devguide-seidappsintegration-todisconnectfinextensionwallet" id="devguide-seidappsintegration-todisconnectfinextensionwallet"></a>

To disconnect fin Extension, please use:

```
connection.disconnect();
```

### To experience functions <a href="#devguide-seidappsintegration-toexperiencefunctions" id="devguide-seidappsintegration-toexperiencefunctions"></a>

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

#### Get Current Account <a href="#devguide-seidappsintegration-getcurrentaccount" id="devguide-seidappsintegration-getcurrentaccount"></a>

return `Promise<Array[String]>`

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

```
connection.request({ method: 'cosmos_accounts' }).then((accounts) => {
  if (accounts[0]) {
    // Do something with accounts
  } else {
    // Wallet not found
  }
});
```

#### Check wallet whether exists or not <a href="#devguide-seidappsintegration-checkwalletwhetherexistsornot" id="devguide-seidappsintegration-checkwalletwhetherexistsornot"></a>

return `Promise<{data: Boolean}>`

```
const hasWallet = connection.request({ method: 'has_wallet', params: ['<chain>'] });
```

#### Execute contract function <a href="#devguide-seidappsintegration-executecontractfunction" id="devguide-seidappsintegration-executecontractfunction"></a>

return: `Promise<Hash>`

```
const signature = connection.request({
  method: 'cosmos_execute',
  params: ['<contractAddres: string>', '<executeMsg: string>'],
});

// Example Execute Contract
let cw20Contract =
  'juno10rktvmllvgctcmhl5vv8kl3mdksukyqf2tdveh8drpn0sppugwwqjzz30z';
let execMsg =
  '{"transfer":{"amount":"1","recipient":"juno1cx4nq77x3unvl2xsa9fmm9drxkexzkjnzwt2y7"}}';

const response = await connection.request({
  method: 'cosmos_execute',
  params: [cw20Contract, execMsg],
});
```

### To handle events <a href="#devguide-seidappsintegration-tohandleevents" id="devguide-seidappsintegration-tohandleevents"></a>

#### List of events <a href="#devguide-seidappsintegration-listofevents" id="devguide-seidappsintegration-listofevents"></a>

Currently we only support some action event from wallet extension

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

<table><thead><tr><th width="374">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>

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