GranEverest · ETH vault on Base
Documentation
This page describes the GranEverest ETH vault on Base mainnet, how to use it as an end user, and how to integrate it as a developer. The design focuses on a narrow, transparent feature set, with clear risk boundaries and predictable on-chain behaviour.
1. Overview
GranEverest currently operates a single public vault contract on Base mainnet: GranVaultBaseETH. It is a single-asset borrowing vault where both collateral and debt are in the same token, WETH on Base. Through the app, users see and sign regular ETH transactions; wrapping and unwrapping between ETH and WETH is handled by the application layer.
The objective is to provide an ETH credit line without price-based liquidations or complex interest-rate models. Instead of a broad multi-asset money market, GranEverest keeps a tight, observable scope:
- One WETH-only vault on Base.
- No price-based liquidation engine or keeper auctions.
- Hard-coded 70% loan-to-value (LTV) limit enforced on-chain.
- A protocol fee of 0.25% on deposits and withdrawals only.
- No protocol interest rate on borrow or repay.
Canonical contract addresses, guardian details and auxiliary execution contracts are listed and kept up to date on the Trust page.
2. Core properties
Asset model
- Collateral & debt token: WETH on Base at
0x4200000000000000000000000000000000000006. - The user interface is expressed in ETH. Deposits and withdrawals are shown and signed in ETH; the app performs wrapping/unwrapping into WETH in the background.
- Debt is denominated in the same WETH token.
- Borrowed ETH is fully non-custodial and freely movable.
LTV & limits
- Maximum LTV: 70% (strictly enforced on-chain).
- Users cannot borrow above 70% of their recorded collateral. Withdrawals that would push LTV beyond this bound revert.
- LTV is computed purely in WETH units, since both debt and collateral are the same asset.
Fees
- Protocol fee: 0.25% on deposit and withdrawal only.
- No protocol fee on borrow or repay transactions.
- Users always pay their own Base L2 gas costs.
- Any additional execution costs shown in the wallet interface before signing remain the user's responsibility.
Liquidations
- No price-based liquidation logic in the vault.
- No keeper bots, no auctions, no margin calls.
- Users decide when to reduce or close their position, provided they remain within the 70% LTV boundary.
Pause behaviour
- The designated owner/guardian can pause the vault on Base mainnet.
- While paused, deposit, borrow and withdraw calls revert.
- repay remains allowed so users can always reduce or close debt.
Anti-loop guard
- Same-block borrow-and-deposit loops are blocked at the protocol level.
- This prevents attempting to recycle borrowed ETH back into the vault within a single atomic transaction.
- The UI explains why such patterns do not create additional real borrow capacity.
Roles, Base & execution
- Owner / guardian: may pause/unpause the vault and manage guarded parameters for the Base deployment.
- A dedicated execution contract on Base can interact with the vault on behalf of users for structured flows, while the core safety rules remain enforced by the vault itself.
- Swap execution is delegated to a configurable
swapExecutor contract (for example a DEX aggregator). Failures or excess price movement cause the entire transaction to revert, so the vault state does not change if execution cannot complete safely. - All privileged roles, vault addresses and execution contracts are published on the Trust page.
3. User guide
3.1 Requirements
- A wallet that supports Base (for example MetaMask, Rabby or Coinbase Wallet).
- ETH bridged to Base to use as collateral.
- Additional ETH on Base to pay gas fees for transactions.
3.2 Connect & network
- Open graneverest.com, go to the app and connect your wallet.
- If your wallet is not on Base yet, the app will request a network switch. Interactions on non-Base networks are blocked by design.
3.3 Open a position (deposit ETH)
- Navigate to the “Loans / ETH vault” screen.
- Enter the amount of ETH you want to deposit as collateral.
- Review the protocol fee (0.25% on the deposit).
- Confirm the transaction in your wallet.
- Once confirmed, your collateral is recorded on-chain and your available credit line is updated. The app displays collateral, debt and remaining borrow capacity.
3.4 Draw from your credit line (borrow)
- In the borrow section, choose the ETH amount you want to draw, staying within your available limit.
- The interface is designed to discourage obviously unsafe targets and shows the resulting position before you confirm.
- Where available, you can choose a different receive asset (for example USDC, USDT or DAI). In that case the vault still records ETH-denominated debt, but the router atomically swaps the borrowed ETH into your selected asset using a guarded external swap executor.
- If the swap cannot complete or the price moves beyond the configured slippage, the transaction reverts and your on-chain position remains unchanged.
- Click “Borrow” and approve the transaction in your wallet.
- Your outstanding debt is denominated in ETH/WETH. The protocol does not charge an ongoing interest rate; the amount you owe is defined by the borrow operations you execute.
3.5 Reduce or close your debt (repay)
- Use the “Repay” section to send ETH back to the vault at any time, in part or in full.
- If you send more than your outstanding debt, the contract repays your full balance and returns any excess ETH.
3.6 Unlock collateral (withdraw)
- Use the “Withdraw” section to request part or all of your collateral.
- When there is outstanding debt, the app shows how much must remain as collateral to keep LTV ≤ 70%.
- Review the protocol fee (0.25% on the withdrawn amount) and approve the transaction.
- When available, “withdraw max” helpers can simplify fully closing a position by coordinating repay and withdraw steps.
4. Risk overview
Interacting with any smart contract on-chain involves risk. The points below highlight the main categories users should understand before using the vault. This section is informational only and does not constitute investment or legal advice.
Smart contract risk
Defects or vulnerabilities in the GranVaultBaseETH contract, the execution router or the external swap executor, as well as the surrounding infrastructure and dependencies, could result in loss of funds. The system is tested and monitored, but no smart contract can be guaranteed free of risk.
Key & governance risk
The owner/guardian can pause the vault and manage guarded parameters. The protocol is designed so that users can always repay, even while paused. As with any key-based governance model, there is residual risk related to key custody, potential compromise or operational mistakes.
L2 / Base infrastructure risk
The vault runs on Base. Network outages, sequencer issues, L1 congestion or censorship at the L2 or L1 level could delay or temporarily block interactions, including withdrawals.
Self-managed leverage
The protocol does not liquidate positions based on ETH price. This avoids forced liquidations, but it also means users are responsible for deciding when to reduce exposure. If ETH moves sharply, the value of your collateral changes while your debt remains fixed in ETH terms.
Application vs. contract
If the GranEverest web app is unavailable, technically capable users can still interact directly with the contracts via BaseScan or their own scripts. This provides redundancy but requires care: interacting directly without the app's safeguards can increase the chance of user error.
Scope & assumptions
GranEverest intentionally focuses on a single-asset vault rather than a general-purpose money market. Users should size positions conservatively, diversify across protocols and avoid depositing funds they cannot afford to lose.
Nothing in this documentation is an offer, solicitation or recommendation to use the protocol or to take any specific financial position. Each user is responsible for their own independent evaluation of risk.
5. Contract & integration details
GranEverest is implemented as a primary vault contract plus a small execution layer on Base mainnet. For the latest production addresses, roles and configuration parameters, always refer to the Trust page and the official GitHub repository.
5.1 Network
- Network: Base mainnet (L2 on Ethereum).
- Base chain ID: 8453.
- Native asset: ETH on Base.
5.2 Core contracts & functions
- GranVaultBaseETH (vault)
- Address:
0x0d1c77349E80F4c4AE47E318A3D0723D12159E2d (see Trust for confirmation). deposit() — records ETH/WETH collateral and applies the 0.25% protocol fee.borrow(uint256 amount, address account) — borrows on behalf of the given account, provided the resulting LTV is ≤ 70%.repay(uint256 amount, address account) — repays outstanding debt and returns any extra ETH sent by the user.withdraw(uint256 amount, address account, address to) — withdraws collateral, enforcing LTV and applying the withdrawal fee.- View helpers expose user-level collateral, debt and internal accounting values.
- Execution contract (GranRouterBaseETH)
- Address: see the Trust page.
- May call the vault on behalf of users for more structured flows while respecting the same LTV and fee rules.
- Swap execution is delegated to a configurable
swapExecutor contract (for example a DEX aggregator). If execution fails or the realised price exceeds the allowed slippage, the transaction reverts and the vault state is unchanged.
5.3 Example: read user data (viem)
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
import GranVaultBaseETH from "../src/abi/GranVaultBaseETH.json";
const VAULT_ADDRESS = "0x0d1c77349E80F4c4AE47E318A3D0723D12159E2d"; // see /trust for the latest address
const client = createPublicClient({
chain: base,
transport: http("https://mainnet.base.org"),
});
export async function getUserData(user: \`0x\${string}\`) {
const result = await client.readContract({
address: VAULT_ADDRESS,
abi: GranVaultBaseETH.abi ?? GranVaultBaseETH,
functionName: "getUserData",
args: [user],
});
console.log("User data", result);
return result;
}
5.4 Example: borrow via script (viem)
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";
import GranVaultBaseETH from "../src/abi/GranVaultBaseETH.json";
const VAULT_ADDRESS = "0x0d1c77349E80F4c4AE47E318A3D0723D12159E2d"; // see /trust for the latest address
// In production, load private keys from a secure secret manager,
// never commit them to source control.
const account = privateKeyToAccount("0xYOUR_PRIVATE_KEY");
const client = createWalletClient({
account,
chain: base,
transport: http("https://mainnet.base.org"),
});
export async function borrow(amountWei: bigint, accountAddress: \`0x\${string}\`) {
const hash = await client.writeContract({
address: VAULT_ADDRESS,
abi: GranVaultBaseETH.abi ?? GranVaultBaseETH,
functionName: "borrow",
args: [amountWei, accountAddress],
});
console.log("Borrow tx hash:", hash);
return hash;
}
5.5 Events & indexing
The vault emits standard events for position changes, which can be indexed by off-chain services and analytics dashboards. Examples include events for deposits, borrows, repayments and withdrawals. Indexers can consume these events directly from Base to build history views or alerts around users' positions.
The code snippets above are illustrative only. Production systems should follow best practices for secret management, gas estimation, retry logic, logging and monitoring.
6. Security, testing & monitoring
The GranEverest vault codebase is developed with a deliberately narrow scope, repeatable processes and multiple layers of testing and review:
- Hardhat unit tests for core flows and edge cases in the vault and supporting contracts.
- A property-based / fuzz test harness for
GranVaultBaseETH, focused on LTV bounds, ETH conservation and debt behaviour under varied sequences of actions. The harness is maintained alongside the codebase and extended progressively; only the stable subset is part of the default passing test suite. - Static analysis using Slither, with filters that hide purely cosmetic items. Current results flag only expected patterns such as the same-block anti-loop equality check, guarded
rescueERC20 helpers and the router's low-level call to the configured swap executor. No critical or high-severity issues are known at this time. - Manual functional testing on Base testnet and Base mainnet using limited-size positions, including deposits, borrows, repayments, withdrawals, pause/unpause behaviour and borrow-and-swap flows.
- A consolidated test & analysis report is available as a PDF on the main landing page and on the Trust page.
The vault and router source code are verified on BaseScan, and the public GitHub repository contains all configuration required to reproduce local tests and static analysis. Anyone can clone the codebase, run the same checks and form an independent view.
Independent external review and ongoing monitoring are part of the long-term roadmap. When additional audits or formal analyses are completed, references and reports will be linked from the Trust page.
Even with these measures, smart-contract risk cannot be eliminated. Users should size positions prudently, diversify across protocols and avoid depositing funds they cannot afford to lose.
7. Responsible disclosure & contact
Security researchers, integrators and advanced users are encouraged to review the contracts and the public GitHub repository. For potential vulnerabilities or high-impact issues, please follow a responsible disclosure process:
- Contact the team privately at contact@graneverest.com with a clear description of the issue.
- Avoid publishing full exploit details or reproducible scripts until there has been a reasonable opportunity to patch or mitigate.
- Where possible, include reproduction steps, impacted scenarios and an initial assessment of severity and likelihood.
Formal bug bounty terms and dedicated bounty addresses will be published as the protocol matures and on-chain usage grows. Until then, disclosures are handled on a best-effort basis, with the goal of protecting users and the wider ecosystem.
8. Roadmap & future evolution
The initial launch focuses on a single ETH vault on Base with predictable behaviour and a narrow risk surface. Future work is planned around expanding functionality while keeping clear separation of risk between components:
- Further hardening of the existing ETH vault, including additional tests, refined monitoring and potential incremental changes to helper functions such as
rescueERC20 before supporting materially higher TVL. - Additional vaults that may route collateral into on-chain staking or other yield strategies, always with explicit per-vault caps, isolated accounting and without introducing a price-based liquidation engine.
- A multi-vault architecture where risk is compartmentalised: different strategies and vaults are kept separate so that an issue in one does not automatically affect others.
- More comprehensive public dashboards and transparency tooling for monitoring collateral, debt, LTV distributions and protocol health in real time.
- Progressive improvement of operational processes around key management, monitoring and incident response as usage grows.
These items are intentionally staged. GranEverest prioritises preserving principal and understanding risk before adding new features. New vaults or strategies will only be introduced once they can be tested, explained and monitored to the same standard as the current ETH vault.