Update Leverage
How to update account leverage for a specific market
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).
Example:
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
);
})();