# Update Leverage (/docs/risex/api/examples/update-leverage)

# Update Leverage

Update account leverage for a specific market.

**Endpoint:** `POST /v1/account/leverage`

**Prerequisites:** You must have registered a signer first (see [Register Signer](/docs/risex/api/register-signer)).

**Example:**

```typescript
import axios from "axios";
import { apiClient } from "./risex-core";
import { createPermitParams } from "./create-permit-params";
import { encodeAbiParameters, type Hex } from "viem";
import 'dotenv/config';

const updateLeverage = async (
  marketId: number,
  leverageDecimal: string, // e.g., "10" for 10x leverage
  signingKey: `0x${string}`, // From registerSigner
  signerAddress: string,      // From registerSigner
  account: string,
) => {
  try {
    // Contract addresses
    const perpContractAddress = '0x68cAcD54a8c93A3186BF50bE6b78B761F728E1b4' as `0x${string}`;
    const authContractAddress = '0x8d8708f9D87ef522c1f99DD579BF6A051e34C28E' as `0x${string}`;

    // Convert leverage to 18 decimals for encoding
    const leverageWith18Decimals = BigInt(leverageDecimal) * BigInt(10 ** 18);

    // Encode leverage data
    // keccak256(abi.encode(uint256(marketId), uint128(leverage)))
    const encodedData = encodeAbiParameters(
      [
        { name: 'marketId', type: 'uint256' },
        { name: 'leverage', type: 'uint128' }
      ],
      [BigInt(marketId), leverageWith18Decimals]
    ) as Hex;

    // Create permit params with signature
    const permitParams = await createPermitParams(
      encodedData,
      signingKey,
      account as `0x${string}`,
      signerAddress as `0x${string}`,
      perpContractAddress,
      authContractAddress,
    );

    const response = await apiClient.post('/v1/account/leverage', {
      market_id: marketId.toString(),
      leverage: String(leverageWith18Decimals),
      permit_params: {
        account: permitParams.account,
        signer: permitParams.signer,
        deadline: permitParams.deadline,
        signature: permitParams.signature,
        nonce: permitParams.nonce,
      },
    });

    console.log('Leverage updated successfully!');
    console.log('Transaction Hash:', response.data);

    return response.data;
  } catch (error) {
    if (axios.isAxiosError(error)) {
      console.error('Update leverage failed:', error.response?.data?.message || error.message);
      if (error.response?.data) {
        console.error('Error details:', JSON.stringify(error.response.data, null, 2));
      }
    } else {
      console.error('Update leverage failed:', (error as Error).message);
    }
    throw error;
  }
};

export { updateLeverage };

// Example usage:
(async () => {
  const signingKey = process.env.SIGNING_KEY as `0x${string}`;
  const signerAddress = '0x...'; // Your signer address from registerSigner
  const account = '0x...'; // Your main wallet address

  await updateLeverage(
    1, // BTC market
    '10', // 10x leverage
    signingKey,
    signerAddress,
    account
  );
})();
```
