from compass_api_sdk import CompassAPI, models
with CompassAPI(
api_key_auth="<YOUR_API_KEY_HERE>",
) as compass_api:
res = compass_api.transaction_bundler.transaction_bundler_aave_loop(chain=models.AaveLoopRequestChain.ARBITRUM, sender="0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B", collateral_token="USDC", borrow_token="WETH", initial_collateral_amount="1000", multiplier="2.5", max_slippage_percent="0.5", loan_to_value="60", estimate_gas=True, signed_authorization={
"nonce": 1000,
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chain_id": 42161,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"y_parity": 0,
}, is_account_abstraction=False)
# Handle response
print(res)import { CompassApiSDK } from "@compass-labs/api-sdk";
const compassApiSDK = new CompassApiSDK({
apiKeyAuth: "<YOUR_API_KEY_HERE>",
});
async function run() {
const result = await compassApiSDK.transactionBundler.transactionBundlerAaveLoop({
chain: "arbitrum",
sender: "0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B",
estimateGas: true,
signedAuthorization: {
nonce: 1000,
address: "0xcA11bde05977b3631167028862bE2a173976CA11",
chainId: 42161,
r: "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
s: "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
yParity: 0,
},
collateralToken: "USDC",
borrowToken: "WETH",
initialCollateralAmount: "1000",
multiplier: "2.5",
maxSlippagePercent: "0.5",
loanToValue: "60",
isAccountAbstraction: false,
});
console.log(result);
}
run();curl --request POST \
--url https://api.compasslabs.ai/v1/transaction_bundler/aave/loop \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"chain": "arbitrum",
"sender": "0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B",
"estimate_gas": true,
"signed_authorization": {
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chainId": 42161,
"nonce": 1000,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"yParity": 0
},
"collateral_token": "USDC",
"borrow_token": "WETH",
"initial_collateral_amount": "1000",
"multiplier": "2.5",
"max_slippage_percent": "0.5",
"loan_to_value": "60",
"is_account_abstraction": false
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: 'arbitrum',
sender: '0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B',
estimate_gas: true,
signed_authorization: {
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
chainId: 42161,
nonce: 1000,
r: '0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615',
s: '0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c',
yParity: 0
},
collateral_token: 'USDC',
borrow_token: 'WETH',
initial_collateral_amount: '1000',
multiplier: '2.5',
max_slippage_percent: '0.5',
loan_to_value: '60',
is_account_abstraction: false
})
};
fetch('https://api.compasslabs.ai/v1/transaction_bundler/aave/loop', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.compasslabs.ai/v1/transaction_bundler/aave/loop",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'chain' => 'arbitrum',
'sender' => '0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B',
'estimate_gas' => true,
'signed_authorization' => [
'address' => '0xcA11bde05977b3631167028862bE2a173976CA11',
'chainId' => 42161,
'nonce' => 1000,
'r' => '0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615',
's' => '0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c',
'yParity' => 0
],
'collateral_token' => 'USDC',
'borrow_token' => 'WETH',
'initial_collateral_amount' => '1000',
'multiplier' => '2.5',
'max_slippage_percent' => '0.5',
'loan_to_value' => '60',
'is_account_abstraction' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.compasslabs.ai/v1/transaction_bundler/aave/loop"
payload := strings.NewReader("{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.compasslabs.ai/v1/transaction_bundler/aave/loop")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compasslabs.ai/v1/transaction_bundler/aave/loop")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}"
response = http.request(request)
puts response.read_body{
"transaction": {
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}AAVE Leverage Long/Short
Execute an Aave looping strategy that involves repeated supply and borrow operations.
This endpoint creates a multicall transaction that performs a series of operations:
- Approves and supplies initial token
- For each loop:
- Borrows another token
- Swaps borrowed token back to supply token
- Supplies the swapped tokens
The transaction must be authorized using the /authorization endpoint to prevent replay attacks.
from compass_api_sdk import CompassAPI, models
with CompassAPI(
api_key_auth="<YOUR_API_KEY_HERE>",
) as compass_api:
res = compass_api.transaction_bundler.transaction_bundler_aave_loop(chain=models.AaveLoopRequestChain.ARBITRUM, sender="0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B", collateral_token="USDC", borrow_token="WETH", initial_collateral_amount="1000", multiplier="2.5", max_slippage_percent="0.5", loan_to_value="60", estimate_gas=True, signed_authorization={
"nonce": 1000,
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chain_id": 42161,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"y_parity": 0,
}, is_account_abstraction=False)
# Handle response
print(res)import { CompassApiSDK } from "@compass-labs/api-sdk";
const compassApiSDK = new CompassApiSDK({
apiKeyAuth: "<YOUR_API_KEY_HERE>",
});
async function run() {
const result = await compassApiSDK.transactionBundler.transactionBundlerAaveLoop({
chain: "arbitrum",
sender: "0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B",
estimateGas: true,
signedAuthorization: {
nonce: 1000,
address: "0xcA11bde05977b3631167028862bE2a173976CA11",
chainId: 42161,
r: "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
s: "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
yParity: 0,
},
collateralToken: "USDC",
borrowToken: "WETH",
initialCollateralAmount: "1000",
multiplier: "2.5",
maxSlippagePercent: "0.5",
loanToValue: "60",
isAccountAbstraction: false,
});
console.log(result);
}
run();curl --request POST \
--url https://api.compasslabs.ai/v1/transaction_bundler/aave/loop \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"chain": "arbitrum",
"sender": "0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B",
"estimate_gas": true,
"signed_authorization": {
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chainId": 42161,
"nonce": 1000,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"yParity": 0
},
"collateral_token": "USDC",
"borrow_token": "WETH",
"initial_collateral_amount": "1000",
"multiplier": "2.5",
"max_slippage_percent": "0.5",
"loan_to_value": "60",
"is_account_abstraction": false
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: 'arbitrum',
sender: '0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B',
estimate_gas: true,
signed_authorization: {
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
chainId: 42161,
nonce: 1000,
r: '0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615',
s: '0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c',
yParity: 0
},
collateral_token: 'USDC',
borrow_token: 'WETH',
initial_collateral_amount: '1000',
multiplier: '2.5',
max_slippage_percent: '0.5',
loan_to_value: '60',
is_account_abstraction: false
})
};
fetch('https://api.compasslabs.ai/v1/transaction_bundler/aave/loop', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.compasslabs.ai/v1/transaction_bundler/aave/loop",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'chain' => 'arbitrum',
'sender' => '0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B',
'estimate_gas' => true,
'signed_authorization' => [
'address' => '0xcA11bde05977b3631167028862bE2a173976CA11',
'chainId' => 42161,
'nonce' => 1000,
'r' => '0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615',
's' => '0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c',
'yParity' => 0
],
'collateral_token' => 'USDC',
'borrow_token' => 'WETH',
'initial_collateral_amount' => '1000',
'multiplier' => '2.5',
'max_slippage_percent' => '0.5',
'loan_to_value' => '60',
'is_account_abstraction' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.compasslabs.ai/v1/transaction_bundler/aave/loop"
payload := strings.NewReader("{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.compasslabs.ai/v1/transaction_bundler/aave/loop")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compasslabs.ai/v1/transaction_bundler/aave/loop")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}"
response = http.request(request)
puts response.read_body{
"transaction": {
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Body
Request model for executing an Aave loop strategy.
arbitrum, base, ethereum "arbitrum"
The address of the transaction sender.
"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B"
Symbol or address of token to supply to Aave..
"USDC"
"WETH"
Symbol or address of token to borrow from Aave..
"WETH"
"USDC"
Amount of collateral token to supply to Aave
x > 0"1000"
Leverage multiplier. Total loop collateral will be calculated as multiplier x initial_collateral_amount
x > 1"2.5"
Maximum allowed slippage for token swaps in percentage
0 < x <= 1002.5
Loan To Value percentage of the loop
0 < x <= 10020.5
Determines whether to estimate gas costs for transactions, also verifying that the transaction can be successfully executed.
true
EIP-7702 authorization. Required when is_account_abstraction is False.
Show child attributes
Show child attributes
{
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chainId": 42161,
"nonce": 1000,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"yParity": 0
}
Aave E-Mode category ID to set before executing the loop. If not provided, E-Mode will not be changed.
x >= 00
Whether to use account abstraction for the transaction.
true
false
The owner address of the smart account (Safe). Required when is_account_abstraction is True. This address will be used as the 'from' address when building the execTransaction call.
"0x06A9aF046187895AcFc7258450B15397CAc67400"
Response
Successful Response
- BundlerTransactionResponse
- SafeTransactionResponse
The unsigned multicall transaction data. User must sign and broadcast to network.
Show child attributes
Show child attributes
{
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
}
Was this page helpful?