3A Lending Protocol
  • 👋Welcome to 3A
    • Quick Start
  • PROTOCOL DOCUMENTATION
    • Lending
      • Vaults
        • Issuance Fee
      • Stability Pool
      • Liquidation
        • Stability Pool Liquidations
        • Dutch Auction
        • Community Liquidations
      • Redemptions
    • EURO3 Coin
      • EURO3 Price Stability
      • WatchDog Bot
    • A3A Token
      • A3A Staking and Cashbacks
      • A3A Rewards
    • 3A Ecosystem Incentives
    • Premium Services
      • Vault Optimization Bot
  • TECHNICAL DOCUMENTATION
    • User Interface
    • Smart Contracts
      • Linea Mainnet Contracts
      • Polygon Mainnet Contracts
      • RedBelly Testnet Contracts
      • API
      • Interacting with contracts
        • Creating a vault
        • Adding and removing collateral
        • Borrowing and Repaying
    • Audit Report
      • Hypernative
    • Bug Bounties
  • WHITELISTING CRITERIA
    • Overview
    • Mandatory Requirements
    • Risk Methodology
      • Fundamental Risk Score
      • Technical Risk Score
      • Market Risk Score
    • Risk Sensitive Parameters
    • Whitelisted Tokens
  • COMMUNITY REWARDS
    • Centurion
    • Referral System
  • GOVERNANCE
    • 3A DAO
    • Voting
    • Forum Discussions
  • COMMUNICATION
    • Contact Us
    • Team Contacts
  • USER GUIDE
    • Frequently Asked Questions
    • DeFi Glossary
  • BRAND ASSETS
    • Logo Package
    • Color Palette
Powered by GitBook
On this page
  1. TECHNICAL DOCUMENTATION
  2. Smart Contracts
  3. Interacting with contracts

Creating a vault

The majority of user-facing operation for the Protocol revolves around the VaultFactory, which address can be retrieved by using the API along with its ABI Solidity interface for VaultFactory is:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IVaultFactory {
    event NewVault(address indexed vault, string name, address indexed owner);
    event PriceFeedUpdated(address indexed priceFeed);

    function setPriceFeed(address _priceFeed) external;
    function vaultCount() external view returns (uint256);
    function lastVault() external view returns (address);
    function firstVault() external view returns (address);
    function nextVault(address _vault) external view returns (address);
    function prevVault(address _vault) external view returns (address);
    function liquidationRouter() external view returns (address);
    function MAX_TOKENS_PER_VAULT() external view returns (uint256);
    function priceFeed() external view returns (address);
    function transferVaultOwnership(address _vault, address _newOwner) external;
    function createVault(string memory _name) external returns (address);
    function addCollateralNative(address _vault) external payable;
    function removeCollateralNative(address _vault, uint256 _amount, address _to) external;
    function addCollateral(address _vault, address _collateral, uint256 _amount) external;
    function removeCollateral(address _vault, address _collateral, uint256 _amount, address _to) external;
    function borrow(address _vault, uint256 _amount, address _to) external;
    function distributeBadDebt(address _vault, uint256 _amount) external;
    function closeVault(address _vault) external;
    function repay(address _vault, uint256 _amount) external;
    function redeem(address _vault, address _collateral, uint256 _collateralAmount, address _to) external;
    function liquidate(address _vault) external;
    function isLiquidatable(address _vault) external view returns (bool);
    function isReedemable(address _vault, address _collateral) external view returns (bool);
    function containsVault(address _vault) external view returns (bool);
    function stable() external view returns (address);
    function isCollateralSupported(address _collateral) external view returns (bool);
}

Creating in solidity is as simple as the following:

import "./IVaultFactory.sol";
// --- core contract logic ---
IVaultFactory vaultFactory = IVaultFactory(0x.....0);
address vaultAddress = vaultFactory.createVault("customName"); 
PreviousInteracting with contractsNextAdding and removing collateral

Last updated 1 year ago