A flash loan is a type of loan that can be obtained instantly and without any collateral, unlike traditional loans that require time-consuming application processes and collateral such as property or assets. This type of loan is available through Aave, a decentralized lending platform, where borrowers can borrow any amount they need and repay it within a single transaction. The loan is secured by the borrower’s smart contract and is only valid for the duration of that transaction. If the borrower cannot repay the loan and the associated fees within the same transaction, the loan is automatically canceled, and the transaction is reverted. Flash loans are often used in the context of cryptocurrency trading and arbitrage, as they enable traders to obtain funds quickly and cheaply to take advantage of market opportunities.For detailed documentation, see Aave Developers: Flash Loans.The objective of this tutorial is to make you familiar with the Avalanche C-Chain, the Hardhat framework, and the Aave flash loans.Specifically, in this tutorial, you will:
Deploy an Avalanche node on the Fuji testnet.
Create a flash loan project using Hardhat.
Run a flash loan on the Fuji testnet through an Avalanche node deployed with Chainstack.
This tutorial shows you how to request a flash loan on the Fuji testnet to borrow USDC. To get from zero to an executed Aave V3 flash loan on the Avalanche Fuji C-Chain testnet, do the following:
With Chainstack, create a public chain project.
With Chainstack, join the Avalanche Fuji testnet.
With Chainstack, access your Avalanche node endpoint.
With Hardhat, create and set up an Aave flash loan project.
With Hardhat, execute the flash loan through your Avalanche node.
This project uses the aave/core-v3 package for the smart contracts and the dotenv package to safely use environment variables.Run the following command in your root directory to install:
In your project’s root directory, create a new file and name it .env. Here is where you will set up the environment variables for your Chainststack Avalanche Fuji endpoint and your wallet’s private key.
You will find a file named hardhat.config.js in the root directory. This file is used to configure various settings for your Hardhat projects, such as the network you want to deploy your contracts on, the compilers you want to use, and the plugins you want to enable.Delete the default code in the file and replace it with the following:
require("@nomicfoundation/hardhat-toolbox"); imports the Hardhat Toolbox plugin, which provides several useful tools and utilities for Hardhat projects.
require("dotenv").config(); loads environment variables from a .env file using the dotenv package.
module.exports = { ... } exports a JavaScript object containing the configuration for the Hardhat project.
solidity: "0.8.10", sets the Solidity compiler version to 0.8.10.
networks: { ... } defines the network configurations for the Hardhat project. In this case, it defines a network called fuji that connects to the Avalanche Fuji blockchain network.
fuji: { ... } defines the configuration for the fuji network.
url: process.env.FUJI_CHAINSTACK, sets the URL for the Fuji network using the FUJI_CHAINSTACK environment variable.
accounts: [process.env.PRIVATE_KEY], sets the accounts for the fuji network using the PRIVATE_KEY environment variable. This will allow the Hardhat project to deploy contracts and interact with the Fuji network using the specified private key.
In the root directory, you will find a directory named contracts with a sample contract in it. Rename this contract to FlashLoan.sol and replace its code with the following:
// SPDX-License-Identifier: MITpragma solidity ^0.8.10;import {FlashLoanSimpleReceiverBase} from "@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol";import {IPoolAddressesProvider} from "@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol";import {IERC20} from "@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol";/** * @title FlashLoan * @dev A contract that demonstrates how to use Aave's flash loans. This contract can borrow any token from the Aave lending pool, perform custom logic with the borrowed funds, and repay the loan plus interest in a single transaction. */contract FlashLoan is FlashLoanSimpleReceiverBase { address payable public owner; // The owner of this contract, who can withdraw funds. /** * @dev Constructor function that sets the address provider for the Aave lending pool and the contract owner. * @param _addressProvider The address provider for the Aave lending pool. */ constructor(address _addressProvider) FlashLoanSimpleReceiverBase(IPoolAddressesProvider(_addressProvider)) { owner = payable(msg.sender); // Set the contract owner to the creator of this contract. } /** * @dev This function is called after this contract receives a flash loan. It executes custom logic with the borrowed funds and repays the loan plus interest to the Aave lending pool. * @param asset The token being borrowed. * @param amount The amount of the token being borrowed. * @param premium The fee paid to the Aave lending pool. * @param initiator The address that initiated the flash loan. * @param params Additional parameters for the flash loan. * @return true to indicate that the flash loan has been repaid. */ function executeOperation( address asset, uint256 amount, uint256 premium, address initiator, bytes calldata params ) external override returns (bool) { // This function is called by the Aave lending pool contract after this contract receives the flash loan. // The asset parameter represents the token being borrowed, amount is the amount borrowed, and premium is the fee paid to the pool. // 👇 Your custom logic for the flash loan should be implemented here 👇 /** YOUR CUSTOM LOGIC HERE */ // 👆 Your custom logic for the flash loan should be implemented above here 👆 // Approve the lending pool contract to pull funds from this contract to pay back the flash loan. uint256 amountOwed = amount + premium; IERC20(asset).approve(address(POOL), amountOwed); return true; // Return true to indicate that the flash loan has been repaid. } /** * @dev Function to request a flash loan for a specified token and amount. * receiverAddress The address of this contract, which will receive the flash loan. * @param _token The token to be borrowed. * @param _amount The amount of the token to be borrowed. * params No additional parameters are needed. * referralCode No referral code is used. */ function requestFlashLoan(address _token, uint256 _amount) public onlyOwner { address receiverAddress = address(this); address asset = _token; uint256 amount = _amount; bytes memory params = ""; uint16 referralCode = 0; // Call the Aave lending pool contract to initiate the flash loan. POOL.flashLoanSimple( receiverAddress, asset, amount, params, referralCode ); } /** * @dev Get the balance of a specific token in this contract. * @param _tokenAddress The address of the token to check the balance of. * @return The balance of the specified token in this contract. */ function getBalance(address _tokenAddress) external view returns (uint256) { return IERC20(_tokenAddress).balanceOf(address(this)); } /** * @dev Withdraw a specific token from this contract to the contract owner's address. * @param _tokenAddress The address of the token to withdraw. */ function withdraw(address _tokenAddress) external onlyOwner { IERC20 token = IERC20(_tokenAddress); // Create an instance of the token contract. token.transfer(msg.sender, token.balanceOf(address(this))); // Transfer the token balance to the contract owner. } /** * @dev Modifier to ensure that only the contract owner can call a specific function. */ modifier onlyOwner() { require( msg.sender == owner, "You are not the owner!" ); _; } /** * @dev Fallback function to receive ETH payments. */ receive() external payable {}}
In the scripts directory inside the root of your project, you will find a file named deploy.js. Replace its content with the following:
const { ethers } = require("hardhat");// Contract addresses and other valuesconst AVA_FUJI_POOL_PROVIDER = "0x220c6A7D868FC38ECB47d5E69b99e9906300286A";const USDC_ADDRESS = "0x6a17716Ce178e84835cfA73AbdB71cb455032456";const USDC_DECIMALS = 6;const FLASHLOAN_AMOUNT = ethers.utils.parseUnits("1000", USDC_DECIMALS);// USDC tranfer function ABIconst USDC_ABI = ["function transfer(address to, uint256 value) external returns (bool)"];async function main() { try { console.log("Deploying FlashLoan contract..."); const FlashLoan = await ethers.getContractFactory("FlashLoan"); const flashLoan = await FlashLoan.deploy(AVA_FUJI_POOL_PROVIDER); await flashLoan.deployed(); console.log(`FlashLoan contract deployed at: ${flashLoan.address}`); console.log(`View contract at: https://testnet.snowtrace.io/address/${flashLoan.address}`); console.log("---------------------------------------------------------------\n"); // Transfer USDC to the FlashLoan contract const erc20 = new ethers.Contract(USDC_ADDRESS, USDC_ABI, ethers.provider.getSigner()); const amount = ethers.utils.parseUnits("5", USDC_DECIMALS); console.log(`Transferring ${amount / 1e6} USDC to the FlashLoan contract...`); const transferErc20 = await erc20.transfer(flashLoan.address, amount); console.log(`Transferred ${amount / 1e6} USDC tokens to the FlashLoan contract`); console.log("Waiting for 1 block to verify the transfer..."); await transferErc20.wait(1); // Wait 1 block for the transaction to be verified to update the balance console.log(`---------------------------------------------------------------\n`); // Check USDC balance of the FlashLoan contract const usdcBalance = await flashLoan.getBalance(USDC_ADDRESS); console.log(`USDC balance of the FlashLoan contract is: ${usdcBalance / 1e6} USDC`); console.log("---------------------------------------------------------------\n"); // Call flash loan console.log(`Requesting a flash loan of ${FLASHLOAN_AMOUNT / 1e6} USDC...`); const flashloanTx = await flashLoan.requestFlashLoan(USDC_ADDRESS, FLASHLOAN_AMOUNT); console.log("Flash loan executed!"); console.log(`View transaction at: https://testnet.snowtrace.io/tx/${flashloanTx.hash}`); await flashloanTx.wait(1); // Wait 1 block for the transaction to be verified to update the balance console.log("---------------------------------------------------------------\n"); // Withdraw remaining USDC const remainingUSDC = await flashLoan.getBalance(USDC_ADDRESS); console.log(`Withdrawing ${remainingUSDC / 1e6} USDC from the FlashLoan contract...`); const withdrawFunds = await flashLoan.withdraw(USDC_ADDRESS); await withdrawFunds.wait(1); // Wait 1 block for the transaction to be verified console.log(`Funds sent!`) console.log(`View transaction at: https://testnet.snowtrace.io/tx/${withdrawFunds.hash}`); } catch (error) { console.error(error); process.exitCode = 1; }}main();
This code is a script that deploys a FlashLoan smart contract and uses it to request a flash loan of 1,000 USDC tokens.The script first sets some constants, including the addresses of the Aave pool provider and the USDC token on the Fuji testnet. Verify that the addresses are up to date on the Aave docs by finding the addresses for PoolAddressesProvider-Avalancheand USDC-TestnetMintableERC20-Avalanche. The amount of USDC to be borrowed is also declared here.It then deploys the FlashLoan contract and transfers 5 USDC tokens to the contract from the deployer’s account. To request flash loans, the smart contract must hold some of the tokens that you are planning to borrow; these tokens are used to repay the fee. On the V3 version, the fee is a fixed percentage, and you can find the updated fee value on the Aave docs.Next, the script checks the USDC balance of the FlashLoan contract, this is only for displaying it to the user, but you can easily implement some logic to stop the process if the funds to repay the borrowing fee are too low. It then requests a flash loan of 1,000 USDC tokens. Once the loan is executed, the remaining USDC tokens in the contract are withdrawn. The Aave documentation recommends not leaving any funds in the smart contract to avoid possible misuse by an attacker.The script uses the Hardhat development framework and the ethers.js library to interact with the blockchain network and the FlashLoan contract. It also prints out messages to the console at various points in the script’s execution to provide information about the progress of the FlashLoan operation.
To run the flash loan on the Fuji network, execute the following command in the console from your root directory:
npx hardhat run --network fuji scripts/deploy.js
This command will compile the smart contracts, deploy the FlashLoan contract and execute the operationThe result in the console will look like the following:
Deploying FlashLoan contract...FlashLoan contract deployed at: 0x77609a96E67455EcbBb3d8AD38567511dc587C54View contract at: https://testnet.snowtrace.io/address/0x77609a96E67455EcbBb3d8AD38567511dc587C54---------------------------------------------------------------Transferring 5 USDC to the FlashLoan contract...Transferred 5 USDC tokens to the FlashLoan contractWaiting for 1 block to verify the transfer...---------------------------------------------------------------USDC balance of the FlashLoan contract is: 5 USDC---------------------------------------------------------------Requesting a flash loan of 1000 USDC...Flash loan executed!View transaction at: https://testnet.snowtrace.io/tx/0xdcc41e8eec65f798aae643b99036f595137090fa777a729ce15c1a0397b247fa---------------------------------------------------------------Withdrawing 4.5 USDC from the FlashLoan contract...Funds sent!View transaction at: https://testnet.snowtrace.io/tx/0x759fbd6c513e59f48001566b86d1358c329519f6e6096ffb1748ab3ff0b6f97c
Note that you might receive two warnings from the Solidity compiler about two Unused function parameter. You can ignore the warnings as they do not stop the compiler or the execution of the flash loan. This is happening because the function is being overridden and the parameters are needed to keep the same function’s signature.
You can see how a completed deployment and flash loan looks like on the Fuji explorer by checking the following transactions:
This tutorial guided you through setting up Hardhat to work with Chainstack nodes and creating a project to run your own flash loan transaction on the Avalanche network.This tutorial uses a testnet; however, the exact same instructions and sequence will work on the mainnet as well.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Chainstack","description":"Chainstack developer documentation — deploy and manage blockchain nodes across 70+ protocols via managed cloud infrastructure or self-hosted on your own Kubernetes","colors":{"primary":"#007aff","light":"#007aff","dark":"#007aff"},"logo":{"light":"https://mintcdn.com/chainstack/4kCLdVG8vhROt3j-/logo/light.svg?fit=max\u0026auto=format\u0026n=4kCLdVG8vhROt3j-\u0026q=85\u0026s=7d2d6d754203b9b3aa553e71ac4d9991","dark":"https://mintcdn.com/chainstack/4kCLdVG8vhROt3j-/logo/dark.svg?fit=max\u0026auto=format\u0026n=4kCLdVG8vhROt3j-\u0026q=85\u0026s=0f1b86eba2477ec37c2464be89df9e6d","href":"https://chainstack.com/"},"favicon":"https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/favicon.png?fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=d58df95278b0108206c861030eca1a8a","api":{"openapi":["openapi/hyperliquid_node_api/hypercore_info/info_meta.json","openapi/hyperliquid_node_api/hypercore_info/info_meta_and_asset_ctxs.json","openapi/hyperliquid_node_api/hyperevm/evm_net_version.json","openapi/hyperliquid_node_api/hyperevm/evm_web3_client_version.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_block_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_call.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_chain_id.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_filter_changes.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_filter_logs.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_header_by_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_header_by_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_transaction_by_sender_and_nonce.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_uncle_by_block_hash_and_index.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_uncle_by_block_number_and_index.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_new_filter.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_uninstall_filter.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_get_raw_block.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_get_raw_header.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_get_raw_receipts.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_get_raw_transaction.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_trace_block.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_trace_call.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_trace_transaction.json","openapi/hyperliquid_node_api/hyperevm/evm_erigon_get_header_by_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_big_block_gas_price.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_blob_base_fee.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_call_many.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_create_access_list.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_estimate_gas.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_fee_history.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_gas_price.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_balance.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_block_by_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_block_by_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_block_receipts.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_block_transaction_count_by_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_block_transaction_count_by_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_code.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_logs.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_proof.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_raw_transaction_by_block_hash_and_index.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_raw_transaction_by_block_number_and_index.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_raw_transaction_by_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_storage_at.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_system_txs_by_block_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_system_txs_by_block_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_transaction_by_block_hash_and_index.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_transaction_by_block_number_and_index.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_transaction_by_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_transaction_count.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_transaction_receipt.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_uncle_count_by_block_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_get_uncle_count_by_block_number.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_max_priority_fee_per_gas.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_new_block_filter.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_protocol_version.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_send_raw_transaction.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_simulate_v1.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_syncing.json","openapi/hyperliquid_node_api/hyperevm/evm_eth_using_big_blocks.json","openapi/hyperliquid_node_api/hyperevm/evm_net_listening.json","openapi/hyperliquid_node_api/hyperevm/evm_net_peer_count.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_api_level.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_block_details.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_block_details_by_hash.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_block_transactions.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_contract_creator.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_header_by_number.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_internal_operations.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_transaction_by_sender_and_nonce.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_get_transaction_error.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_has_code.json","openapi/hyperliquid_node_api/hyperevm/evm_ots_trace_transaction.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_block.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_call.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_call_many.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_filter.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_raw_transaction.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_replay_block_transactions.json","openapi/hyperliquid_node_api/hyperevm/evm_trace_replay_transaction.json","openapi/hyperliquid_node_api/hypercore_info/info_batch_clearinghouse_states.json","openapi/hyperliquid_node_api/hypercore_info/info_funding_history.json","openapi/hyperliquid_node_api/hypercore_info/info_predicted_fundings.json","openapi/hyperliquid_node_api/hypercore_info/info_spot_meta_and_asset_ctxs.json","openapi/hyperliquid_node_api/hypercore_info/info_token_details.json","openapi/hyperliquid_node_api/hypercore_info/info_user_funding.json","openapi/hyperliquid_node_api/hypercore_info/info_user_non_funding_ledger_updates.json","openapi/hyperliquid_node_api/hypercore_info/info_spotmeta.json","openapi/hyperliquid_node_api/hypercore_info/info_clearinghousestate.json","openapi/hyperliquid_node_api/hypercore_info/info_spotclearinghousestate.json","openapi/hyperliquid_node_api/hypercore_info/info_openorders.json","openapi/hyperliquid_node_api/hypercore_info/info_exchangestatus.json","openapi/hyperliquid_node_api/hypercore_info/info_frontendopenorders.json","openapi/hyperliquid_node_api/hypercore_info/info_liquidatable.json","openapi/hyperliquid_node_api/hypercore_info/info_activeassetdata.json","openapi/hyperliquid_node_api/hypercore_info/info_maxmarketorderntls.json","openapi/hyperliquid_node_api/hypercore_info/info_vaultsummaries.json","openapi/hyperliquid_node_api/hypercore_info/info_uservaultequities.json","openapi/hyperliquid_node_api/hypercore_info/info_leadingvaults.json","openapi/hyperliquid_node_api/hypercore_info/info_extraagents.json","openapi/hyperliquid_node_api/hypercore_info/info_subaccounts.json","openapi/hyperliquid_node_api/hypercore_info/info_userfees.json","openapi/hyperliquid_node_api/hypercore_info/info_userratelimit.json","openapi/hyperliquid_node_api/hypercore_info/info_spotdeploystate.json","openapi/hyperliquid_node_api/hypercore_info/info_perpdeployauctionstatus.json","openapi/hyperliquid_node_api/hypercore_info/info_delegations.json","openapi/hyperliquid_node_api/hypercore_info/info_perpdexs.json","openapi/hyperliquid_node_api/hypercore_info/info_delegator_summary.json","openapi/hyperliquid_node_api/hypercore_info/info_delegator_history.json","openapi/hyperliquid_node_api/hypercore_info/info_delegator_rewards.json","openapi/hyperliquid_node_api/hypercore_info/info_max_builder_fee.json","openapi/hyperliquid_node_api/hypercore_info/info_user_to_multi_sig_signers.json","openapi/hyperliquid_node_api/hypercore_info/info_user_role.json","openapi/hyperliquid_node_api/hypercore_info/info_perps_at_open_interest_cap.json","openapi/hyperliquid_node_api/hypercore_info/info_validator_l1_votes.json","openapi/hyperliquid_node_api/hypercore_info/info_web_data2.json","openapi/hyperliquid_node_api/hypercore_info/info_allmids.json","openapi/hyperliquid_node_api/hypercore_info/info_user_fills.json","openapi/hyperliquid_node_api/hypercore_info/info_user_fills_by_time.json","openapi/hyperliquid_node_api/hypercore_info/info_portfolio.json","openapi/hyperliquid_node_api/hypercore_info/info_referral.json","openapi/hyperliquid_node_api/hypercore_info/info_order_status.json","openapi/hyperliquid_node_api/hypercore_info/info_l2_book.json","openapi/hyperliquid_node_api/hypercore_info/info_candle_snapshot.json","openapi/hyperliquid_node_api/hypercore_info/info_historical_orders.json","openapi/hyperliquid_node_api/hypercore_info/info_user_twap_slice_fills.json","openapi/hyperliquid_node_api/hypercore_info/info_recent_trades.json","openapi/hyperliquid_node_api/hypercore_info/info_vault_details.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_place_order.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_cancel_order.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_cancel_by_cloid.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_schedule_cancel.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_modify_order.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_batch_modify.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_update_leverage.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_update_isolated_margin.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_usd_send.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_spot_send.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_withdraw.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_spot_perp_transfer.json","openapi/hyperliquid_node_api/hypercore_info/info_web_data3.json","openapi/hyperliquid_node_api/hypercore_info/info_user_dex_abstraction.json","openapi/hyperliquid_node_api/hypercore_info/info_user_abstraction.json","openapi/hyperliquid_node_api/hypercore_info/info_borrow_lend_user_state.json","openapi/hyperliquid_node_api/hypercore_info/info_borrow_lend_reserve_state.json","openapi/hyperliquid_node_api/hypercore_info/info_all_borrow_lend_reserve_states.json","openapi/hyperliquid_node_api/hypercore_info/info_all_perp_metas.json","openapi/hyperliquid_node_api/hypercore_info/info_perp_annotation.json","openapi/hyperliquid_node_api/hypercore_info/info_perp_categories.json","openapi/hyperliquid_node_api/hypercore_info/info_perp_dex_limits.json","openapi/hyperliquid_node_api/hypercore_info/info_perp_dex_status.json","openapi/hyperliquid_node_api/hypercore_info/info_spot_pair_deploy_auction_status.json","openapi/hyperliquid_node_api/hypercore_info/info_margin_table.json","openapi/hyperliquid_node_api/hypercore_info/info_aligned_quote_token_info.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_twap_order.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_twap_cancel.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_approve_agent.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_approve_builder_fee.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_set_referrer.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_create_sub_account.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_sub_account_transfer.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_sub_account_spot_transfer.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_convert_to_multi_sig_user.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_multi_sig.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_user_set_abstraction.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_agent_set_abstraction.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_user_dex_abstraction.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_agent_enable_dex_abstraction.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_evm_user_modify.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_send_asset.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_send_to_evm_with_data.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_vault_transfer.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_token_delegate.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_c_deposit.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_c_withdraw.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_spot_deploy.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_perp_deploy.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_c_signer_action.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_c_validator_action.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_validator_l1_stream.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_noop.json","openapi/hyperliquid_node_api/hypercore_exchange/exchange_reserve_request_weight.json","openapi/hyperliquid_node_api/hyperevm/evm_debug_trace_block_by_number.json","openapi/ethereum_node_api/transaction_info/eth_getTransactionReceipt.json","openapi/ethereum_node_api/transaction_info/eth_getTransactionByBlockNumberAndIndex.json","openapi/ethereum_node_api/transaction_info/eth_getBlockReceipts.json","openapi/ethereum_node_api/transaction_info/eth_getTransactionByHash.json","openapi/ethereum_node_api/transaction_info/eth_newPendingTransactionFilter.json","openapi/ethereum_node_api/transaction_info/eth_getTransactionByBlockHashAndIndex.json","openapi/ethereum_node_api/chain_info/eth_syncing.json","openapi/ethereum_node_api/chain_info/eth_chainId.json","openapi/ethereum_node_api/debug_and_trace/custom_js_tracer.json","openapi/ethereum_node_api/debug_and_trace/debug_traceTransaction.json","openapi/ethereum_node_api/debug_and_trace/debug_traceCall.json","openapi/ethereum_node_api/debug_and_trace/trace_transaction.json","openapi/ethereum_node_api/debug_and_trace/debug_traceBlockByHash.json","openapi/ethereum_node_api/debug_and_trace/trace_block.json","openapi/ethereum_node_api/debug_and_trace/debug_traceBlockByNumber.json","openapi/ethereum_node_api/gas_data/eth_gasPrice.json","openapi/ethereum_node_api/gas_data/eth_estimateGas.json","openapi/ethereum_node_api/gas_data/eth_maxPriorityFeePerGas.json","openapi/ethereum_node_api/filter_handling/eth_getFilterChanges.json","openapi/ethereum_node_api/filter_handling/eth_uninstallFilter.json","openapi/ethereum_node_api/client_info/net_peerCount.json","openapi/ethereum_node_api/client_info/net_listening.json","openapi/ethereum_node_api/client_info/web3_clientVersion.json","openapi/ethereum_node_api/blocks_info/eth_getBlockByNumber.json","openapi/ethereum_node_api/blocks_info/eth_getBlockTransactionCountByHash.json","openapi/ethereum_node_api/blocks_info/eth_blockNumber.json","openapi/ethereum_node_api/blocks_info/eth_newBlockFilter.json","openapi/ethereum_node_api/blocks_info/eth_getBlockByHash.json","openapi/ethereum_node_api/blocks_info/eth_getBlockTransactionCountByNumber.json","openapi/ethereum_node_api/accounts_info/eth_getStorageAt.json","openapi/ethereum_node_api/accounts_info/eth_getBalance.json","openapi/ethereum_node_api/accounts_info/eth_getTransactionCount.json","openapi/ethereum_node_api/accounts_info/eth_getCode.json","openapi/ethereum_node_api/accounts_info/eth_getProof.json","openapi/ethereum_node_api/logs_and_events/eth_newFilter.json","openapi/ethereum_node_api/logs_and_events/eth_getLogs.json","openapi/ethereum_node_api/execute_transactions/eth_simulateV1.json","openapi/ethereum_node_api/execute_transactions/eth_call.json","openapi/ethereum_node_api/execute_transactions/eth_sendRawTransaction.json","openapi/ethereum_beacon_chain_api/configuration_info/node_config.json","openapi/ethereum_beacon_chain_api/configuration_info/genesis_data.json","openapi/ethereum_beacon_chain_api/configuration_info/fork_schedule.json","openapi/ethereum_beacon_chain_api/configuration_info/fork_version_by_state_id.json","openapi/ethereum_beacon_chain_api/configuration_info/deposit_contract.json","openapi/ethereum_beacon_chain_api/state/getStateRoot.json","openapi/ethereum_beacon_chain_api/state/getFinalityCheckpoints.json","openapi/ethereum_beacon_chain_api/state/getCommitteesByStateIdEpochIndexAndSlot.json","openapi/ethereum_beacon_chain_api/state/getBlobsByBlockId.json","openapi/ethereum_beacon_chain_api/state/getSyncCommitteeContribution.json","openapi/ethereum_beacon_chain_api/state/getBeaconBlockRootByBlockId.json","openapi/ethereum_beacon_chain_api/state/getBeaconBlocksByBlockId.json","openapi/ethereum_beacon_chain_api/state/getBeaconHeadersByBlockId.json","openapi/ethereum_beacon_chain_api/state/getBeaconHeadersBySlotAndParentRoot.json","openapi/ethereum_beacon_chain_api/state/getSyncCommitteesByStateIdAndEpoch.json","openapi/ethereum_beacon_chain_api/events/subscribe_to_events.json","openapi/ethereum_beacon_chain_api/validatiors_info/validator_information_by_state_id.json","openapi/ethereum_beacon_chain_api/validatiors_info/proposer_duties.json","openapi/ethereum_beacon_chain_api/validatiors_info/validator_information_by_state_id_or_public_key.json","openapi/ethereum_beacon_chain_api/validatiors_info/attestation_data.json","openapi/ethereum_beacon_chain_api/validatiors_info/produce_unsigned_blinded_block.json","openapi/ethereum_beacon_chain_api/validatiors_info/voluntary_exits.json","openapi/ethereum_beacon_chain_api/validatiors_info/produce_unsigned_block.json","openapi/ethereum_beacon_chain_api/validatiors_info/attestation_of_beacon_block_by_block_id.json","openapi/ethereum_beacon_chain_api/validatiors_info/proposer_slashings.json","openapi/ethereum_beacon_chain_api/validatiors_info/validator_balances.json","openapi/ethereum_beacon_chain_api/validatiors_info/attester_slashings.json","openapi/ethereum_beacon_chain_api/validatiors_info/beacon_pool_attestations.json","openapi/polygon_node_api/transaction_info/eth_getTransactionReceipt.json","openapi/polygon_node_api/transaction_info/eth_getTransactionByBlockNumberAndIndex.json","openapi/polygon_node_api/transaction_info/eth_getBlockReceipts.json","openapi/polygon_node_api/transaction_info/eth_getTransactionByHash.json","openapi/polygon_node_api/transaction_info/eth_newPendingTransactionFilter.json","openapi/polygon_node_api/transaction_info/eth_getTransactionByBlockHashAndIndex.json","openapi/polygon_node_api/chain_info/eth_syncing.json","openapi/polygon_node_api/chain_info/eth_chainId.json","openapi/polygon_node_api/debug_and_trace/debug_traceTransaction.json","openapi/polygon_node_api/debug_and_trace/debug_traceCall.json","openapi/polygon_node_api/debug_and_trace/debug_traceBlockByHash.json","openapi/polygon_node_api/debug_and_trace/debug_traceBlockByNumber.json","openapi/polygon_node_api/gas_data/eth_gasPrice.json","openapi/polygon_node_api/gas_data/eth_estimateGas.json","openapi/polygon_node_api/filter_handling/eth_getFilterChanges.json","openapi/polygon_node_api/filter_handling/eth_uninstallFilter.json","openapi/polygon_node_api/client_info/net_peerCount.json","openapi/polygon_node_api/client_info/net_listening.json","openapi/polygon_node_api/client_info/web3_clientVersion.json","openapi/polygon_node_api/blocks_info/eth_getBlockByNumber.json","openapi/polygon_node_api/blocks_info/eth_getBlockTransactionCountByHash.json","openapi/polygon_node_api/blocks_info/eth_blockNumber.json","openapi/polygon_node_api/blocks_info/eth_newBlockFilter.json","openapi/polygon_node_api/blocks_info/eth_getBlockByHash.json","openapi/polygon_node_api/blocks_info/eth_getBlockTransactionCountByNumber.json","openapi/polygon_node_api/account_info/eth_getStorageAt.json","openapi/polygon_node_api/account_info/eth_getBalance.json","openapi/polygon_node_api/account_info/eth_getTransactionCount.json","openapi/polygon_node_api/account_info/eth_getCode.json","openapi/polygon_node_api/logs_and_events/eth_newFilter.json","openapi/polygon_node_api/logs_and_events/eth_getLogs.json","openapi/polygon_node_api/execute_transactions/eth_call.json","openapi/polygon_node_api/execute_transactions/eth_sendRawTransaction.json","openapi/bnb_node_api/eth_getBlockByNumber.json","openapi/bnb_node_api/eth_getTransactionReceipt.json","openapi/bnb_node_api/eth_getStorageAt.json","openapi/bnb_node_api/eth_getTransactionByBlockNumberAndIndex.json","openapi/bnb_node_api/eth_getBlockTransactionCountByHash.json","openapi/bnb_node_api/eth_getBalance.json","openapi/bnb_node_api/net_peerCount.json","openapi/bnb_node_api/eth_gasPrice.json","openapi/bnb_node_api/trace_replayBlockTransactions.json","openapi/bnb_node_api/trace_callMany.json","openapi/bnb_node_api/eth_blockNumber.json","openapi/bnb_node_api/trace_get.json","openapi/bnb_node_api/net_listening.json","openapi/bnb_node_api/custom_js_tracer.json","openapi/bnb_node_api/eth_newBlockFilter.json","openapi/bnb_node_api/eth_getFilterChanges.json","openapi/bnb_node_api/debug_traceTransaction.json","openapi/bnb_node_api/eth_estimateGas.json","openapi/bnb_node_api/eth_getTransactionCount.json","openapi/bnb_node_api/eth_getBlockReceipts.json","openapi/bnb_node_api/debug_traceCall.json","openapi/bnb_node_api/trace_replayTransaction.json","openapi/bnb_node_api/eth_getTransactionByHash.json","openapi/bnb_node_api/eth_newPendingTransactionFilter.json","openapi/bnb_node_api/eth_syncing.json","openapi/bnb_node_api/trace_transaction.json","openapi/bnb_node_api/debug_traceBlockByHash.json","openapi/bnb_node_api/eth_getBlockByHash.json","openapi/bnb_node_api/eth_call.json","openapi/bnb_node_api/eth_chainId.json","openapi/bnb_node_api/trace_block.json","openapi/bnb_node_api/eth_getBlockTransactionCountByNumber.json","openapi/bnb_node_api/eth_uninstallFilter.json","openapi/bnb_node_api/trace_call.json","openapi/bnb_node_api/eth_getCode.json","openapi/bnb_node_api/eth_maxPriorityFeePerGas.json","openapi/bnb_node_api/web3_clientVersion.json","openapi/bnb_node_api/eth_getTransactionByBlockHashAndIndex.json","openapi/bnb_node_api/eth_newFilter.json","openapi/bnb_node_api/eth_getLogs.json","openapi/bnb_node_api/eth_getProof.json","openapi/bnb_node_api/debug_traceBlockByNumber.json","openapi/bnb_node_api/eth_sendRawTransaction.json","openapi/base_node_api/eth_protocolVersion.json","openapi/base_node_api/eth_getUncleByBlockNumberAndIndex.json","openapi/base_node_api/eth_getBlockByNumber.json","openapi/base_node_api/eth_getTransactionReceipt.json","openapi/base_node_api/eth_getStorageAt.json","openapi/base_node_api/debug_traceCallMany.json","openapi/base_node_api/eth_getTransactionByBlockNumberAndIndex.json","openapi/base_node_api/eth_getBlockTransactionCountByHash.json","openapi/base_node_api/eth_getUncleCountByBlockHash.json","openapi/base_node_api/eth_getBalance.json","openapi/base_node_api/eth_getRawTransactionByBlockNumberAndIndex.json","openapi/base_node_api/debug_getModifiedAccountsByNumber.json","openapi/base_node_api/eth_gasPrice.json","openapi/base_node_api/trace_replayBlockTransactions.json","openapi/base_node_api/eth_blockNumber.json","openapi/base_node_api/trace_get.json","openapi/base_node_api/eth_getFilterLogs.json","openapi/base_node_api/eth_getUncleCountByBlockNumber.json","openapi/base_node_api/eth_createAccessList.json","openapi/base_node_api/net_listening.json","openapi/base_node_api/eth_newBlockFilter.json","openapi/base_node_api/eth_getFilterChanges.json","openapi/base_node_api/debug_traceTransaction.json","openapi/base_node_api/eth_estimateGas.json","openapi/base_node_api/eth_getTransactionCount.json","openapi/base_node_api/eth_getBlockReceipts.json","openapi/base_node_api/debug_traceCall.json","openapi/base_node_api/trace_replayTransaction.json","openapi/base_node_api/eth_getTransactionByHash.json","openapi/base_node_api/eth_getRawTransactionByHash.json","openapi/base_node_api/eth_newPendingTransactionFilter.json","openapi/base_node_api/eth_syncing.json","openapi/base_node_api/trace_transaction.json","openapi/base_node_api/debug_traceBlockByHash.json","openapi/base_node_api/eth_accounts.json","openapi/base_node_api/eth_getBlockByHash.json","openapi/base_node_api/web3_sha3.json","openapi/base_node_api/eth_callMany.json","openapi/base_node_api/eth_call.json","openapi/base_node_api/eth_chainId.json","openapi/base_node_api/eth_feeHistory.json","openapi/base_node_api/trace_block.json","openapi/base_node_api/eth_getBlockTransactionCountByNumber.json","openapi/base_node_api/eth_uninstallFilter.json","openapi/base_node_api/debug_storageRangeAt.json","openapi/base_node_api/trace_call.json","openapi/base_node_api/eth_getCode.json","openapi/base_node_api/eth_maxPriorityFeePerGas.json","openapi/base_node_api/debug_getModifiedAccountsByHash.json","openapi/base_node_api/web3_clientVersion.json","openapi/base_node_api/trace_callMany_method.json","openapi/base_node_api/eth_getRawTransactionByBlockHashAndIndex.json","openapi/base_node_api/eth_getTransactionByBlockHashAndIndex.json","openapi/base_node_api/eth_getUncleByBlockHashAndIndex.json","openapi/base_node_api/eth_newFilter.json","openapi/base_node_api/eth_getLogs.json","openapi/base_node_api/eth_getProof.json","openapi/base_node_api/debug_traceBlockByNumber.json","openapi/base_node_api/eth_sendRawTransaction.json","openapi/base_node_api/eth_sendRawTransactionSync.json","openapi/avalanche_node_api/chain_info/eth_syncing.json","openapi/avalanche_node_api/chain_info/eth_chainId.json","openapi/avalanche_node_api/debug_and_trace/debug_traceTransaction.json","openapi/avalanche_node_api/debug_and_trace/debug_traceCall.json","openapi/avalanche_node_api/debug_and_trace/debug_traceBlockByHash.json","openapi/avalanche_node_api/debug_and_trace/debug_traceBlockByNumber.json","openapi/avalanche_node_api/gas_data/eth_gasPrice.json","openapi/avalanche_node_api/gas_data/eth_estimateGas.json","openapi/avalanche_node_api/transactions_info/eth_getTransactionReceipt.json","openapi/avalanche_node_api/transactions_info/eth_getTransactionByBlockNumberAndIndex.json","openapi/avalanche_node_api/transactions_info/eth_getTransactionByHash.json","openapi/avalanche_node_api/transactions_info/eth_newPendingTransactionFilter.json","openapi/avalanche_node_api/transactions_info/eth_getTransactionByBlockHashAndIndex.json","openapi/avalanche_node_api/filter_handling/eth_getFilterChanges.json","openapi/avalanche_node_api/filter_handling/eth_uninstallFilter.json","openapi/avalanche_node_api/client_info/net_listening.json","openapi/avalanche_node_api/client_info/web3_clientVersion.json","openapi/avalanche_node_api/blocks_info/eth_getBlockByNumber.json","openapi/avalanche_node_api/blocks_info/eth_getBlockTransactionCountByHash.json","openapi/avalanche_node_api/blocks_info/eth_blockNumber.json","openapi/avalanche_node_api/blocks_info/eth_newBlockFilter.json","openapi/avalanche_node_api/blocks_info/eth_getBlockByHash.json","openapi/avalanche_node_api/blocks_info/eth_getBlockTransactionCountByNumber.json","openapi/avalanche_node_api/accounts_info/eth_getStorageAt.json","openapi/avalanche_node_api/accounts_info/eth_getBalance.json","openapi/avalanche_node_api/accounts_info/eth_getTransactionCount.json","openapi/avalanche_node_api/accounts_info/eth_getCode.json","openapi/avalanche_node_api/logs_and_events/eth_newFilter.json","openapi/avalanche_node_api/logs_and_events/eth_getLogs.json","openapi/avalanche_node_api/execute_transactions/eth_call.json","openapi/avalanche_node_api/execute_transactions/eth_sendRawTransaction.json","openapi/ton_node_api/v2/getMasterchainBlockSignatures.json","openapi/ton_node_api/v2/getBlockTransactionsExt.json","openapi/ton_node_api/v2/runGetMethod.json","openapi/ton_node_api/v2/getAddressState.json","openapi/ton_node_api/v2/unpackAddress.json","openapi/ton_node_api/v2/lookupBlock.json","openapi/ton_node_api/v2/tryLocateTx.json","openapi/ton_node_api/v2/tryLocateResultTx.json","openapi/ton_node_api/v2/getTransactions.json","openapi/ton_node_api/v2/packAddress.json","openapi/ton_node_api/v2/getExtendedAddressInformation.json","openapi/ton_node_api/v2/getBlockHeader.json","openapi/ton_node_api/v2/getMasterchainInfo.json","openapi/ton_node_api/v2/getWalletInformation.json","openapi/ton_node_api/v2/tryLocateSourceTx.json","openapi/ton_node_api/v2/getBlockTransactions.json","openapi/ton_node_api/v2/getAddressInformation.json","openapi/ton_node_api/v2/detectAddress.json","openapi/ton_node_api/v2/getShardBlockProof.json","openapi/ton_node_api/v2/getAddressBalance.json","openapi/ton_node_api/v2/getConsensusBlock.json","openapi/ton_node_api/v2/shards.json","openapi/ton_node_api/v2/getConfigParam.json","openapi/ton_node_api/v2/getTokenData.json","openapi/ton_node_api/v3/runGetMethod.json","openapi/ton_node_api/v3/getNFTTransfers.json","openapi/ton_node_api/v3/getMasterchainBlockShardState.json","openapi/ton_node_api/v3/getNFTItems.json","openapi/ton_node_api/v3/getWalletInfo.json","openapi/ton_node_api/v3/getTransactions.json","openapi/ton_node_api/v3/getTransactionsByMasterchainBlock.json","openapi/ton_node_api/v3/getMasterchainInfo.json","openapi/ton_node_api/v3/estimateFee.json","openapi/ton_node_api/v3/getAdjacentTransactions.json","openapi/ton_node_api/v3/getTransactionsByMessage.json","openapi/ton_node_api/v3/getJettonMasters.json","openapi/ton_node_api/v3/getNFTCollections.json","openapi/ton_node_api/v3/getJettonWallets.json","openapi/ton_node_api/v3/getBlocks.json","openapi/ton_node_api/v3/getJettonTransfers.json","openapi/ton_node_api/v3/getAccountInfo.json","openapi/ton_node_api/v3/getAddressBookInfo.json","openapi/ton_node_api/v3/getMessages.json","openapi/ton_node_api/v3/getJettonBurns.json","openapi/ton_node_api/v3/getMasterchainBlockShards.json","openapi/arbitrum_node_api/transaction_info/eth_getTransactionReceipt.json","openapi/arbitrum_node_api/transaction_info/eth_getTransactionByBlockNumberAndIndex.json","openapi/arbitrum_node_api/transaction_info/eth_getTransactionByHash.json","openapi/arbitrum_node_api/transaction_info/eth_getTransactionByBlockHashAndIndex.json","openapi/arbitrum_node_api/transaction_info/eth_simulateV1.json","openapi/arbitrum_node_api/chain_info/eth_syncing.json","openapi/arbitrum_node_api/chain_info/eth_chainId.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_callMany.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_transaction.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_filter.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_replayBlockTransactions.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_get.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_replayTransaction.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_block.json","openapi/arbitrum_node_api/debug_and_trace/arbtrace_call.json","openapi/arbitrum_node_api/gas_data/eth_gasPrice.json","openapi/arbitrum_node_api/gas_data/eth_estimateGas.json","openapi/arbitrum_node_api/filter_handling/eth_getFilterChanges.json","openapi/arbitrum_node_api/filter_handling/eth_uninstallFilter.json","openapi/arbitrum_node_api/client_info/web3_clientVersion.json","openapi/arbitrum_node_api/blocks_info/eth_getBlockByNumber.json","openapi/arbitrum_node_api/blocks_info/eth_getBlockTransactionCountByHash.json","openapi/arbitrum_node_api/blocks_info/eth_blockNumber.json","openapi/arbitrum_node_api/blocks_info/eth_newBlockFilter.json","openapi/arbitrum_node_api/blocks_info/eth_getBlockByHash.json","openapi/arbitrum_node_api/blocks_info/eth_getBlockTransactionCountByNumber.json","openapi/arbitrum_node_api/accounts_info/eth_getStorageAt.json","openapi/arbitrum_node_api/accounts_info/eth_getBalance.json","openapi/arbitrum_node_api/accounts_info/eth_getTransactionCount.json","openapi/arbitrum_node_api/accounts_info/eth_getCode.json","openapi/arbitrum_node_api/logs_and_events/eth_newFilter.json","openapi/arbitrum_node_api/logs_and_events/eth_getLogs.json","openapi/arbitrum_node_api/execute_transactions/eth_call.json","openapi/arbitrum_node_api/execute_transactions/eth_sendRawTransaction.json","openapi/zksync_node_api/zks_getTestnetPaymaster.json","openapi/zksync_node_api/zks_estimateFee.json","openapi/zksync_node_api/zks_estimateGasL1ToL2.json","openapi/zksync_node_api/zks_getBytecodeByHash.json","openapi/zksync_node_api/zks_getMainContract.json","openapi/zksync_node_api/zks_L1ChainId.json","openapi/zksync_node_api/zks_getBlockDetails.json","openapi/zksync_node_api/zks_getBridgeContracts.json","openapi/zksync_node_api/zks_getL2ToL1LogProof.json","openapi/zksync_node_api/zks_getAllAccountBalances.json","openapi/zksync_node_api/zks_L1BatchNumber.json","openapi/zksync_node_api/zks_getL1BatchBlockRange.json","openapi/zksync_node_api/zks_getL1BatchDetails.json","openapi/zksync_node_api/zks_getTransactionDetails.json","openapi/zksync_node_api/zks_getRawBlockTransactions.json","openapi/optimism_node_api/eth_getBlockByNumber.json","openapi/optimism_node_api/eth_getTransactionReceipt.json","openapi/optimism_node_api/eth_getStorageAt.json","openapi/optimism_node_api/debug_traceCallMany.json","openapi/optimism_node_api/eth_getTransactionByBlockNumberAndIndex.json","openapi/optimism_node_api/eth_getBlockTransactionCountByHash.json","openapi/optimism_node_api/eth_getUncleCountByBlockHash.json","openapi/optimism_node_api/eth_getBalance.json","openapi/optimism_node_api/eth_getRawTransactionByBlockNumberAndIndex.json","openapi/optimism_node_api/debug_getModifiedAccountsByNumber.json","openapi/optimism_node_api/eth_gasPrice.json","openapi/optimism_node_api/eth_blockNumber.json","openapi/optimism_node_api/eth_getFilterLogs.json","openapi/optimism_node_api/eth_getUncleCountByBlockNumber.json","openapi/optimism_node_api/eth_createAccessList.json","openapi/optimism_node_api/net_listening.json","openapi/optimism_node_api/eth_newBlockFilter.json","openapi/optimism_node_api/eth_getFilterChanges.json","openapi/optimism_node_api/debug_traceTransaction.json","openapi/optimism_node_api/eth_estimateGas.json","openapi/optimism_node_api/eth_getTransactionCount.json","openapi/optimism_node_api/eth_getBlockReceipts.json","openapi/optimism_node_api/debug_traceCall.json","openapi/optimism_node_api/eth_getTransactionByHash.json","openapi/optimism_node_api/eth_getRawTransactionByHash.json","openapi/optimism_node_api/eth_syncing.json","openapi/optimism_node_api/debug_traceBlockByHash.json","openapi/optimism_node_api/eth_getBlockByHash.json","openapi/optimism_node_api/web3_sha3.json","openapi/optimism_node_api/eth_callMany.json","openapi/optimism_node_api/eth_call.json","openapi/optimism_node_api/eth_chainId.json","openapi/optimism_node_api/eth_feeHistory.json","openapi/optimism_node_api/eth_getBlockTransactionCountByNumber.json","openapi/optimism_node_api/eth_uninstallFilter.json","openapi/optimism_node_api/debug_storageRangeAt.json","openapi/optimism_node_api/eth_getCode.json","openapi/optimism_node_api/eth_maxPriorityFeePerGas.json","openapi/optimism_node_api/debug_getModifiedAccountsByHash.json","openapi/optimism_node_api/web3_clientVersion.json","openapi/optimism_node_api/eth_getRawTransactionByBlockHashAndIndex.json","openapi/optimism_node_api/eth_getTransactionByBlockHashAndIndex.json","openapi/optimism_node_api/eth_newFilter.json","openapi/optimism_node_api/eth_getLogs.json","openapi/optimism_node_api/eth_getProof.json","openapi/optimism_node_api/debug_traceBlockByNumber.json","openapi/optimism_node_api/eth_sendRawTransaction.json","openapi/solana_node_api/getLatestBlockhash.json","openapi/solana_node_api/getRecentPrioritizationFees.json","openapi/solana_node_api/getInflationRate.json","openapi/solana_node_api/getBlockProduction.json","openapi/solana_node_api/getHighestSnapshotSlot.json","openapi/solana_node_api/getMaxShredInsertSlot.json","openapi/solana_node_api/getFirstAvailableBlock.json","openapi/solana_node_api/getBlockTime.json","openapi/solana_node_api/getMinimumBalanceForRentExemption.json","openapi/solana_node_api/getProgramAccounts.json","openapi/solana_node_api/getBlock.json","openapi/solana_node_api/getInflationReward.json","openapi/solana_node_api/getFeeForMessage.json","openapi/solana_node_api/getClusterNodes.json","openapi/solana_node_api/getStakeMinimumDelegation.json","openapi/solana_node_api/getTokenAccountsByOwner.json","openapi/solana_node_api/simulateTransaction.json","openapi/solana_node_api/sendTransaction.json","openapi/solana_node_api/getTransactionCount.json","openapi/solana_node_api/getVersion.json","openapi/solana_node_api/getVoteAccounts.json","openapi/solana_node_api/getSlotLeaders.json","openapi/solana_node_api/minimumLedgerSlot.json","openapi/solana_node_api/getTokenSupply.json","openapi/solana_node_api/getTokenAccountsByDelegate.json","openapi/solana_node_api/getHealth.json","openapi/solana_node_api/getGenesisHash.json","openapi/solana_node_api/getSignaturesForAddress.json","openapi/solana_node_api/isBlockhashValid.json","openapi/solana_node_api/getRecentBlockhash.json","openapi/solana_node_api/getBalance.json","openapi/solana_node_api/getSignatureStatuses.json","openapi/solana_node_api/getLeaderSchedule.json","openapi/solana_node_api/getSlotLeader.json","openapi/solana_node_api/getEpochInfo.json","openapi/solana_node_api/getEpochSchedule.json","openapi/solana_node_api/getTokenAccountBalance.json","openapi/solana_node_api/getLargestAccounts.json","openapi/solana_node_api/getRecentPerformanceSamples.json","openapi/solana_node_api/getSupply.json","openapi/solana_node_api/getBlocks.json","openapi/solana_node_api/getInflationGovernor.json","openapi/solana_node_api/getIdentity.json","openapi/solana_node_api/getAccountInfo.json","openapi/solana_node_api/getTokenLargestAccounts.json","openapi/solana_node_api/getBlockCommitment.json","openapi/solana_node_api/getMaxRetransmitSlot.json","openapi/solana_node_api/getMultipleAccounts.json","openapi/solana_node_api/getSlot.json","openapi/solana_node_api/getBlockHeight.json","openapi/solana_node_api/getTransaction.json","openapi/solana_node_api/getBlocksWithLimit.json","openapi/ronin_node_api/eth_getBlockByNumber.json","openapi/ronin_node_api/eth_getTransactionReceipt.json","openapi/ronin_node_api/eth_getStorageAt.json","openapi/ronin_node_api/eth_getTransactionByBlockNumberAndIndex.json","openapi/ronin_node_api/eth_getBlockTransactionCountByHash.json","openapi/ronin_node_api/eth_getBalance.json","openapi/ronin_node_api/net_peerCount.json","openapi/ronin_node_api/eth_gasPrice.json","openapi/ronin_node_api/eth_blockNumber.json","openapi/ronin_node_api/net_listening.json","openapi/ronin_node_api/eth_newBlockFilter.json","openapi/ronin_node_api/eth_getFilterChanges.json","openapi/ronin_node_api/debug_traceTransaction.json","openapi/ronin_node_api/eth_estimateGas.json","openapi/ronin_node_api/eth_getTransactionCount.json","openapi/ronin_node_api/debug_traceCall.json","openapi/ronin_node_api/eth_getTransactionByHash.json","openapi/ronin_node_api/eth_syncing.json","openapi/ronin_node_api/debug_traceBlockByHash.json","openapi/ronin_node_api/eth_getBlockByHash.json","openapi/ronin_node_api/eth_call.json","openapi/ronin_node_api/eth_chainId.json","openapi/ronin_node_api/eth_getBlockTransactionCountByNumber.json","openapi/ronin_node_api/eth_uninstallFilter.json","openapi/ronin_node_api/eth_getCode.json","openapi/ronin_node_api/eth_maxPriorityFeePerGas.json","openapi/ronin_node_api/web3_clientVersion.json","openapi/ronin_node_api/eth_getTransactionByBlockHashAndIndex.json","openapi/ronin_node_api/eth_newFilter.json","openapi/ronin_node_api/eth_getLogs.json","openapi/ronin_node_api/debug_traceBlockByNumber.json","openapi/ronin_node_api/eth_sendRawTransaction.json","openapi/gnosis_node_api/transaction_info/eth_getTransactionReceipt.json","openapi/gnosis_node_api/transaction_info/eth_getTransactionByBlockNumberAndIndex.json","openapi/gnosis_node_api/transaction_info/eth_getTransactionByHash.json","openapi/gnosis_node_api/transaction_info/eth_newPendingTransactionFilter.json","openapi/gnosis_node_api/transaction_info/eth_getTransactionByBlockHashAndIndex.json","openapi/gnosis_node_api/chain_info/eth_syncing.json","openapi/gnosis_node_api/chain_info/eth_chainId.json","openapi/gnosis_node_api/gas_data/eth_gasPrice.json","openapi/gnosis_node_api/gas_data/eth_estimateGas.json","openapi/gnosis_node_api/filter_handling/eth_getFilterChanges.json","openapi/gnosis_node_api/filter_handling/eth_uninstallFilter.json","openapi/gnosis_node_api/client_info/net_peerCount.json","openapi/gnosis_node_api/client_info/net_listening.json","openapi/gnosis_node_api/client_info/web3_clientVersion.json","openapi/gnosis_node_api/blocks_info/eth_getBlockByNumber.json","openapi/gnosis_node_api/blocks_info/eth_getBlockTransactionCountByHash.json","openapi/gnosis_node_api/blocks_info/eth_blockNumber.json","openapi/gnosis_node_api/blocks_info/eth_newBlockFilter.json","openapi/gnosis_node_api/blocks_info/eth_getBlockByHash.json","openapi/gnosis_node_api/blocks_info/eth_getBlockTransactionCountByNumber.json","openapi/gnosis_node_api/accounts_info/eth_getStorageAt.json","openapi/gnosis_node_api/accounts_info/eth_getBalance.json","openapi/gnosis_node_api/accounts_info/eth_getTransactionCount.json","openapi/gnosis_node_api/accounts_info/eth_getCode.json","openapi/gnosis_node_api/logs_and_events/eth_newFilter.json","openapi/gnosis_node_api/logs_and_events/eth_getLogs.json","openapi/gnosis_node_api/execute_transactions/eth_call.json","openapi/gnosis_node_api/execute_transactions/eth_sendRawTransaction.json","openapi/cronos_node_api/eth_getBlockByNumber.json","openapi/cronos_node_api/eth_getTransactionReceipt.json","openapi/cronos_node_api/eth_getStorageAt.json","openapi/cronos_node_api/eth_getTransactionByBlockNumberAndIndex.json","openapi/cronos_node_api/eth_getBlockTransactionCountByHash.json","openapi/cronos_node_api/eth_getBalance.json","openapi/cronos_node_api/net_peerCount.json","openapi/cronos_node_api/eth_gasPrice.json","openapi/cronos_node_api/eth_blockNumber.json","openapi/cronos_node_api/net_listening.json","openapi/cronos_node_api/eth_newBlockFilter.json","openapi/cronos_node_api/eth_getFilterChanges.json","openapi/cronos_node_api/eth_estimateGas.json","openapi/cronos_node_api/eth_getTransactionCount.json","openapi/cronos_node_api/eth_getTransactionByHash.json","openapi/cronos_node_api/eth_newPendingTransactionFilter.json","openapi/cronos_node_api/eth_syncing.json","openapi/cronos_node_api/eth_getBlockByHash.json","openapi/cronos_node_api/eth_call.json","openapi/cronos_node_api/eth_chainId.json","openapi/cronos_node_api/eth_getBlockTransactionCountByNumber.json","openapi/cronos_node_api/eth_uninstallFilter.json","openapi/cronos_node_api/eth_getCode.json","openapi/cronos_node_api/eth_maxPriorityFeePerGas.json","openapi/cronos_node_api/web3_clientVersion.json","openapi/cronos_node_api/eth_getTransactionByBlockHashAndIndex.json","openapi/cronos_node_api/eth_newFilter.json","openapi/cronos_node_api/eth_getLogs.json","openapi/cronos_node_api/eth_getProof.json","openapi/cronos_node_api/eth_sendRawTransaction.json","openapi/fantom_node_api/eth_getBlockByNumber.json","openapi/fantom_node_api/eth_getTransactionReceipt.json","openapi/fantom_node_api/eth_getStorageAt.json","openapi/fantom_node_api/eth_getTransactionByBlockNumberAndIndex.json","openapi/fantom_node_api/eth_getBlockTransactionCountByHash.json","openapi/fantom_node_api/eth_getBalance.json","openapi/fantom_node_api/net_peerCount.json","openapi/fantom_node_api/eth_gasPrice.json","openapi/fantom_node_api/eth_blockNumber.json","openapi/fantom_node_api/net_listening.json","openapi/fantom_node_api/eth_newBlockFilter.json","openapi/fantom_node_api/eth_getFilterChanges.json","openapi/fantom_node_api/eth_estimateGas.json","openapi/fantom_node_api/eth_getTransactionCount.json","openapi/fantom_node_api/eth_getTransactionByHash.json","openapi/fantom_node_api/eth_newPendingTransactionFilter.json","openapi/fantom_node_api/eth_syncing.json","openapi/fantom_node_api/eth_getBlockByHash.json","openapi/fantom_node_api/eth_call.json","openapi/fantom_node_api/eth_chainId.json","openapi/fantom_node_api/eth_getBlockTransactionCountByNumber.json","openapi/fantom_node_api/eth_uninstallFilter.json","openapi/fantom_node_api/eth_getCode.json","openapi/fantom_node_api/eth_maxPriorityFeePerGas.json","openapi/fantom_node_api/web3_clientVersion.json","openapi/fantom_node_api/eth_getTransactionByBlockHashAndIndex.json","openapi/fantom_node_api/eth_newFilter.json","openapi/fantom_node_api/eth_getLogs.json","openapi/fantom_node_api/eth_getProof.json","openapi/fantom_node_api/eth_sendRawTransaction.json","openapi/bitcoin_node_api/prioritisetransaction.json","openapi/bitcoin_node_api/getblockfilter.json","openapi/bitcoin_node_api/getrawtransaction.json","openapi/bitcoin_node_api/getchaintxstats.json","openapi/bitcoin_node_api/getnetworkhashps.json","openapi/bitcoin_node_api/decodescript.json","openapi/bitcoin_node_api/getnettotals.json","openapi/bitcoin_node_api/getmininginfo.json","openapi/bitcoin_node_api/getnodeaddresses.json","openapi/bitcoin_node_api/verifychain.json","openapi/bitcoin_node_api/getmempooldescendants.json","openapi/bitcoin_node_api/getblockchaininfo.json","openapi/bitcoin_node_api/getblockheader.json","openapi/bitcoin_node_api/decoderawtransaction.json","openapi/bitcoin_node_api/getmempoolentry.json","openapi/bitcoin_node_api/getpeerinfo.json","openapi/bitcoin_node_api/getrpcinfo.json","openapi/bitcoin_node_api/getmempoolancestors.json","openapi/bitcoin_node_api/preciousblock.json","openapi/bitcoin_node_api/validateaddress.json","openapi/bitcoin_node_api/getbestblockhash.json","openapi/bitcoin_node_api/getmempoolinfo.json","openapi/bitcoin_node_api/gettxoutproof.json","openapi/bitcoin_node_api/getmemoryinfo.json","openapi/bitcoin_node_api/getblocktemplate.json","openapi/bitcoin_node_api/getblock.json","openapi/bitcoin_node_api/getblockstats.json","openapi/bitcoin_node_api/gettxout.json","openapi/bitcoin_node_api/getchaintips.json","openapi/bitcoin_node_api/getblockhash.json","openapi/bitcoin_node_api/getdifficulty.json","openapi/bitcoin_node_api/verifytxoutproof.json","openapi/bitcoin_node_api/getconnectioncount.json","openapi/bitcoin_node_api/getrawmempool.json","openapi/bitcoin_node_api/uptime.json","openapi/bitcoin_node_api/getnetworkinfo.json","openapi/bitcoin_node_api/estimatesmartfee.json","openapi/bitcoin_node_api/gettxoutsetinfo.json","openapi/starknet_node_api/starknet_getStorageAt.json","openapi/starknet_node_api/starknet_getTransactionByHash.json","openapi/starknet_node_api/starknet_simulateTransactions.json","openapi/starknet_node_api/starknet_estimateFee.json","openapi/starknet_node_api/starknet_getClassAt.json","openapi/starknet_node_api/starknet_estimateMessageFee.json","openapi/starknet_node_api/starknet_call.json","openapi/starknet_node_api/starknet_traceBlockTransactions.json","openapi/starknet_node_api/starknet_getTransactionByBlockIdAndIndex.json","openapi/starknet_node_api/starknet_getClassHashAt.json","openapi/starknet_node_api/starknet_getNonce.json","openapi/faucet_api/transaction_history.json","openapi/faucet_api/get_tokens.json","openapi/plasma_node_api/accounts_info/eth_getBalance.json","openapi/plasma_node_api/accounts_info/eth_getCode.json","openapi/plasma_node_api/accounts_info/eth_getStorageAt.json","openapi/plasma_node_api/accounts_info/eth_getTransactionCount.json","openapi/plasma_node_api/accounts_info/eth_getProof.json","openapi/plasma_node_api/accounts_info/eth_getAccount.json","openapi/plasma_node_api/blocks_info/eth_blockNumber.json","openapi/plasma_node_api/blocks_info/eth_getBlockByNumber.json","openapi/plasma_node_api/blocks_info/eth_getBlockByHash.json","openapi/plasma_node_api/blocks_info/eth_getBlockTransactionCountByNumber.json","openapi/plasma_node_api/blocks_info/eth_getBlockTransactionCountByHash.json","openapi/plasma_node_api/blocks_info/eth_getBlockReceipts.json","openapi/plasma_node_api/blocks_info/eth_getUncleCountByBlockNumber.json","openapi/plasma_node_api/blocks_info/eth_getUncleCountByBlockHash.json","openapi/plasma_node_api/blocks_info/eth_getUncleByBlockNumberAndIndex.json","openapi/plasma_node_api/blocks_info/eth_getUncleByBlockHashAndIndex.json","openapi/plasma_node_api/blocks_info/eth_getHeaderByNumber.json","openapi/plasma_node_api/blocks_info/eth_getHeaderByHash.json","openapi/plasma_node_api/transaction_info/eth_getTransactionByHash.json","openapi/plasma_node_api/transaction_info/eth_getTransactionReceipt.json","openapi/plasma_node_api/transaction_info/eth_getTransactionByBlockNumberAndIndex.json","openapi/plasma_node_api/transaction_info/eth_getTransactionByBlockHashAndIndex.json","openapi/plasma_node_api/transaction_info/eth_getRawTransactionByHash.json","openapi/plasma_node_api/transaction_info/eth_getRawTransactionByBlockNumberAndIndex.json","openapi/plasma_node_api/transaction_info/eth_getRawTransactionByBlockHashAndIndex.json","openapi/plasma_node_api/transaction_info/eth_getTransactionBySenderAndNonce.json","openapi/plasma_node_api/execute_transactions/eth_call.json","openapi/plasma_node_api/execute_transactions/eth_estimateGas.json","openapi/plasma_node_api/execute_transactions/eth_createAccessList.json","openapi/plasma_node_api/execute_transactions/eth_simulateV1.json","openapi/plasma_node_api/gas_data/eth_gasPrice.json","openapi/plasma_node_api/gas_data/eth_maxPriorityFeePerGas.json","openapi/plasma_node_api/gas_data/eth_feeHistory.json","openapi/plasma_node_api/gas_data/eth_blobBaseFee.json","openapi/plasma_node_api/chain_info/eth_chainId.json","openapi/plasma_node_api/chain_info/eth_syncing.json","openapi/plasma_node_api/chain_info/eth_protocolVersion.json","openapi/plasma_node_api/chain_info/eth_accounts.json","openapi/plasma_node_api/chain_info/eth_hashrate.json","openapi/plasma_node_api/filter_handling/eth_newFilter.json","openapi/plasma_node_api/filter_handling/eth_newBlockFilter.json","openapi/plasma_node_api/filter_handling/eth_newPendingTransactionFilter.json","openapi/plasma_node_api/filter_handling/eth_uninstallFilter.json","openapi/plasma_node_api/logs_and_events/eth_getLogs.json","openapi/plasma_node_api/client_info/web3_clientVersion.json","openapi/plasma_node_api/client_info/web3_sha3.json","openapi/plasma_node_api/client_info/net_version.json","openapi/plasma_node_api/client_info/net_listening.json","openapi/plasma_node_api/client_info/net_peerCount.json","openapi/plasma_node_api/debug_and_trace/debug_getRawHeader.json","openapi/plasma_node_api/debug_and_trace/debug_getRawBlock.json","openapi/plasma_node_api/debug_and_trace/debug_getRawTransaction.json","openapi/plasma_node_api/debug_and_trace/debug_getRawReceipts.json","openapi/plasma_node_api/debug_and_trace/debug_traceCall.json","openapi/plasma_node_api/debug_and_trace/trace_call.json","openapi/plasma_node_api/debug_and_trace/trace_callMany.json","openapi/plasma_node_api/debug_and_trace/trace_replayBlockTransactions.json","openapi/plasma_node_api/debug_and_trace/trace_block.json","openapi/plasma_node_api/debug_and_trace/trace_get.json"]},"appearance":{"default":"light"},"background":{"decoration":"gradient","color":{"dark":"#000020"}},"navbar":{"links":[],"primary":{"type":"button","label":"Start for free","href":"https://console.chainstack.com/user/account/create"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/chainstack","x":"https://x.com/ChainstackHQ","discord":"https://discord.gg/Cymtg2f7pX","telegram":"https://t.me/chainstack","facebook":"https://www.facebook.com/chainstack","youtube":"https://www.youtube.com/c/Chainstack"},"links":[{"header":"Platform","items":[{"label":"Solution","href":"https://chainstack.com/solution"},{"label":"Pricing","href":"https://chainstack.com/pricing"},{"label":"Enterprise","href":"https://chainstack.com/enterprise"},{"label":"Customers","href":"https://chainstack.com/customers"},{"label":"Marketplace","href":"https://chainstack.com/marketplace"},{"label":"Hosting","href":"https://chainstack.com/hosting"},{"label":"Chainstack Cloud","href":"https://chainstack.com/chainstack-cloud"}]},{"header":"Developers","items":[{"label":"Login","href":"https://console.chainstack.com/user/account"},{"label":"Sign up","href":"https://console.chainstack.com/user/account"},{"label":"Faucets","href":"https://chainstack.com/faucets"},{"label":"Labs","href":"https://chainstack.com/labs"},{"label":"Status","href":"https://status.chainstack.com/"}]},{"header":"Company","items":[{"label":"About us","href":"https://chainstack.com/about"},{"label":"Contact us","href":"https://chainstack.com/contact"},{"label":"Careers","href":"https://chainstack.bamboohr.com/jobs"},{"label":"Ambassadors","href":"https://chainstack.com/chainstack-ambassadors-program"},{"label":"Labs","href":"https://chainstack.com/labs"},{"label":"Security","href":"https://chainstack.com/security"},{"label":"SLA","href":"https://chainstack.com/enterprise-support-sla"}]},{"header":"Support","items":[{"label":"Help center","href":"https://support.chainstack.com/hc/en-us"},{"label":"Developer portal","href":"https://docs.chainstack.com/"},{"label":"Terms of service","href":"https://chainstack.com/tos"},{"label":"Privacy policy","href":"https://chainstack.com/privacy"}]}]},"seo":{"metatags":{"og:site_name":"Chainstack Developer Portal"}},"fonts":{"heading":{"family":"Poppins"},"body":{"family":"Inter"}},"styling":{"codeblocks":"system","latex":true},"integrations":{"gtm":{"tagId":"GTM-WMRDXP6"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","grok","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"global":{"anchors":[{"anchor":"MCP","icon":"plug","href":"/docs/chainstack-mcp-server"},{"anchor":"llms-full.txt","icon":"brain","href":"https://docs.chainstack.com/llms-full.txt"},{"anchor":"Status","icon":"signal","href":"https://status.chainstack.com/"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/Cymtg2f7pX"},{"anchor":"Telegram","icon":"telegram","href":"https://t.me/chainstack"},{"anchor":"Blog","icon":"newspaper","href":"https://chainstack.com/blog/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"chainstack","hasAudioNarration":false,"actualSubdomain":"chainstack","customDomains":["docs.chainstack.com"],"gitSource":{"type":"github","owner":"chainstack","repo":"dev-portal","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"edits":true,"thumbs":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af57452033e137dc78ace53","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Cloud","count":2171},{"language":"default","tag":"API","count":1568},{"language":"default","tag":"Node APIs","count":1519},{"language":"default","tag":"Guides","count":392},{"language":"default","tag":"Release notes","count":262},{"language":"default","tag":"Web3 [de]coded","count":230},{"language":"default","tag":"Hyperliquid node API","count":215},{"language":"default","tag":"TRON node API","count":155},{"language":"default","tag":"Protocols","count":113},{"language":"default","tag":"Arc node API","count":87}],"searchSettings":{"maxResults":50}},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat","slug":"/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat","pageMetadata":{"title":"Avalanche: Aave V3 flash loan with Hardhat","description":"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.","href":"/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,CodeGroup,Heading,Icon,Info}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Icon)_missingMdxReference(`Icon`,true);if(!Info)_missingMdxReference(`Info`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`TLDR:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`You’ll configure a Hardhat project to interact with Aave V3 flash loans on Avalanche’s Fuji testnet.`}),`\n`,_jsx(_components.li,{children:`You’ll use Chainstack for your Avalanche node endpoint and deploy a custom FlashLoan contract.`}),`\n`,_jsx(_components.li,{children:`You’ll borrow USDC, then repay it plus fees in a single transaction, demonstrating a flash loan’s instant, collateral-free mechanics.`}),`\n`,_jsx(_components.li,{children:`By the end, you’ll have a working Aave flash loan flow on a testnet environment ready for deeper custom logic.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`flash-loans`,children:`Flash loans`}),`\n`,_jsx(_components.p,{children:`A flash loan is a type of loan that can be obtained instantly and without any collateral, unlike traditional loans that require time-consuming application processes and collateral such as property or assets. This type of loan is available through Aave, a decentralized lending platform, where borrowers can borrow any amount they need and repay it within a single transaction. The loan is secured by the borrower’s smart contract and is only valid for the duration of that transaction. If the borrower cannot repay the loan and the associated fees within the same transaction, the loan is automatically canceled, and the transaction is reverted. Flash loans are often used in the context of cryptocurrency trading and arbitrage, as they enable traders to obtain funds quickly and cheaply to take advantage of market opportunities.`}),`\n`,_jsxs(_components.p,{children:[`For detailed documentation, see Aave Developers: `,_jsx(_components.a,{href:`https://docs.aave.com/developers/guides/flash-loans`,children:`Flash Loans`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The objective of this tutorial is to make you familiar with the Avalanche C-Chain, the `,_jsx(_components.a,{href:`/docs/avalanche-tooling#hardhat`,children:`Hardhat framework`}),`, and the `,_jsx(_components.a,{href:`https://docs.aave.com/faq/flash-loans`,children:`Aave flash loans`}),`.`]}),`\n`,_jsx(_components.p,{children:`Specifically, in this tutorial, you will:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Deploy an Avalanche node on the Fuji testnet.`}),`\n`,_jsx(_components.li,{children:`Create a flash loan project using Hardhat.`}),`\n`,_jsx(_components.li,{children:`Run a flash loan on the Fuji testnet through an Avalanche node deployed with Chainstack.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://console.chainstack.com/`,children:`Chainstack account`}),` to deploy a `,_jsx(_components.a,{href:`https://chainstack.com/build-better-with-avalanche/`,children:`reliable Avalanche RPC endpoint`}),` on Chainstack’s `,_jsx(_components.a,{href:`https://chainstack.com/protocols/`,children:`Avalanche node infrastructure`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://nodejs.org/en/`,children:`Node.js`}),` as the JavaScript framework.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://hardhat.org/hardhat-runner/docs/getting-started#overview`,children:`Hardhat`}),` to create, deploy, and interact with contracts.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`dependencies`,children:`Dependencies`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Hardhat: ^2.12.7`}),`\n`,_jsx(_components.li,{children:`@aave/core-v3: ^1.17.2`}),`\n`,_jsx(_components.li,{children:`dotenv: ^16.0.3`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`This tutorial shows you how to request a flash loan on the Fuji testnet to borrow USDC. To get from zero to an executed Aave V3 flash loan on the Avalanche Fuji C-Chain testnet, do the following:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`With Chainstack, create a public chain project.`}),`\n`,_jsx(_components.li,{children:`With Chainstack, join the Avalanche Fuji testnet.`}),`\n`,_jsx(_components.li,{children:`With Chainstack, access your Avalanche node endpoint.`}),`\n`,_jsx(_components.li,{children:`With Hardhat, create and set up an Aave flash loan project.`}),`\n`,_jsx(_components.li,{children:`With Hardhat, execute the flash loan through your Avalanche node.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-by-step`,children:`Step-by-step`}),`\n`,_jsx(Heading,{level:`3`,id:`create-a-public-chain-project`,children:`Create a public chain project`}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/docs/manage-your-project#create-a-project`,children:`Create a project`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`join-the-avalanche-fuji-testnet`,children:`Join the Avalanche Fuji testnet`}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/docs/manage-your-networks`,children:`Join a public network`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`get-your-avalanche-node-endpoint`,children:`Get your Avalanche node endpoint`}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/docs/manage-your-node#view-node-access-and-credentials`,children:`View node access and credentials`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`fund-your-wallet`,children:`Fund your wallet`}),`\n`,_jsx(_components.p,{children:`Before diving into the flash loan project, make sure to top up your wallet with testnet AVAX and USDC tokens. Use the following faucets:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://app.aave.com/faucet/`,children:`Aave faucet`}),` for USDC. Make sure you are on the Avalanche Market.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://faucet.avax.network/`,children:`Fuji faucet`}),` for AVAX.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`install-hardhat`,children:`Install HardHat`}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`https://hardhat.org/hardhat-runner/docs/getting-started#installation`,children:`Installing Hardhat`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`create-a-hardhat-project`,children:`Create a Hardhat project`}),`\n`,_jsx(_components.p,{children:`Create a new directory for your project, then run the following from a terminal:`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Shell`,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hardhat`})]}),`\n`]})})})}),`\n`,_jsxs(_components.p,{children:[`This will launch the Hardhat CLI, which will prompt you to choose a starter project. For this project, answer `,_jsx(_components.strong,{children:`yes`}),` to the following:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Create a JavaScript project`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Do you want to install this sample project’s dependencies with npm (hardhat @nomicfoundation/hardhat-toolbox)?`})}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`install-the-required-dependencies`,children:`Install the required dependencies`}),`\n`,_jsxs(_components.p,{children:[`This project uses the `,_jsx(_components.a,{href:`https://github.com/aave/aave-v3-core`,children:`aave/core-v3`}),` package for the smart contracts and the `,_jsx(_components.a,{href:`https://github.com/motdotla/dotenv`,children:`dotenv`}),` package to safely use environment variables.`]}),`\n`,_jsx(_components.p,{children:`Run the following command in your root directory to install:`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Shell`,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @aave/core-v3`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dotenv`})]}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`create-a-env-file`,children:`Create a .env file`}),`\n`,_jsxs(_components.p,{children:[`In your project’s root directory, create a new file and name it `,_jsx(_components.code,{children:`.env`}),`. Here is where you will set up the environment variables for your Chainststack Avalanche Fuji endpoint and your wallet’s private key.`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`.env`,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`PRIVATE_KEY=\"YOUR_WALLET_PRIVATE_KEY\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`FUJI_CHAINSTACK=\"YOUR_CHAINSTACK_ENDPOINT\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),`\n`,_jsx(_components.p,{children:`Save it after you added your information.`}),`\n`,_jsx(Heading,{level:`3`,id:`edit-the-hardhat-configuration-file`,children:`Edit the Hardhat configuration file`}),`\n`,_jsxs(_components.p,{children:[`You will find a file named `,_jsx(_components.code,{children:`hardhat.config.js`}),` in the root directory. This file is used to configure various settings for your Hardhat projects, such as the network you want to deploy your contracts on, the compilers you want to use, and the plugins you want to enable.`]}),`\n`,_jsx(_components.p,{children:`Delete the default code in the file and replace it with the following:`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`hardhat.config.js`,numberOfLines:`13`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`require`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"@nomicfoundation/hardhat-toolbox\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`require`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dotenv\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`/** `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`@type`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` import('hardhat/config').HardhatUserConfig */`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`module`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`exports`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` solidity:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"0.8.10\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` networks:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` fuji:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` url:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`FUJI_CHAINSTACK`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` accounts:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PRIVATE_KEY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`]})})})}),`\n`,_jsx(_components.p,{children:`Let’s break down what each part of the file does:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`require(\"@nomicfoundation/hardhat-toolbox\");`}),` imports the Hardhat Toolbox plugin, which provides several useful tools and utilities for Hardhat projects.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`require(\"dotenv\").config();`}),` loads environment variables from a `,_jsx(_components.code,{children:`.env`}),` file using the `,_jsx(_components.code,{children:`dotenv`}),` package.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`module.exports = { ... }`}),` exports a JavaScript object containing the configuration for the Hardhat project.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`solidity: \"0.8.10\",`}),` sets the Solidity compiler version to 0.8.10.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`networks: { ... }`}),` defines the network configurations for the Hardhat project. In this case, it defines a network called `,_jsx(_components.code,{children:`fuji`}),` that connects to the Avalanche Fuji blockchain network.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`fuji: { ... }`}),` defines the configuration for the `,_jsx(_components.code,{children:`fuji`}),` network.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`url: process.env.FUJI_CHAINSTACK,`}),` sets the URL for the Fuji network using the `,_jsx(_components.code,{children:`FUJI_CHAINSTACK`}),` environment variable.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`accounts: [process.env.PRIVATE_KEY],`}),` sets the accounts for the `,_jsx(_components.code,{children:`fuji`}),` network using the `,_jsx(_components.code,{children:`PRIVATE_KEY`}),` environment variable. This will allow the Hardhat project to deploy contracts and interact with the Fuji network using the specified private key.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`create-the-flash-loan-smart-contract`,children:`Create the flash loan smart contract`}),`\n`,_jsxs(_components.p,{children:[`In the root directory, you will find a directory named `,_jsx(_components.code,{children:`contracts`}),` with a sample contract in it. Rename this contract to `,_jsx(_components.code,{children:`FlashLoan.sol`}),` and replace its code with the following:`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`FlashLoan.sol`,numberOfLines:`118`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`118`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`// SPDX-License-Identifier: MIT`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`pragma solidity ^0.8.10;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import {FlashLoanSimpleReceiverBase} from \"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import {IPoolAddressesProvider} from \"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`import {IERC20} from \"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @title FlashLoan`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev A contract that demonstrates how to use Aave's flash loans. This contract can borrow any token from the Aave lending pool, perform custom logic with the borrowed funds, and repay the loan plus interest in a single transaction.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`contract FlashLoan is FlashLoanSimpleReceiverBase {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` address payable public owner; // The owner of this contract, who can withdraw funds.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev Constructor function that sets the address provider for the Aave lending pool and the contract owner.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param _addressProvider The address provider for the Aave lending pool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` constructor(address _addressProvider)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` FlashLoanSimpleReceiverBase(IPoolAddressesProvider(_addressProvider))`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` owner = payable(msg.sender); // Set the contract owner to the creator of this contract.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev This function is called after this contract receives a flash loan. It executes custom logic with the borrowed funds and repays the loan plus interest to the Aave lending pool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param asset The token being borrowed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param amount The amount of the token being borrowed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param premium The fee paid to the Aave lending pool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param initiator The address that initiated the flash loan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param params Additional parameters for the flash loan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @return true to indicate that the flash loan has been repaid.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` function executeOperation(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` address asset,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` uint256 amount,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` uint256 premium,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` address initiator,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` bytes calldata params`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ) external override returns (bool) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // This function is called by the Aave lending pool contract after this contract receives the flash loan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // The asset parameter represents the token being borrowed, amount is the amount borrowed, and premium is the fee paid to the pool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // 👇 Your custom logic for the flash loan should be implemented here 👇`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /** YOUR CUSTOM LOGIC HERE */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // 👆 Your custom logic for the flash loan should be implemented above here 👆`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Approve the lending pool contract to pull funds from this contract to pay back the flash loan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` uint256 amountOwed = amount + premium;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` IERC20(asset).approve(address(POOL), amountOwed);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` return true; // Return true to indicate that the flash loan has been repaid.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev Function to request a flash loan for a specified token and amount.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * receiverAddress The address of this contract, which will receive the flash loan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param _token The token to be borrowed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param _amount The amount of the token to be borrowed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * params No additional parameters are needed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * referralCode No referral code is used.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` function requestFlashLoan(address _token, uint256 _amount) public onlyOwner {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` address receiverAddress = address(this);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` address asset = _token;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` uint256 amount = _amount;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` bytes memory params = \"\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` uint16 referralCode = 0;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` // Call the Aave lending pool contract to initiate the flash loan.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` POOL.flashLoanSimple(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` receiverAddress,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` asset,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` amount,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` params,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` referralCode`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` );`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev Get the balance of a specific token in this contract.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param _tokenAddress The address of the token to check the balance of.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @return The balance of the specified token in this contract.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` function getBalance(address _tokenAddress) external view returns (uint256) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` return IERC20(_tokenAddress).balanceOf(address(this));`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev Withdraw a specific token from this contract to the contract owner's address.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @param _tokenAddress The address of the token to withdraw.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` function withdraw(address _tokenAddress) external onlyOwner {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` IERC20 token = IERC20(_tokenAddress); // Create an instance of the token contract.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` token.transfer(msg.sender, token.balanceOf(address(this))); // Transfer the token balance to the contract owner.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev Modifier to ensure that only the contract owner can call a specific function.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` modifier onlyOwner() {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` require(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` msg.sender == owner,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"You are not the owner!\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` );`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` _;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` /**`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` * @dev Fallback function to receive ETH payments.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` receive() external payable {}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),`\n`,_jsxs(Info,{children:[_jsx(Heading,{level:`3`,id:`default-flash-loan-logic`,children:`Default flash loan logic`}),_jsx(_components.p,{children:`This smart contract receives the flash loan but performs no further actions on it. You will need to add your own logic.`})]}),`\n`,_jsxs(_components.p,{children:[`This smart contract is heavily commented on to explain its inner workings, but you can find more details on the `,_jsx(_components.a,{href:`https://docs.aave.com/developers/guides/flash-loans`,children:`Aave docs`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`create-the-deploying-and-interacting-script`,children:`Create the deploying and interacting script`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.code,{children:`scripts`}),` directory inside the root of your project, you will find a file named `,_jsx(_components.code,{children:`deploy.js`}),`. Replace its content with the following:`]}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`deploy.js`,numberOfLines:`63`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`63`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`ethers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` require`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"hardhat\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Contract addresses and other values`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` AVA_FUJI_POOL_PROVIDER`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"0x220c6A7D868FC38ECB47d5E69b99e9906300286A\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` USDC_ADDRESS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"0x6a17716Ce178e84835cfA73AbdB71cb455032456\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` USDC_DECIMALS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 6`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` FLASHLOAN_AMOUNT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ethers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`utils`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`parseUnits`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1000\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_DECIMALS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// USDC tranfer function ABI`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` USDC_ABI`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"function transfer(address to, uint256 value) external returns (bool)\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` try`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Deploying FlashLoan contract...\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ethers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getContractFactory`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"FlashLoan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` flashLoan`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`deploy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`AVA_FUJI_POOL_PROVIDER`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` flashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`deployed`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`FlashLoan contract deployed at: \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`flashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`address`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`View contract at: https://testnet.snowtrace.io/address/\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`flashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`address`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"---------------------------------------------------------------`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Transfer USDC to the FlashLoan contract`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` erc20`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ethers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Contract`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_ADDRESS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_ABI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ethers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getSigner`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` amount`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ethers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`utils`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`parseUnits`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_DECIMALS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`Transferring \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`amount`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1e6`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" USDC to the FlashLoan contract...`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` transferErc20`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` erc20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`transfer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`flashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`address`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`amount`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`Transferred \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`amount`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1e6`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" USDC tokens to the FlashLoan contract`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Waiting for 1 block to verify the transfer...\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` transferErc20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`wait`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Wait 1 block for the transaction to be verified to update the balance`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`---------------------------------------------------------------\"}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Check USDC balance of the FlashLoan contract`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` usdcBalance`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` flashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getBalance`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_ADDRESS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`USDC balance of the FlashLoan contract is: \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`usdcBalance`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1e6`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" USDC`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"---------------------------------------------------------------`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Call flash loan`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`Requesting a flash loan of \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`FLASHLOAN_AMOUNT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1e6`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" USDC...`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` flashloanTx`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` flashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`requestFlashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_ADDRESS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`FLASHLOAN_AMOUNT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Flash loan executed!\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`View transaction at: https://testnet.snowtrace.io/tx/\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`flashloanTx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hash`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` flashloanTx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`wait`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Wait 1 block for the transaction to be verified to update the balance`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"---------------------------------------------------------------`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Withdraw remaining USDC`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` remainingUSDC`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` flashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getBalance`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_ADDRESS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`Withdrawing \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`remainingUSDC`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1e6`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" USDC from the FlashLoan contract...`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` withdrawFunds`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` flashLoan`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`withdraw`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`USDC_ADDRESS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` withdrawFunds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`wait`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Wait 1 block for the transaction to be verified`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`Funds sent!`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`View transaction at: https://testnet.snowtrace.io/tx/\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`withdrawFunds`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hash`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`catch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`exitCode`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`]})})})}),`\n`,_jsxs(_components.p,{children:[`This code is a script that deploys a `,_jsx(_components.code,{children:`FlashLoan`}),` smart contract and uses it to request a flash loan of 1,000 USDC tokens.`]}),`\n`,_jsxs(_components.p,{children:[`The script first sets some constants, including the addresses of the Aave pool provider and the USDC token on the Fuji testnet. Verify that the addresses are up to date on the `,_jsx(_components.a,{href:`https://docs.aave.com/developers/deployed-contracts/v3-testnet-addresses#contract-name-changes-from-v2-greater-than-v3`,children:`Aave docs`}),` by finding the addresses for `,_jsx(_components.code,{children:`PoolAddressesProvider-Avalanche`}),`and `,_jsx(_components.code,{children:`USDC-TestnetMintableERC20-Avalanche`}),`. The amount of USDC to be borrowed is also declared here.`]}),`\n`,_jsxs(_components.p,{children:[`It then deploys the `,_jsx(_components.code,{children:`FlashLoan`}),` contract and transfers 5 USDC tokens to the contract from the deployer’s account. To request flash loans, the smart contract must hold some of the tokens that you are planning to borrow; these tokens are used to repay the fee. On the V3 version, the fee is a fixed percentage, and you can find the updated fee value on the `,_jsx(_components.a,{href:`https://docs.aave.com/developers/guides/flash-loans#flash-loan-fee`,children:`Aave docs`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Next, the script checks the USDC balance of the `,_jsx(_components.code,{children:`FlashLoan`}),` contract, this is only for displaying it to the user, but you can easily implement some logic to stop the process if the funds to repay the borrowing fee are too low. It then requests a flash loan of 1,000 USDC tokens. Once the loan is executed, the remaining USDC tokens in the contract are withdrawn. The `,_jsx(_components.a,{href:`https://docs.aave.com/developers/guides/flash-loans#2.-calling-flashloan-or-flashloansimple`,children:`Aave documentation`}),` recommends not leaving any funds in the smart contract to avoid possible misuse by an attacker.`]}),`\n`,_jsxs(_components.p,{children:[`The script uses the Hardhat development framework and the `,_jsx(_components.code,{children:`ethers.js`}),` library to interact with the blockchain network and the `,_jsx(_components.code,{children:`FlashLoan`}),` contract. It also prints out messages to the console at various points in the script’s execution to provide information about the progress of the `,_jsx(_components.code,{children:`FlashLoan`}),` operation.`]}),`\n`,_jsx(Heading,{level:`3`,id:`run-the-flash-loan`,children:`Run the flash loan`}),`\n`,_jsx(_components.p,{children:`To run the flash loan on the Fuji network, execute the following command in the console from your root directory:`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Shell`,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hardhat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --network`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` fuji`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` scripts/deploy.js`})]}),`\n`]})})})}),`\n`,_jsx(_components.p,{children:`This command will compile the smart contracts, deploy the FlashLoan contract and execute the operation`}),`\n`,_jsx(_components.p,{children:`The result in the console will look like the following:`}),`\n`,_jsx(CodeGroup,{children:_jsx(CodeBlock,{filename:`Shell`,numberOfLines:`21`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`21`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Deploying`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract...`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`FlashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` deployed`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` at:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0x77609a96E67455EcbBb3d8AD38567511dc587C54`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`View`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` at:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://testnet.snowtrace.io/address/0x77609a96E67455EcbBb3d8AD38567511dc587C54`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`---------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Transferring`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` USDC`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract...`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Transferred`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` USDC`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tokens`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Waiting`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` for`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` block`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` verify`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` transfer...`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`---------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`USDC`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` balance`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` of`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` is:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` USDC`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`---------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Requesting`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` flash`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` loan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` of`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1000`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` USDC...`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Flash`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` loan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` executed!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`View`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` transaction`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` at:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://testnet.snowtrace.io/tx/0xdcc41e8eec65f798aae643b99036f595137090fa777a729ce15c1a0397b247fa`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`---------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Withdrawing`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 4.5`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` USDC`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` the`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` FlashLoan`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` contract...`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Funds`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sent!`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`View`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` transaction`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` at:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://testnet.snowtrace.io/tx/0x759fbd6c513e59f48001566b86d1358c329519f6e6096ffb1748ab3ff0b6f97c`})]}),`\n`]})})})}),`\n`,_jsxs(Info,{children:[_jsx(Heading,{level:`3`,id:`possible-compiler-warnings`,children:`Possible compiler warnings`}),_jsxs(_components.p,{children:[`Note that you might receive two warnings from the Solidity compiler about two `,_jsx(_components.code,{children:`Unused function parameter`}),`. You can ignore the warnings as they do not stop the compiler or the execution of the flash loan. This is happening because the function is being overridden and the parameters are needed to keep the same function’s signature.`]})]}),`\n`,_jsx(_components.p,{children:`You can see how a completed deployment and flash loan looks like on the Fuji explorer by checking the following transactions:`}),`\n`,_jsxs(CardGroup,{children:[_jsx(Card,{title:`Deployed FlashLoan contract`,href:`https://testnet.snowtrace.io/address/0x77609a96E67455EcbBb3d8AD38567511dc587C54`,icon:`angle-right`,horizontal:true}),_jsx(Card,{title:`Execute flash loan`,href:`https://testnet.snowtrace.io/tx/0xdcc41e8eec65f798aae643b99036f595137090fa777a729ce15c1a0397b247fa`,icon:`angle-right`,horizontal:true}),_jsx(Card,{title:`Withdraw funds`,href:`https://testnet.snowtrace.io/tx/0x759fbd6c513e59f48001566b86d1358c329519f6e6096ffb1748ab3ff0b6f97c`,icon:`angle-right`,horizontal:true})]}),`\n`,_jsx(Heading,{level:`2`,id:`conclusion`,children:`Conclusion`}),`\n`,_jsx(_components.p,{children:`This tutorial guided you through setting up Hardhat to work with Chainstack nodes and creating a project to run your own flash loan transaction on the Avalanche network.`}),`\n`,_jsx(_components.p,{children:`This tutorial uses a testnet; however, the exact same instructions and sequence will work on the mainnet as well.`}),`\n`,_jsx(Heading,{level:`3`,id:`about-the-author`,children:`About the author`}),`\n`,_jsx(CardGroup,{children:_jsxs(Card,{title:`Ake`,children:[_jsx(`img`,{src:`https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=792a24ab1b4682406fa589c0ecd88e5d`,alt:`Ake`,style:{width:`80px`,height:`80px`,borderRadius:`50%`,objectFit:`cover`,display:`block`,margin:`0 auto`},noZoom:true,\"data-og-width\":`400`,width:`400`,\"data-og-height\":`400`,height:`400`,\"data-path\":`images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=796f4bd80a6649348dd9d3f8e2632a91 280w, https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=b952d5110b2ce65f240256fffd665dfc 560w, https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=5cb20cbb33e700259c5bdf4c979760bd 840w, https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=051ac247435ba6b1ecef059cd1bf611d 1100w, https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=65bc12c7d5b593fe45d94e05420a7c87 1650w, https://mintcdn.com/chainstack/UN3rP7zhB69idvnC/images/docs/profile_images/1719912994363326464/8_Bi4fdM_400x400.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=UN3rP7zhB69idvnC\u0026q=85\u0026s=a79114199a7b444ef0c63c983cb9ef73 2500w`}),_jsxs(_components.p,{children:[_jsx(Icon,{icon:`code`,iconType:`solid`}),` Director of Developer Experience @ Chainstack\n`,_jsx(`br`,{}),_jsx(Icon,{icon:`screwdriver-wrench`,iconType:`solid`}),` Talk to me all things Web3\n`,_jsx(`br`,{}),`20 years in technology | 8+ years in Web3 full time years experience`]}),_jsxs(`div`,{style:{display:`flex`,justifyContent:`center`,gap:`12px`},children:[_jsx(`a`,{href:`https://github.com/akegaviar/`,style:{textDecoration:`none`,borderBottom:`none`},children:_jsx(Icon,{icon:`github`,iconType:`brands`})}),_jsx(`a`,{href:`https://twitter.com/akegaviar`,style:{textDecoration:`none`,borderBottom:`none`},children:_jsx(Icon,{icon:`twitter`,iconType:`brands`})}),_jsx(`a`,{href:`https://www.linkedin.com/in/ake/`,style:{textDecoration:`none`,borderBottom:`none`},children:_jsx(Icon,{icon:`linkedin`,iconType:`brands`})})]})]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Avalanche: Aave V3 flash loan with Hardhat","description":"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.","href":"/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Flash loans","slug":"flash-loans","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Dependencies","slug":"dependencies","depth":2,"children":[]},{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Step-by-step","slug":"step-by-step","depth":2,"children":[{"title":"Create a public chain project","slug":"create-a-public-chain-project","depth":3,"children":[]},{"title":"Join the Avalanche Fuji testnet","slug":"join-the-avalanche-fuji-testnet","depth":3,"children":[]},{"title":"Get your Avalanche node endpoint","slug":"get-your-avalanche-node-endpoint","depth":3,"children":[]},{"title":"Fund your wallet","slug":"fund-your-wallet","depth":3,"children":[]},{"title":"Install HardHat","slug":"install-hardhat","depth":3,"children":[]},{"title":"Create a Hardhat project","slug":"create-a-hardhat-project","depth":3,"children":[]},{"title":"Install the required dependencies","slug":"install-the-required-dependencies","depth":3,"children":[]},{"title":"Create a .env file","slug":"create-a-env-file","depth":3,"children":[]},{"title":"Edit the Hardhat configuration file","slug":"edit-the-hardhat-configuration-file","depth":3,"children":[]},{"title":"Create the flash loan smart contract","slug":"create-the-flash-loan-smart-contract","depth":3,"children":[]},{"title":"Default flash loan logic","slug":"default-flash-loan-logic","depth":3,"children":[]},{"title":"Create the deploying and interacting script","slug":"create-the-deploying-and-interacting-script","depth":3,"children":[]},{"title":"Run the flash loan","slug":"run-the-flash-loan","depth":3,"children":[]},{"title":"Possible compiler warnings","slug":"possible-compiler-warnings","depth":3,"children":[]}]},{"title":"Conclusion","slug":"conclusion","depth":2,"children":[{"title":"About the author","slug":"about-the-author","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"chainstack","siteName":"Chainstack","title":"Avalanche: Aave V3 flash loan with Hardhat - Chainstack","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-20T11:52:02.078Z","gitLastModified":"2026-04-20T11:47:46.000Z","originalFileLocation":"docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Chainstack\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Avalanche: Aave V3 flash loan with Hardhat - Chainstack\">\u003cmeta data-mint-head property=\"og:description\" content=\"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Chainstack Developer Portal\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://chainstack.mintlify.site/_mintlify/api/og/v2?division=Protocols\u0026amp;title=Avalanche%3A+Aave+V3+flash+loan+with+Hardhat\u0026amp;description=Execute+Aave+V3+flash+loans+on+Avalanche+C-Chain+using+Hardhat+and+a+Chainstack+RPC+node+for+zero-collateral+borrowing+and+DeFi+arbitrage+testing.\u0026amp;theme=61e52c2357356b8b944e857c\u0026amp;signature=dc1b0136cf6ffd45b8e5663f8d439c985c27d35bc7ced29b1fc1e6e7e6b34158\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Avalanche: Aave V3 flash loan with Hardhat - Chainstack\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://chainstack.mintlify.site/_mintlify/api/og/v2?division=Protocols\u0026amp;title=Avalanche%3A+Aave+V3+flash+loan+with+Hardhat\u0026amp;description=Execute+Aave+V3+flash+loans+on+Avalanche+C-Chain+using+Hardhat+and+a+Chainstack+RPC+node+for+zero-collateral+borrowing+and+DeFi+arbitrage+testing.\u0026amp;theme=61e52c2357356b8b944e857c\u0026amp;signature=dc1b0136cf6ffd45b8e5663f8d439c985c27d35bc7ced29b1fc1e6e7e6b34158\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/chainstack/jo9dYY4MCWk3fHQO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Chainstack\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#007aff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.chainstack.com/#organization\",\"name\":\"Chainstack\",\"url\":\"https://docs.chainstack.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/chainstack/4kCLdVG8vhROt3j-/logo/light.svg?fit=max\u0026auto=format\u0026n=4kCLdVG8vhROt3j-\u0026q=85\u0026s=7d2d6d754203b9b3aa553e71ac4d9991\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.chainstack.com#website\",\"name\":\"Chainstack\",\"url\":\"https://docs.chainstack.com\",\"publisher\":{\"@id\":\"https://docs.chainstack.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat#webpage\",\"url\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat\",\"name\":\"Avalanche: Aave V3 flash loan with Hardhat\",\"description\":\"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.\",\"dateModified\":\"2026-04-20T11:47:46.000Z\",\"isPartOf\":{\"@id\":\"https://docs.chainstack.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Web3 [de]coded\",\"item\":\"https://docs.chainstack.com/docs/web3-decoded-introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Protocols\",\"item\":\"https://docs.chainstack.com/docs/protocols-tutorials\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Avalanche: Aave V3 flash loan with Hardhat\",\"item\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat#article\",\"headline\":\"Avalanche: Aave V3 flash loan with Hardhat\",\"name\":\"Avalanche: Aave V3 flash loan with Hardhat\",\"description\":\"Execute Aave V3 flash loans on Avalanche C-Chain using Hardhat and a Chainstack RPC node for zero-collateral borrowing and DeFi arbitrage testing.\",\"url\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat\",\"mainEntityOfPage\":{\"@id\":\"https://docs.chainstack.com/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat#webpage\"},\"dateModified\":\"2026-04-20T11:47:46.000Z\",\"publisher\":{\"@id\":\"https://docs.chainstack.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.chainstack.com#website\"}}]}\u003c/script>","agentPointerHref":"/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat.md","siteName":"Chainstack","nav":{"global":{"anchors":[{"anchor":"MCP","icon":"plug","href":"/docs/chainstack-mcp-server"},{"anchor":"llms-full.txt","icon":"brain","href":"https://docs.chainstack.com/llms-full.txt"},{"anchor":"Status","icon":"signal","href":"https://status.chainstack.com/"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/Cymtg2f7pX"},{"anchor":"Telegram","icon":"telegram","href":"https://t.me/chainstack"},{"anchor":"Blog","icon":"newspaper","href":"https://chainstack.com/blog/"}]},"products":[{"product":"Cloud","icon":"cloud","description":"Managed blockchain infrastructure","tabs":[{"tab":"Guides","groups":[{"group":"Platform","pages":[{"title":"Chainstack platform overview: nodes, APIs, and billing","href":"/docs/platform-introduction"},{"title":"Manage your account","href":"/docs/manage-your-account"},{"title":"Manage your organization","href":"/docs/manage-your-organization"},{"title":"Manage your billing","href":"/docs/manage-your-billing"},{"title":"Billing thresholds","href":"/docs/billing-thresholds"},{"title":"Manage your projects","href":"/docs/manage-your-project"},{"title":"Manage your networks","href":"/docs/manage-your-networks"},{"title":"Manage your nodes","href":"/docs/manage-your-node"},{"title":"Use Multichain API","href":"/docs/multichain-api"},{"title":"Statistics","href":"/docs/see-statistics"},{"title":"Node usage","href":"/docs/node-usage"},{"title":"Faucet","href":"/docs/faucets"},{"title":"RSS feeds","href":"/docs/rss-feeds"}]},{"group":"Pricing","pages":[{"title":"Chainstack pricing: plans, request units, and quotas","href":"/docs/pricing-introduction"},{"title":"Request units (RUs)","href":"/docs/request-units"},{"title":"Features availability","href":"/docs/features-availability-across-subscription-plans"},{"title":"Throughput guidelines","href":"/docs/limits"},{"title":"Requests per second (RPS) plan limits","href":"/docs/rps-plan-limits"},{"title":"Quotas","href":"/docs/quotas"}]},{"group":"Core","pages":[{"title":"Global Node","href":"/docs/global-elastic-node"},{"title":"Unlimited Node","href":"/docs/unlimited-node"},{"title":"Trader Node","href":"/docs/trader-node"},{"title":"Migrate from Trader Nodes","href":"/docs/migrate-from-trader-nodes"},{"title":"Dedicated Node","href":"/docs/dedicated-node"},{"title":"Dedicated Node monitoring","href":"/docs/dedicated-node-monitoring"},{"title":"Hybrid hosting","href":"/docs/hybrid-hosting"}]},{"group":"Add-ons","pages":[{"title":"Chainstack add-ons: marketplace extensions for RPC nodes","href":"/docs/add-ons"},{"title":"MEV protection","href":"/docs/mev-protection"},{"title":"Optimized submission","href":"/docs/optimized-submission"},{"title":"Yellowstone gRPC Geyser plugin","href":"/docs/yellowstone-grpc-geyser-plugin"},{"title":"Unlimited Node add-on","href":"/docs/unlimited-node-add-on"}]},{"group":"Security","pages":[{"title":"Access rules","href":"/docs/access-rules"},{"title":"Authentication methods available on Chainstack","href":"/docs/authentication-methods-for-different-scenarios"}]},{"group":"Migrate to Chainstack","pages":[{"title":"Migrate to Chainstack with AI","sidebarTitle":"Migrate with AI","href":"/docs/migrate-to-chainstack-with-ai"},{"title":"Migrating from Google Cloud Blockchain Node Engine to Chainstack","sidebarTitle":"Google Blockchain Node Engine","href":"/docs/migrating-from-google-cloud-blockchain-node-engine-to-chainstack"},{"title":"Migrating from Syndica to Chainstack","sidebarTitle":"Syndica","href":"/docs/migrating-from-syndica-to-chainstack"},{"title":"Migrating from Grove to Chainstack","sidebarTitle":"Grove","href":"/docs/migrating-from-grove-to-chainstack"},{"title":"Migrate from Helius getTokenAccounts to Solana RPC","sidebarTitle":"Helius getTokenAccounts","href":"/docs/migrating-from-helius-gettokenaccounts-to-standard-solana-rpc-methods"}]},{"group":"Web3 [de]coded","pages":[{"title":"Web3 [De]Coded: tutorials, guides, and best practices","href":"/docs/web3-decoded-introduction"},{"group":"Protocols","pages":[{"title":"Protocols","sidebarTitle":"Overview","href":"/docs/protocols-tutorials"},{"title":"Ethereum: How to analyze pending blocks","href":"/docs/ethereum-how-to-analyze-pending-blocks"},{"title":"Simulate a Uniswap swap before broadcasting","href":"/docs/ethereum-simulate-a-uniswap-swap"},{"title":"Monitor an Ethereum address for incoming transactions in real time","href":"/docs/ethereum-monitor-address-transactions"},{"title":"Monitor Uniswap swaps in real time over WebSocket","href":"/docs/ethereum-monitor-uniswap-swaps-websocket"},{"title":"Blob transactions the hard way","href":"/docs/blob-transactions-the-hard-way"},{"title":"Ethereum Dencun: Rundown with examples","href":"/docs/ethereum-dencun-rundown-with-examples"},{"title":"EIP-7702: delegate an EOA and batch transactions","href":"/docs/ethereum-eip-7702-tutorial"},{"title":"Ethereum: fast confirmation and the safe block tag","href":"/docs/ethereum-fast-confirmation"},{"title":"Ethereum: Academic certificates with Truffle","href":"/docs/ethereum-tutorial-academic-certificates-with-truffle"},{"title":"Ethereum: Asset tokenization with Embark","href":"/docs/ethereum-tutorial-asset-tokenization-with-embark"},{"title":"Ethereum: Trust fund account with Remix","href":"/docs/ethereum-tutorial-trust-fund-account-with-remix"},{"title":"Chainlink: Estimating the price of a call","href":"/docs/chainlink-estimating-the-price-of-a-call"},{"title":"Polygon: Bridging ERC-20 from Ethereum to Polygon","href":"/docs/polygon-tutorial-bridging-erc20-from-ethereum-to-polygon"},{"title":"Polygon: Creating a Polymarket trading OpenClaw skill","href":"/docs/polygon-creating-a-polymarket-trading-openclaw-skill"},{"title":"BNB Smart Chain: BEP-1155 with Truffle \u0026 OpenZeppelin","href":"/docs/bsc-tutorial-bep-1155-contract-with-truffle-and-openzeppelin"},{"title":"BNB Smart Chain: Lorentz hardfork","href":"/docs/bnb-lorentz-hardfork"},{"title":"BNB Smart Chain: Jenner hardfork","href":"/docs/bnb-jenner-hardfork"},{"title":"Base: Deploy an ERC-721 contract with Hardhat","href":"/docs/base-tutorial-deploy-an-erc-721-contract-with-hardhat"},{"title":"Base B20 token standard","href":"/docs/base-b20-token-standard"},{"title":"Base: Deploy a B20 token","href":"/docs/base-tutorial-deploy-a-b20-token"},{"title":"Base: Accept B20 payments","href":"/docs/base-accept-b20-payments"},{"title":"eth_getStorageAt vs debug_storageRangeAt on Reth","description":"Work around the unsupported debug_storageRangeAt method in Reth by using eth_getStorageAt with known storage slot positions for contract state access.","href":"/docs/using-eth_getstorageat-instead-of-debug_storagerangeat-on-reth"},{"title":"Avalanche: Aave V3 flash loan with Hardhat","href":"/docs/avalanche-tutorial-aavev3-flash-loans-with-hardhat"},{"title":"Avalanche Granite network upgrade","description":"Understand the Avalanche Granite upgrade including ACP-181, ACP-204, and ACP-226 proposals that improve network performance and validator operations.","href":"/docs/avalanche-granite-upgrade"},{"title":"Avalanche Helicon network upgrade","href":"/docs/avalanche-helicon-upgrade"},{"title":"TON: Deploy a smart contract","href":"/docs/getting-started-with-ton-deploy-a-smart-contract"},{"title":"TON: How to develop fungible tokens (Jettons)","href":"/docs/ton-how-to-develop-fungible-tokens-jettons"},{"title":"TON: How to customize fungible tokens (Jettons)","href":"/docs/ton-how-to-customize-fungible-tokens-jettons"},{"title":"TON: How to develop non-fungible tokens (NFT)","href":"/docs/ton-how-to-develop-non-fungible-tokens"},{"title":"TON: Wallet initialization with Tonweb","href":"/docs/ton-wallet-initialization-with-tonweb"},{"title":"TON: How to interact with Jettons","href":"/docs/ton-how-to-interact-with-jettons"},{"title":"TON: Choosing v2, v3, or v4","href":"/docs/ton-choosing-v2-or-v3"},{"title":"Unichain: Collecting Uniswap v4 ETH-USDC trades","href":"/docs/unichain-collecting-uniswapv4-eth-usdc-trades"},{"title":"Arbitrum: L1 to L2 messaging smart contract","href":"/docs/arbitrum-tutorial-l1-to-l2-messaging-smart-contract"},{"title":"zkSync Era: Develop a custom paymaster contract","href":"/docs/zksync-tutorial-develop-a-custom-paymaster-contract"},{"title":"Optimism: Bridge ETH from L1 to L2 with the JS SDK","href":"/docs/optimism-tutorial-bridge-ether-from-ethereum-l1-to-optimism-l2-using-the-optimism-javascript-sdk"},{"title":"Scroll: Deploy Uniswap V3 on Scroll","href":"/docs/scroll-tutorial-deploy-the-uniswap-v3-smart-contracts-on-scroll"},{"title":"Ronin: Make a game's smart contract","href":"/docs/ronin-tutorial-making-a-game-contract"},{"title":"Ronin: on-chain meta racing game","href":"/docs/ronin-on-chain-meta-racing-game"},{"title":"Aptos: Publish a module to save and retrieve messages","href":"/docs/aptos-tutorial-publish-a-module-to-save-and-retrieve-a-message-on-aptos"},{"title":"Plasma: Network setup and configuration","href":"/docs/plasma-tutorial-network-setup-and-configuration"},{"title":"Monitor Plasma USDT flows with web3.py","href":"/docs/plasma-tutorial-monitor-usdt-flows-with-web3py"},{"title":"Plasma: RPC failover with eRPC","href":"/docs/plasma-tutorial-rpc-failover-with-erpc"},{"title":"Plasma: Bridging assets with Symbiosis","href":"/docs/plasma-tutorial-bridging-assets-with-symbiosis"},{"title":"Plasma: Bridging from HyperEVM with deBridge","href":"/docs/plasma-tutorial-bridging-from-hyperevm-with-debridge"},{"title":"Gnosis: Soulbound token with Remix and OpenZeppelin","href":"/docs/gnosis-tutorial-simple-soulbound-token-with-remix-and-openzeppelin"},{"title":"Cronos: Dutch auction smart contract with Hardhat","href":"/docs/cronos-tutorial-dutch-auction-smart-contracts-on-cronos-with-hardhat"},{"title":"Filecoin: Deploy a deal-making contract using Hardhat","href":"/docs/filecoin-tutorial-deploy-a-deal-making-contract-on-filecoin-with-hardhat"},{"title":"TRON: Energy and Bandwidth with Python \u0026 Chainstack","href":"/docs/tron-mastering-energy-bandwidth-with-python-and-chainstack"},{"title":"TRON: Polling for TRC20 transfers in Node.js","href":"/docs/tron-polling-for-trc20-transfers"},{"title":"Sonic: Swap farming for points walkthrough in Python","href":"/docs/sonic-swap-farming-for-points-walkthrough-in-python"},{"title":"Starknet: NFT contract with Nile and L1-L2 messaging","href":"/docs/starknet-tutorial-an-nft-contract-with-nile-and-l1-l2-reputation-messaging"},{"title":"Solana archive nodes: Data availability \u0026 tooling","href":"/docs/solana-archive-nodes-the-backbone-of-solanas-data-availability-and-developer-tooling"},{"title":"Ronin gaming: Overview of Axie \u0026 Pixels","href":"/docs/ronin-gaming-overview-of-axie-pixels"},{"title":"Ronin: Consensus algorithm","href":"/docs/ronin-consensus-algorithm"},{"title":"Kaia (ex. Klaytn): Contract Sizzle 100","href":"/docs/klaytn-contract-sizzle-100"},{"title":"Sui: On-chain validator analytics with pysui","href":"/docs/sui-on-chain-validator-analytics-with-pysui"},{"title":"Berachain: On-chain data quickstart with Python","href":"/docs/berachain-on-chain-data-quickstart-with-python"},{"title":"Linea: Real-time transaction activity monitor with Python","href":"/docs/linea-real-time-transaction-monitor-python"},{"title":"Mantle: Fetching token prices from Merchant Moe","href":"/docs/mantle-fetching-token-prices-from-merchant-moe"},{"title":"Zora: Real-time creator token detection and monitoring","href":"/docs/zora-creator-token-detection-tutorial"},{"title":"Polkadot: Real-time network health monitoring dashboard","href":"/docs/polkadot-network-health-monitoring"},{"title":"Celo: Build a voting dApp with Foundry and Next.js","href":"/docs/celo-build-a-simple-voting-dapp-with-foundry-nextjs-and-web3js"},{"title":"opBNB: How to listen to deposits on the opBNB bridge","href":"/docs/opbnb-how-to-listen-deposits-bridge"},{"title":"Monad: Querying the blockchain with JavaScript","href":"/docs/monad-tutorial-querying-blockchain-javascript"},{"title":"Monad: Querying the blockchain with Python","href":"/docs/monad-tutorial-querying-blockchain-python"},{"title":"Monad: Deploying and verifying smart contracts","href":"/docs/monad-tutorial-deploy-verify-smart-contracts"},{"title":"Monad: Minting and managing NFTs","href":"/docs/monad-tutorial-nft-minting-erc721"},{"title":"Monad: Monitoring events and transactions","href":"/docs/monad-tutorial-event-monitoring"},{"title":"Monad: Fetching token prices from DEXs","href":"/docs/monad-tutorial-dex-price-fetching"},{"title":"Monad: Local fork testing with Foundry","href":"/docs/monad-tutorial-local-fork-testing"},{"title":"Tempo: Building your first payment app","href":"/docs/tempo-tutorial-first-payment-app"},{"title":"Tempo: Basic DEX swap with Foundry","href":"/docs/tempo-tutorial-dex-swap-foundry"},{"title":"Elysium: Trace internal calls and HYPE transfers","href":"/docs/elysium-tutorial-trace-internal-calls"}]},{"group":"Mastering Hyperliquid","pages":[{"title":"Mastering Hyperliquid","sidebarTitle":"Overview","href":"/docs/hyperliquid-development"},{"title":"Building on Hyperliquid with the nktkas TypeScript SDK","href":"/docs/hyperliquid-typescript-sdk-nktkas"},{"title":"Hyperliquid: Bridging USDC between HyperCore and HyperEVM","href":"/docs/hyperliquid-bridging-usdc"},{"title":"Understanding Hyperliquid infrastructure and RPC nodes","href":"/docs/hyperliquid-infrastructure-faq"},{"title":"Hyperliquid: Authentication via signatures overview","href":"/docs/hyperliquid-authentication-guide"},{"title":"Hyperliquid signing overview","href":"/docs/hyperliquid-signing-overview"},{"title":"Hyperliquid: L1 action signing on HyperCore with Python SDK","href":"/docs/hyperliquid-l1-action-signing"},{"title":"Hyperliquid: User-signed actions with Python SDK","href":"/docs/hyperliquid-user-signed-actions"},{"title":"Hyperliquid: Debugging signature errors","href":"/docs/hyperliquid-debugging-signature-errors"},{"title":"Hyperliquid node configuration and system transactions","href":"/docs/hyperliquid-node-configuration"},{"title":"Hyperliquid peering","href":"/docs/hyperliquid-peering"},{"title":"Fork Hyperliquid EVM with Foundry","href":"/docs/hyperliquid-forking-evm-foundry"},{"title":"Write to HyperCore from a contract with CoreWriter","href":"/docs/hyperliquid-corewriter"},{"title":"Building a copy trading bot with spot order mirroring","href":"/docs/hyperliquid-copy-trading-websocket"},{"title":"TWAP order execution and monitoring","href":"/docs/hyperliquid-twap-orders"},{"title":"Handling order precision and market metadata","href":"/docs/hyperliquid-order-precision"},{"title":"Implementing spot-perp funding rate arbitrage","href":"/docs/hyperliquid-funding-rate-arbitrage"},{"title":"Trading HIP-4 outcome markets on Hyperliquid","href":"/docs/hyperliquid-hip4-outcome-markets-trading"}]},{"group":"Mastering Web3 LLMs and AI use","pages":[{"title":"Mastering Web3 LLMs and AI use","sidebarTitle":"Overview","href":"/docs/mastering-web3-llms-and-ai-use"},{"title":"AI trading agent: Stack","href":"/docs/ai-trading-agent-stack"},{"title":"AI trading agent: Pipeline","href":"/docs/ai-trading-agent-pipeline"},{"title":"AI trading agent: Implementation","href":"/docs/ai-trading-agent-implementation"},{"title":"AI trading agent: Stateless agent","href":"/docs/ai-trading-agent-stateless-agent"},{"title":"AI trading agent: Stateful agent","href":"/docs/ai-trading-agent-stateful-agent"},{"title":"AI trading agent: Grok 4 integration with OpenRouter","href":"/docs/ai-trading-agent-grok4-openrouter-integration"},{"title":"AI trading agent: Kimi K2 integration with OpenRouter","href":"/docs/ai-trading-agent-kimi-k2-openrouter-integration"},{"title":"AI trading agent: ERNIE 4.5 local integration with MLX-LM","href":"/docs/ai-trading-agent-ernie-mlx-local-integration"},{"title":"AI trading agent: SmolLM3 local integration with MLX-LM","href":"/docs/ai-trading-agent-smollm3-mlx-local-integration"},{"title":"AI trading agent: Fine-tuning overview","href":"/docs/ai-trading-agent-fine-tuning-overview"},{"title":"AI trading agent: GANs and synthetic data","href":"/docs/ai-trading-agent-gans-and-synthetic-data"},{"title":"AI trading agent: Fusing LoRA adapters for Ollama","href":"/docs/ai-trading-agent-fusing-llm-adapters-and-converting-to-ollama"},{"title":"AI trading agent: Reinforcement learning","href":"/docs/ai-trading-agent-reinforcement-learning"}]},{"group":"Mastering Solana","pages":[{"title":"Mastering Solana","sidebarTitle":"Overview","href":"/docs/solana-development"},{"title":"Solana: Create a stake account and delegate SOL with web3.js","href":"/docs/solana-delegate-sol-staking"},{"title":"Solana: Create and mint an SPL token with web3.js","href":"/docs/solana-mint-spl-tokens"},{"title":"Solana: Alpenglow consensus explained","href":"/docs/solana-alpenglow-consensus"},{"title":"Solana: Transaction v1 explained","href":"/docs/solana-transaction-v1"},{"title":"Solana: Rebuild your programs for sBPFv3","href":"/docs/solana-sbpfv3-program-migration"},{"title":"Solana: Upgrade a program from another program","href":"/docs/solana-upgrade-program-from-program"},{"title":"Solana: Rent reduction and reclaiming excess rent","href":"/docs/solana-rent-reduction-reclaim-excess-rent"},{"title":"Solana: Subscriptions and allowances","href":"/docs/solana-subscriptions-and-allowances"},{"title":"Solana: Indexing subscription events with Geyser","href":"/docs/solana-indexing-subscription-events-geyser"},{"title":"Solana: Capped onchain budgets for AI agents","href":"/docs/solana-agent-allowances-x402"},{"title":"Solana: Creating a trading and sniping pump.fun bot","href":"/docs/solana-creating-a-pumpfun-bot"},{"title":"Solana: Listening to pump.fun migrations to PumpSwap","href":"/docs/solana-listening-to-pumpfun-migrations-to-raydium"},{"title":"Solana: Listen to pump.fun mints via logsSubscribe","href":"/docs/solana-listening-to-pumpfun-token-mint-using-only-logssubscribe"},{"title":"Solana: Priority fees for a Jupiter Swap in Python","href":"/docs/solana-priority-fees-for-a-jupiter-in-python"},{"title":"Solana: Analyzing adjacent transactions for priority fees","href":"/docs/solana-analyzing-adjacent-transactions-for-priority-fees"},{"title":"Solana: How to perform token swaps using Raydium","href":"/docs/solana-how-to-perform-token-swaps-using-the-raydium-sdk"},{"title":"Solana: How to build actions and blinks","href":"/docs/solana-how-to-build-actions-and-blinks"},{"title":"Solana: PDAs and cross-program invocations","href":"/docs/solana-program-derived-addresses-and-cross-program-invocations"},{"title":"Solana: Anchor development","href":"/docs/solana-anchor-development"},{"title":"Solana: Pinocchio vs Quasar program frameworks","href":"/docs/solana-pinocchio-vs-quasar"},{"title":"Solana: The escrow pattern","href":"/docs/solana-escrow-pattern"},{"title":"Solana: Zero-knowledge proofs with Noir and Groth16","href":"/docs/solana-zk-proofs"},{"title":"Solana: Fast unit testing with LiteSVM","href":"/docs/solana-litesvm-testing"},{"title":"Solana: Surfpool quick-start","href":"/docs/solana-surfpool"},{"title":"Solana: Mainnet fork tests with the Surfpool Kit plugin","href":"/docs/solana-surfpool-kit-mainnet-fork-tests"},{"title":"Solana: Token extensions (Token-2022)","href":"/docs/solana-token-extensions"},{"title":"Solana: Create a token and vesting program","href":"/docs/solana-tutorial-creating-a-token-and-vesting-the-token-in-your-program"},{"title":"Solana: Transferring SPL tokens in TypeScript","href":"/docs/transferring-spl-tokens-on-solana-typescript"},{"title":"Solana: Enhancing SPL token transfers with retry logic","href":"/docs/enhancing-solana-spl-token-transfers-with-retry-logic"},{"title":"Solana: pluggable transaction signing with solana-keychain","href":"/docs/solana-keychain-signing"},{"title":"Solana: batching token instructions with p-token","href":"/docs/solana-ptoken-batch-instruction"},{"title":"Solana: getAccountInfo vs getMultipleAccounts","href":"/docs/solana-getaccountinfo-getmultipleaccounts"},{"title":"Solana: Borsh, Bincode, and Wincode serialization","href":"/docs/solana-serialization-borsh-bincode-wincode"},{"title":"Solana: getTokenLargestAccounts for SPL holders","href":"/docs/solana-gettokenlargestaccounts-rpc-method"},{"title":"How to land transactions on Solana","href":"/docs/solana-how-to-land-transactions"},{"title":"Solana: Understanding the compute budget","href":"/docs/solana-compute-budget"},{"title":"Solana: Priority fees for faster transactions","href":"/docs/solana-how-to-priority-fees-faster-transactions"},{"title":"Solana: Estimate priority fees with RPC methods","href":"/docs/solana-estimate-priority-fees-getrecentprioritizationfees"},{"title":"Solana: Multiple RPC endpoints for dApp performance","href":"/docs/solana-how-to-use-multiple-rpc-endpoints-optimize-dapp-performance"},{"title":"Solana: How to handle the transaction expiry error","href":"/docs/solana-how-to-handle-the-transaction-expiry-error"},{"title":"Solana: Durable nonces for offline signing","href":"/docs/solana-durable-nonces"},{"title":"Solana: Address lookup tables","href":"/docs/solana-address-lookup-tables"},{"title":"Solana: MEV protection with Jito","href":"/docs/solana-mev-protection"},{"title":"Solana Agave 2.0 upgrade reference","href":"/docs/solana-agave-20-upgrade-reference"},{"title":"Solana: Blocks vs slots explained","href":"/docs/understanding-the-difference-between-blocks-and-slots-on-solana"},{"title":"Solana: Optimize your getBlock performance","href":"/docs/solana-optimize-your-getblock-performance"},{"title":"Solana: Understanding Block Time","href":"/docs/solana-understanding-block-time"},{"title":"Solana: Associating transactions with block and block time using Yellowstone gRPC","href":"/docs/solana-transactions-block-time-yellowstone-grpc"},{"title":"Solana: Listening to pump.fun token mint using Geyser","href":"/docs/solana-listening-to-pumpfun-token-mint-using-geyser"},{"title":"Solana: Geyser and Yellowstone gRPC in Node.js","href":"/docs/solana-listening-to-programs-using-geyser-and-yellowstone-grpc-node-js"},{"title":"Solana blockSubscribe 1009 error on WebSocket","href":"/docs/solana-blocksubscribe-1009-error-on-websocket"},{"title":"Common errors with @solana/web3.js","href":"/docs/common-errors-with-solana-web3js"}]},{"group":"Best practices handbook","pages":[{"title":"Best practices handbook","sidebarTitle":"Overview","href":"/docs/chainstack-web3-development-best-practices"},{"title":"Chainbench: Benchmark your blockchain RPC endpoints","href":"/docs/chainbench-tutorial-benchmark-your-blockchain-rpc-endpoints"},{"title":"Using eRPC with Chainstack: Quickstart","href":"/docs/using-erpc-with-chainstack-quickstart"},{"title":"Using Chainstack as a Hummingbot Gateway RPC provider","href":"/docs/using-chainstack-with-hummingbot-gateway"},{"title":"Ponder: Blockchain indexing backends with Chainstack","href":"/docs/ponder-tutorial-building-blockchain-application-backends-with-chainstack"},{"title":"HTTP batch request VS multicall contract","href":"/docs/http-batch-request-vs-multicall-contract"},{"title":"Web3 dApp secrets: Environment variables guide","href":"/docs/how-to-store-your-web3-dapp-secrets-guide-to-environment-variables"},{"title":"Introduction to smart contract auditing using Foundry","href":"/docs/introduction-to-smart-contract-manual-auditing-with-foundry-and-slither"},{"title":"Web3 node.js: From zero to a full-fledged project","href":"/docs/web3-nodejs-from-zero-to-a-full-fledged-project"},{"title":"Get the most out of Chainstack platform API","href":"/docs/guide-get-the-most-out-of-the-chainstack-platform-api"},{"title":"Understanding eth_getLogs limitations","href":"/docs/understanding-eth-getlogs-limitations"},{"title":"Monitor transaction propagation to mempool in Python","href":"/docs/monitoring-transaction-propagation-from-node-to-mempool-in-evm-networks-with-python"},{"title":"Handle real-time data with WebSockets in JS \u0026 Python","href":"/docs/handle-real-time-data-using-websockets-with-javascript-and-python"},{"title":"Make your dApp more reliable with Chainstack","href":"/docs/make-your-dapp-more-reliable-with-chainstack"},{"title":"Best practices for error handling in API requests","href":"/docs/best-practices-for-error-handling-in-api-requests"},{"title":"Common SSL issues on Python and how to fix it","href":"/docs/common-ssl-issues-on-python-and-how-to-fix-it"},{"title":"EVM node returns \"Missing trie node\"","href":"/docs/evm-node-returns-missing-trie-node"},{"title":"EVM node connection: HTTP vs WebSocket","href":"/docs/evm-node-connection-http-vs-websocket"},{"title":"EVM transaction pool: pending vs queued","href":"/docs/evm-transaction-pool-pending-vs-queued"},{"title":"Adding a custom network to MetaMask","href":"/docs/adding-a-custom-network-to-metamask"},{"title":"Adding a custom RPC endpoint to Safe","href":"/docs/adding-a-custom-rpc-endpoint-to-safe"},{"title":"Adding a custom RPC endpoint to Rabby","href":"/docs/adding-a-custom-rpc-endpoint-to-rabby"},{"title":"Forking EVM-compatible mainnet with Hardhat","href":"/docs/forking-evm-compatible-mainnet-with-hardhat"},{"title":"Error reference","href":"/docs/error-reference"},{"title":"Only replay-protected (EIP-155) transactions allowed over RPC","href":"/docs/evm-only-replay-protected-eip-155-transactions-error"},{"title":"Checking node latency","href":"/docs/checking-node-latency"},{"title":"Best practices for securing your Chainstack endpoint","href":"/docs/best-practices-for-securing-your-chainstack-endpoint"},{"title":"Multithreading in Python for Web3 requests","href":"/docs/mastering-multithreading-in-python-for-web3-requests-a-comprehensive-guide"},{"title":"Authentication methods available on Chainstack","href":"/docs/authentication-methods-for-different-scenarios"},{"title":"Scaling your dApp with Kubernetes: Comprehensive guide","href":"/docs/tutorial-on-how-to-make-your-dapp-reliable-and-scalable-with-kubernetes"},{"title":"Choose the right blockchain network for your dApp","href":"/docs/navigating-the-web3-landscape-how-to-choose-the-right-blockchain-network-for-your-dapp"},{"title":"Getting started with Foundry","href":"/docs/getting-started-with-foundry"},{"title":"Ethereum: Redundant event listener with ethers/web3.js","href":"/docs/ethereum-redundant-event-llstener-ethers-web3js"},{"title":"Ethereum: Redundant event listener with Python","href":"/docs/ethereum-redundant-event-listener-python-version"}]},{"group":"Blockchain APIs guides","pages":[{"title":"Blockchain APIs guides","sidebarTitle":"Overview","href":"/docs/chainstack-blockchain-apis-guides"},{"title":"Base Denim: 200 ms blocks","href":"/docs/base-denim-200ms-blocks"},{"title":"Stream real-time transactions on Base","href":"/docs/base-streaming-transactions"},{"title":"Subblocks on Optimism: 200ms preconfirmations","href":"/docs/flashblocks-on-optimism"},{"title":"Track real-time transactions on Optimism with Subblocks","href":"/docs/optimism-streaming-transactions-flashblocks"},{"title":"Tracking some Bored Apes: The Ethereum event logs tutorial","href":"/docs/tracking-some-bored-apes-the-ethereum-event-logs-tutorial"},{"title":"Uncovering the power of eth_getBlockReceipts","href":"/docs/uncovering-the-power-of-ethgetblockreceipts"},{"title":"eth_getBlockReceipts emulator for blockchain data","href":"/docs/expanding-your-blockchain-horizons-the-eth_getblockreceipts-emulator"},{"title":"Deep dive into Merkle proofs and eth_getProof","href":"/docs/deep-dive-into-merkle-proofs-and-eth-getproof-ethereum-rpc-method"},{"title":"Geth vs Erigon: RPC method comparison on Ethereum","href":"/docs/geth-vs-erigon-deep-dive-into-rpc-methods-on-ethereum-clients"},{"title":"Ethereum logs tutorial series: Logs and filters","href":"/docs/ethereum-logs-tutorial-series-logs-and-filters"},{"title":"Custom JavaScript tracing for EVM transactions","href":"/docs/mastering-custom-javascript-tracing-for-ethereum-virtual-machine"},{"title":"Ethereum: Battleship game with zero-knowledge proofs","href":"/docs/develop-a-battleship-game-using-zero-knowledge-concepts-on-ethereum"},{"title":"Send Warp transactions with web3.js, ethers.js, web3.py","href":"/docs/sending-warp-transaction-with-web3js-ethersjs-web3py-and-ethclientgo"},{"title":"Chainlink oracles: Fetch real-time crypto prices","href":"/docs/harnessing-chainlink-oracles-with-chainstack-fetching-real-time-crypto-prices-from-ethereum"},{"title":"Fetch BAYC transfer events with web3.js getPastEvents","href":"/docs/fetching-transfer-events-with-getpastevents-for-a-bayc-nft"},{"title":"Fix Ethereum's filter not found error","href":"/docs/understanding-ethereums-filter-not-found-error-and-how-to-fix-it"},{"title":"Introducing Bun: The future of JavaScript runtimes","href":"/docs/introducing-bun-the-future-of-javascript-runtimes"},{"title":"Fetch address transactions with eth_getBlockByNumber","href":"/docs/fetching-transactions-to-and-from-a-specific-address-with-eth_getblockbynumber"},{"title":"cryo: Your gateway to blockchain data","href":"/docs/cryo-your-gateway-to-blockchain-data"},{"title":"cryo with Chainstack: Blockchain data mastery in Python","href":"/docs/cryo-with-chainstack-and-python"},{"title":"Exploring Bitcoin transactions with `getrawtransaction`","href":"/docs/exploring-bitcoin-transactions-with-getrawtransaction"},{"title":"MESC (Multi-Endpoint Shared Configuration) setup","href":"/docs/mesc-and-chainstack"},{"title":"ethers.js FallbackProvider for data reliability","href":"/docs/enhancing-blockchain-data-reliability-with-ethers-fallbackprovider"},{"title":"Web3.js: How to use the Chainstack plugin","href":"/docs/web3js-how-to-use-the-new-chainstack-plugin"},{"title":"ethers.js ChainstackProvider: Multi-chain balance checker","href":"/docs/ethersjs-chainstackprovider-how-to-multi-chain-wallet-balance-aggregator"}]},{"group":"Chainstack Marketplace","pages":[{"title":"Chainstack Marketplace","sidebarTitle":"Overview","href":"/docs/chainstack-marketplace-tutorials"},{"title":"JWT: Implement secure user authentication","href":"/docs/tutorial-mastering-jwt-how-to-implement-secure-user-authentication"},{"title":"JWT validation in Go for Chainstack Marketplace","href":"/docs/implementing-jwt-validation-in-golang-for-chainstack-marketplace-integration"}]},{"group":"Web3pedia","pages":[{"title":"Web3pedia","sidebarTitle":"Overview","href":"/docs/web3pedia-introduction"},{"title":"Web3 Lingo","href":"/docs/web3-language-and-acronyms"},{"title":"Development frameworks and libraries","href":"/docs/web3-development-frameworks-and-libraries-glossary"},{"title":"Smart contracts","href":"/docs/smart-contracts-glossary"},{"title":"Security","href":"/docs/web3-security-glossary"},{"title":"Infrastructure","href":"/docs/web3-infrastructure-glossary"},{"title":"Solana glossary","href":"/docs/solana-glossary"}]}]},{"group":"MCP servers","pages":[{"title":"Chainstack MCP server","href":"/docs/chainstack-mcp-server"},{"title":"Developer Portal MCP server","href":"/docs/developer-portal-mcp-server"},{"title":"EVM MCP server","href":"/docs/evm-mcp-server"},{"title":"Solana MCP server","href":"/docs/solana-mcp-server"}]},{"group":"Marketplace","pages":[{"title":"About Marketplace","href":"/docs/about-marketplace"},{"title":"List your app on marketplace","href":"/docs/list-your-app-on-marketplace"},{"title":"Work with Marketplace","href":"/docs/work-with-chainstack-marketplace"}]},{"group":"Chainstack Compare","pages":[{"title":"Chainstack Compare dashboard","href":"/docs/chainstack-compare-dashboard"}]},{"group":"Chainstack ChatGPT plugin","pages":[{"title":"Chainstack ChatGPT plugin overview","href":"/docs/chainstack-chat-gpt-plugin-introduction"}]},{"group":"Chainstack DLP browser extension","pages":[{"title":"Chainstack DLP tool overview","href":"/docs/chainstack-data-leak-protection-tool-introduction"}]},{"group":"Protocols","pages":[{"title":"Configurations","href":"/docs/protocols-configurations"},{"title":"Networks","href":"/docs/protocols-networks"},{"title":"Modes and types","href":"/docs/protocols-modes-and-types"},{"title":"Extended history","href":"/docs/extended-nodes"},{"title":"Clients","href":"/docs/protocols-clients"},{"title":"Available clouds, regions, \u0026 locations","href":"/docs/nodes-clouds-regions-and-locations"},{"title":"Mempool configurations","href":"/docs/mempool-configuration"},{"group":"Available node methods","pages":[{"title":"Available node methods","sidebarTitle":"Overview","href":"/docs/available-node-methods"},{"title":"Arc methods","href":"/docs/arc-methods"},{"title":"Ethereum methods","href":"/docs/ethereum-methods"},{"title":"Solana methods","href":"/docs/solana-methods"},{"title":"BNB Smart Chain methods","href":"/docs/bnb-smart-chain-methods"},{"title":"Polygon methods","href":"/docs/polygon-methods"},{"title":"Plasma methods","href":"/docs/plasma-methods"},{"title":"Robinhood Chain methods","href":"/docs/robinhood-methods"},{"title":"Elysium methods","href":"/docs/elysium-methods"},{"title":"Arbitrum methods","href":"/docs/arbitrum-methods"},{"title":"Base methods","href":"/docs/base-methods"},{"title":"Hyperliquid methods","href":"/docs/hyperliquid-methods"},{"title":"TRON methods","href":"/docs/tron-methods"},{"title":"Optimism methods","href":"/docs/optimism-methods"},{"title":"Avalanche methods","href":"/docs/avalanche-methods"},{"title":"TON methods","href":"/docs/ton-methods"},{"title":"Ronin methods","href":"/docs/ronin-methods"},{"title":"ZKsync Era methods","href":"/docs/zksync-era-methods"},{"title":"Starknet methods","href":"/docs/starknet-methods"},{"title":"Scroll methods","href":"/docs/scroll-methods"},{"title":"Aptos methods","href":"/docs/aptos-methods"},{"title":"Fantom methods","href":"/docs/fantom-methods"},{"title":"Sonic methods","href":"/docs/sonic-methods"},{"title":"Cronos methods","href":"/docs/cronos-methods"},{"title":"Gnosis Chain","href":"/docs/gnosis-chain"},{"title":"Kaia methods","href":"/docs/kaia-methods"},{"title":"Celo methods","href":"/docs/celo-methods"},{"title":"Bitcoin methods","href":"/docs/bitcoin-methods"},{"title":"MegaETH methods","href":"/docs/megaeth-methods"},{"title":"Tempo methods","href":"/docs/tempo-methods"},{"title":"World Chain methods","href":"/docs/worldchain-methods"},{"title":"Stable methods","href":"/docs/stable-methods"}]}]},{"group":"Advanced APIs","pages":[{"title":"Advanced APIs","href":"/docs/advanced-apis-introduction"},{"group":"Warp transactions","pages":[{"title":"Warp transactions","sidebarTitle":"Overview","href":"/docs/warp-transactions"},{"title":"Solana Trader Nodes with Warp transactions","href":"/docs/solana-trader-nodes"},{"title":"Ethereum Trader Nodes with Warp transactions","href":"/docs/ethereum-trader-nodes"},{"title":"BNB Smart Chain Trader Nodes with Warp transactions","href":"/docs/bnb-trader-nodes"}]},{"title":"Debug \u0026 Trace APIs","href":"/docs/debug-and-trace-apis"},{"title":"Reading EVM traces: callTracer and prestateTracer","href":"/docs/reading-evm-traces-with-calltracer-and-prestatetracer"}]},{"group":"Tooling","pages":[{"title":"Protocols and tooling: Web3 libraries and frameworks","href":"/docs/protocols-tooling-introduction"},{"title":"Ethereum tooling","href":"/docs/ethereum-tooling"},{"title":"Solana tooling","href":"/docs/solana-tooling"},{"title":"BNB Smart Chain tooling","href":"/docs/bsc-tooling"},{"title":"Polygon tooling","href":"/docs/polygon-tooling"},{"title":"Arbitrum tooling","href":"/docs/arbitrum-tooling"},{"title":"Base tooling","href":"/docs/base-tooling"},{"title":"Optimism tooling","href":"/docs/optimism-tooling"},{"title":"Avalanche tooling","href":"/docs/avalanche-tooling"},{"title":"Hyperliquid tooling","href":"/docs/hyperliquid-tooling"},{"title":"TON tooling","href":"/docs/ton-tooling"},{"title":"Unichain tooling","href":"/docs/unichain-tooling"},{"title":"Ronin tooling","href":"/docs/ronin-tooling"},{"title":"Sui tooling","href":"/docs/sui-tooling"},{"title":"Sui gRPC endpoint","href":"/docs/sui-grpc-endpoint"},{"title":"Sui GraphQL endpoint","href":"/docs/sui-graphql-endpoint"},{"title":"Migrate Sui from JSON-RPC to gRPC and GraphQL","href":"/docs/sui-migrate-json-rpc-to-grpc"},{"title":"Berachain tooling","href":"/docs/berachain-tooling"},{"title":"Monad tooling","href":"/docs/monad-tooling"},{"title":"Linea tooling","href":"/docs/linea-tooling"},{"title":"Mantle tooling","href":"/docs/mantle-tooling"},{"title":"MegaETH tooling","href":"/docs/megaeth-tooling"},{"title":"Polkadot tooling","href":"/docs/polkadot-tooling"},{"title":"zkSync Era tooling","href":"/docs/zksync-era-tooling"},{"title":"Zora tooling","href":"/docs/zora-tooling"},{"title":"Starknet tooling","href":"/docs/starknet-tooling"},{"title":"Scroll tooling","href":"/docs/scroll-tooling"},{"title":"Aptos tooling","href":"/docs/aptos-tooling"},{"title":"Sonic tooling","href":"/docs/sonic-tooling"},{"title":"Fantom tooling","href":"/docs/fantom-tooling"},{"title":"TRON tooling","href":"/docs/tron-tooling"},{"title":"Cronos tooling","href":"/docs/cronos-tooling"},{"title":"Gnosis Chain tooling","href":"/docs/gnosis-tooling"},{"title":"Kaia (ex. Klaytn) tooling","href":"/docs/klaytn-tooling"},{"title":"Celo tooling","href":"/docs/celo-tooling"},{"title":"Bitcoin tooling","href":"/docs/bitcoin-tooling"},{"title":"Bitcoin testnets: Testnet, Signet Testnet, and Testnet4","href":"/docs/bitcoin-testnets"},{"title":"Zcash tooling","href":"/docs/zcash-tooling"},{"title":"opBNB tooling","href":"/docs/opbnb-tooling"},{"title":"Filecoin tooling","href":"/docs/filecoin-tooling"},{"title":"Plasma tooling","href":"/docs/plasma-tooling"},{"title":"Tempo tooling","href":"/docs/tempo-tooling"},{"title":"Robinhood Chain tooling","href":"/docs/robinhood-tooling"},{"title":"Elysium tooling","href":"/docs/elysium-tooling"},{"title":"Arc tooling","href":"/docs/arc-tooling"},{"title":"World Chain tooling","href":"/docs/worldchain-tooling"},{"title":"Ink tooling","href":"/docs/ink-tooling"},{"title":"X Layer tooling","href":"/docs/xlayer-tooling"},{"title":"Stable tooling","href":"/docs/stable-tooling"},{"title":"XRP Ledger tooling","href":"/docs/xrpl-tooling"},{"title":"Stellar tooling","href":"/docs/stellar-tooling"}]}]},{"tab":"API","pages":[{"title":"API","href":"/reference/blockchain-apis"}]},{"tab":"Release notes","pages":[{"title":"Release notes","href":"/changelog"}]}]},{"product":"Self-Hosted","icon":"server","description":"Deploy on your own infrastructure","pages":[{"title":"Self-Hosted","href":"/docs/self-hosted/introduction"}]}]},"basePath":"","title":"Avalanche: Aave V3 flash loan with Hardhat - Chainstack","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}