# Wallet Integration

The example will:

* Check user balances (idle assets) and display them in a formatted table
* Display the best deposit options filtered for USDC/USDS only
* Generate a transactional payload for depositing into a vault that includes optional deposit fee for wallets
* Show all user positions across different vaults

## Run the tutorial code

1. Clone or download tutorial code

{% tabs %}
{% tab title="Javascript" %}

```bash
git clone https://github.com/WallfacerLabs/js-examples.git
```

{% endtab %}

{% tab title="Python" %}

```bash
git clone https://github.com/WallfacerLabs/python-examples.git
```

{% endtab %}
{% endtabs %}

2. Create virtual environment and install dependencies:

{% tabs %}
{% tab title="Javascript" %}

```bash
cd js-examples/
npm install
```

{% endtab %}

{% tab title="Python" %}

<pre class="language-bash"><code class="lang-bash"><strong>cd python_examples/
</strong><strong>python3 -m venv venv
</strong>source venv/bin/activate
pip install -r requirements.txt
</code></pre>

{% endtab %}
{% endtabs %}

3. Set your API key as an environment variable:

```bash
export VAULTS_FYI_API_KEY="your_api_key_here"
```

#### Run

{% tabs %}
{% tab title="Javascript" %}

```
npm run wallet_integration
```

{% embed url="<https://supercut.ai/share/wallfacer/T6kLbItz_0KAORQZ3wFROC>" %}
{% endtab %}

{% tab title="Python" %}

```bash
python wallet_integration.py
```

{% endtab %}
{% endtabs %}

## Step by step

#### 1. SDK Initialization

{% tabs %}
{% tab title="Javascript" %}

```javascript
import pkg from '@vaultsfyi/sdk';
const { VaultsSdk } = pkg;

// Initialize the SDK
const vaultsFyi = new VaultsSdk({
  apiKey: process.env.VAULTS_FYI_API_KEY,
 
});
```

{% endtab %}

{% tab title="Python" %}

```python
from vaultsfyi import VaultsSdk

client = VaultsSdk(api_key="your_api_key_here")
```

{% endtab %}
{% endtabs %}

#### 2. Viewing User Balances

{% tabs %}
{% tab title="Javascript" %}

```javascript
async function getUserBalances() {
  const idleAssets = await vaultsFyi.getIdleAssets({
    path: { userAddress: '0xdB79e7E9e1412457528e40db9fCDBe69f558777d' }
  });
  
  return idleAssets;
}
```

{% endtab %}

{% tab title="Python" %}

```python
idle_assets = client.get_idle_assets(user_address)
```

{% endtab %}
{% endtabs %}

#### 3. Finding Best Deposit Options

{% tabs %}
{% tab title="Javascript" %}

```javascript
async function getBestDepositOptions() {
  const depositOptions = await vaultsFyi.getDepositOptions({
    path: { userAddress: '0xdB79e7E9e1412457528e40db9fCDBe69f558777d' },
    query: { allowedAssets: ['USDC', 'USDS'] }
  });
  
  return depositOptions;
}
```

{% endtab %}

{% tab title="Python" %}

```python
deposit_options = client.get_deposit_options(
    user_address,
    allowed_assets=["USDC", "USDS"]
)
```

{% endtab %}
{% endtabs %}

#### 4. Generating Deposit Transactions

{% tabs %}
{% tab title="Javascript" %}

```javascript
async function generateDepositTransaction(vaultAddress, amount, userAddress, network, assetAddress) {
  const transaction = await vaultsFyi.getActions({
    path: { 
      action: 'deposit',
      userAddress: userAddress,
      network: network, 
      vaultAddress: vaultAddress
    },
    query: { 
      amount: amount,
      assetAddress: assetAddress
    }
  });
  
  return transaction;
}
```

{% endtab %}

{% tab title="Python" %}

```python
transaction = client.get_actions(
    action="deposit",
    user_address=user_address,
    network=network,
    vault_address=vault_address,
    amount=amount,
    asset_address=asset_address,

)
```

{% endtab %}
{% endtabs %}

#### 5. Viewing User Positions

{% tabs %}
{% tab title="Javascript" %}

```javascript
async function getUserPositions() {
  const positions = await vaultsFyi.getPositions({
    path: { userAddress: '0xdB79e7E9e1412457528e40db9fCDBe69f558777d' }
  });
  
  return positions;
}
  
```

{% endtab %}

{% tab title="Python" %}

```python
positions = client.get_positions(user_address)
```

{% endtab %}
{% endtabs %}

<br>
