Definitions for every abbreviation, acronym, and complex term used across the PACT codebase and documentation.
ABI — Application Binary Interface. A JSON description of a smart contract's public functions and events, telling external callers how to encode/decode calls. Used by wagmi and viem to generate type-safe contract interactions.
API — Application Programming Interface. A defined way for two systems to communicate. In PACT, "JSON API agent" refers to Somnia agents that fetch data from HTTP APIs (e.g. DeFiLlama, Uniswap, Etherscan).
APR — Annual Percentage Rate. The yearly cost of borrowing, expressed as a percentage of the principal, not compounded. PACT's base rate is 6% APR. Covenants can reduce it to as low as 1%.
bps — Basis Points. One hundredth of a percentage point (1 bps = 0.01%). Used to express small changes in rates and price deviations. "200 bps" = 2%. The ReactiveHandler triggers emergency checks on a 200 bps (2%) price drop.
CEX — Centralized Exchange. A cryptocurrency exchange operated by a company (e.g. Binance, Coinbase). Prices on CEXes are used as a reference against DEX prices to detect divergence in Covenant C2.4.
CFTC — Commodity Futures Trading Commission. A U.S. federal regulator overseeing derivatives markets, including crypto futures. Monitored under Covenant C5.2 (Regulatory Climate).
DEX — Decentralized Exchange. A peer-to-peer token exchange running on-chain with no central operator (e.g. Uniswap, Curve). PACT uses DEX prices for collateral valuation.
DeFi — Decentralized Finance. Financial services (lending, trading, derivatives) operated by smart contracts rather than institutions, accessible to anyone with a wallet.
EOA — Externally Owned Account. A blockchain address controlled by a private key (a normal user wallet), as opposed to a contract address. In security contexts, a single EOA holding admin keys is a risk — one compromised key means total protocol loss.
ERC20 — Ethereum Request for Comments 20. The standard interface for fungible tokens on EVM chains. USDC, stETH, and the collateral token in PACT are all ERC20 tokens.
HF — Health Factor. The ratio of a position's collateral value (adjusted for LTV) to its outstanding debt. A health factor below 1.0 means the position is undercollateralized and eligible for liquidation. PACT liquidates at HF < 1.0; ReactiveHandler triggers emergency checks when HF < 1.2.
JSON — JavaScript Object Notation. A lightweight text format for data exchange. Somnia's JSON API agent fetches data from HTTP endpoints that return JSON (e.g. DeFiLlama TVL data, Uniswap pool depth).
LP — Liquidity Provider. Someone who deposits tokens into a DEX pool to enable trading in exchange for fees. LP withdrawal events are monitored in Covenant C2.1 (DEX Liquidity Depth).
LLM — Large Language Model. An AI model trained on text that can read, reason about, and generate natural language. PACT uses Somnia's on-chain LLM (Qwen3-30B) to assess covenant status from raw evidence. LLM output is consensus-proven by 847 validators.
LST — Liquid Staking Token. A token representing staked ETH that can be used elsewhere in DeFi (e.g. stETH from Lido, rETH from Rocket Pool). LSTs carry depeg risk if withdrawal queues grow — monitored under Covenant C2.3.
LTV — Loan-to-Value. The maximum percentage of your collateral value you can borrow. Base LTV in PACT is 80% (you can borrow $80 for every $100 of collateral). Covenants can raise it to 95%.
RPC — Remote Procedure Call. A protocol for calling functions on a remote server. In blockchain contexts, an RPC endpoint is the URL your app uses to read and write to the chain. Somnia RPC: https://dream-rpc.somnia.network.
SEC — Securities and Exchange Commission. U.S. federal regulator for securities markets. Enforcement actions against crypto assets cause immediate price impacts — monitored under Covenant C5.2.
SSR — Server-Side Rendering. Generating HTML on the server before sending it to the browser. Next.js App Router uses SSR by default, improving initial load speed.
STT — Somnia Testnet Token. The native gas token of the Somnia testnet (Chain ID 50312), used to pay transaction fees.
TVL — Total Value Locked. The sum of all assets deposited across DeFi protocols, expressed in USD. A drop in TVL signals capital leaving DeFi — monitored in Covenant C5.1.
TWAP — Time-Weighted Average Price. An average price calculated over a time window (e.g. last 30 minutes), used in DEX oracles to resist flash loan manipulation. The longer the window, the harder to manipulate.
USDC — USD Coin. A fiat-backed stablecoin issued by Circle, pegged to $1. The borrow asset in PACT. Its peg and issuer health are monitored by Covenant C5.3 (mandatory).
USDT — USD Tether. A fiat-backed stablecoin issued by Tether. Also monitored under Covenant C5.3.
WAD — Wei As a Denominator (or "fixed-point unit"). A scaling convention where 1 WAD = 10^18. All percentages in PACT smart contracts are WAD-scaled: 80% LTV = 0.80e18, 6% APR = 0.06e18. This avoids floating-point errors in Solidity.
Audit — A professional security review of a smart contract's source code, conducted by a specialized firm (e.g. Trail of Bits, OpenZeppelin, Certora). Audits identify vulnerabilities before deployment. Covenant C1.5 requires a recent audit covering the deployed code.
Breach — When a covenant condition is no longer met and its status drops below GREEN. A breach triggers a status update (AMBER, ORANGE, or RED) and may cause the protocol to reduce the borrower's LTV or increase their rate.
Bug Bounty — A program offering financial rewards to security researchers who find and responsibly disclose vulnerabilities in a protocol. Monitored under Covenant C1.6.
Collateral — Assets pledged as security for a loan. In PACT, borrowers deposit stETH or similar tokens as collateral. If they fail to repay, the collateral is seized and sold in a liquidation.
Collateral Integrity — Category 1 covenants. Assessments of the safety of the protocol or asset being posted as collateral (oracle design, upgrade controls, audit status, etc.).
Covenant — A voluntary commitment made by a borrower about conditions they agree to maintain (e.g. "my collateral protocol has an active audit"). In exchange for keeping covenants, borrowers receive better loan terms. Borrowed from traditional finance, where loan covenants are conditions written into debt agreements.
Depeg — When a token that should track a fixed price (e.g. stETH ≈ ETH, USDC ≈ $1) trades at a meaningful discount or premium. Depeg events can trigger mass liquidations of positions using the depegged token as collateral.
Flash Loan — A loan that must be borrowed and repaid within the same transaction. Used in exploits to temporarily acquire large amounts of capital (e.g. to manipulate prices or vote in governance) without providing collateral. The Beanstalk exploit ($182M) used flash-loaned governance tokens.
Funding Rate — In perpetual futures markets, the periodic payment between long and short positions to keep the futures price anchored to the spot price. Extremely positive funding (longs paying shorts) signals an over-leveraged market. Monitored under Covenant C2.2.
Governance — The process by which protocol rules are changed, typically through token-weighted voting. Concentrated governance (one wallet with >20% of votes) is a risk monitored under Covenant C4.1.
Grace Period — A window of time after a covenant breach before any collateral action is taken. In PACT, an AMBER status gives borrowers 24 hours to resolve the situation before terms are adjusted. This distinguishes PACT from protocols that liquidate immediately.
Health Factor — See HF above.
Liquidation — Forced closure of a position when the collateral value falls below the liquidation threshold. A third party (liquidator) repays the debt and receives the collateral plus a bonus. In PACT, the liquidation threshold is 90% LTV and the bonus is 5%.
Liquidation Bonus — The extra percentage of collateral a liquidator receives for repaying a borrower's debt. PACT's bonus is 5%, meaning a liquidator who repays $100 of debt receives $105 of collateral.
Liquidation Threshold — The LTV at which a position becomes eligible for liquidation. PACT's threshold is 90%. Above this, the position is liquidated regardless of covenant status.
Liquidity Provider — See LP above.
Loop Borrowing / Recursive Leverage — A strategy where borrowed funds are used to buy more of the collateral asset, re-deposited for another loan, and repeated. This creates amplified leverage that collapses violently during price drops. Monitored and penalized under Covenant C3.1.
Multisig — Multi-signature wallet. A smart contract that requires multiple private keys (e.g. 5 of 9) to authorize a transaction. Used to distribute admin control and prevent a single compromised key from taking over a protocol. Required by Covenant C1.2.
Open Interest — The total value of all outstanding derivative positions (futures, options) in a market. Rising open interest alongside extreme funding rates signals a crowded, fragile trade.
Oracle — A service that provides real-world data (prices, rates) to smart contracts. Because smart contracts cannot natively access the internet, oracles are critical infrastructure — and a common attack vector. Covenant C1.1 requires at least two independent oracle sources.
Peg — The target price a stablecoin or derivative token is designed to track. stETH is pegged to ETH; USDC is pegged to $1.
Perpetual Futures (Perps) — Derivative contracts that track an asset's price with no expiry date. Traders pay or receive funding rates to keep the contract price close to spot. Monitored in Covenant C2.2.
Position — A borrower's record in PACT, containing their collateral, debt, current LTV, interest rate, and active covenants. Identified by a positionId (uint256).
Rug Pull / Exit Scam — When a protocol's team abandons the project and takes user funds. Anonymous teams have a significantly higher rug-pull rate than doxxed teams. Mitigated by Covenant C4.4 (Team Transparency).
Share-Based Accounting — A method where lenders receive "shares" of the pool rather than a fixed token balance. As interest accrues, each share represents more of the total pool. Used in PactVault so lenders automatically earn interest without any transactions.
Slippage — The difference between the expected price of a trade and the actual price, caused by limited liquidity. Large liquidations into thin markets cause heavy slippage, reducing the protocol's ability to recover debt value.
Staking — Locking ETH (or other tokens) to participate in network validation, earning rewards. Liquid staking lets users stake while keeping a tradeable token (LST) representing their position.
Timelock — A smart contract mechanism that enforces a delay (e.g. 48 hours) between when a change is proposed and when it can be executed. Gives the community time to react to potentially malicious upgrades. Required by Covenant C1.2.
TradFi — Traditional Finance. Banks, insurance, hedge funds, and other conventional financial institutions. PACT's covenant system is inspired by TradFi loan covenants, bringing similar qualitative credit assessment to DeFi.
Withdrawal Queue — In liquid staking protocols (Lido, Rocket Pool), the backlog of pending redemption requests. A large and growing queue weakens the LST peg and signals stress in the staking system. Monitored under Covenant C2.3.
AgentDispatcher — The Phase 3 contract (AgentDispatcher.sol) that routes covenant checks to the appropriate Somnia agent (JSON API or LLM Website). It stores raw evidence on-chain and forwards it to AssessmentAgent for LLM classification. It does not make judgments itself — it only fetches data.
AssessmentAgent — The Phase 4 contract (AssessmentAgent.sol) that receives raw evidence from AgentDispatcher, sends it to Somnia's on-chain LLM (inferString), parses the verdict (GREEN/AMBER/ORANGE/RED), and updates CovenantPosition. It also writes the LLM's reasoning back on-chain.
CovenantPosition — The Phase 2 contract (CovenantPosition.sol) that tracks which covenants each position has accepted and their current status. When any status changes, it automatically calls TermCalculator and pushes updated LTV/rate to PactVault.
CovenantRegistry — The Phase 2 contract (CovenantRegistry.sol) that stores the definition of all 22 covenants — their codes, reward types, and reward values. Pre-seeded in the constructor. acceptCovenants reverts if any code is not active in this registry.
CAVE — A live collateral token used in PACT's testnet deployment. "Cave Protocol Token" (0x3fb212b4a58e49c07bf68140c0222617b9484cb7, deployed 2026-06-07). When used as collateral, Scout and the keeper oracle run real Aave V3 health checks and return honest verdicts — C1.5 and C4.4 are RED (no audit, no public team for a testnet mock token). Contrast with DREAM which triggers curated demo data. Oracle price: $1.20. Supply: 10,000 CAVE (deployer).
DREAM — The demo collateral token used in PACT's testnet deployment. DREAM is the governance token of DreamSwap, a fictional AMM built on Somnia. It represents the canonical PACT use case: a builder holds a protocol governance token and wants to borrow USDC against it without selling, while AI agents continuously monitor the protocol's health. Oracle price: $0.40 per DREAM. Pre-approved in TokenRegistry with fitness score 87. When used as collateral, Scout and the keeper oracle return curated GREEN verdicts (ideal borrower demo).
DreamSwap — A fictional AMM (Automated Market Maker) on Somnia, used as the issuing protocol for the DREAM demo collateral token. Its Active Development covenant (C1.3) is shown as AMBER in the demo — GitHub commits dropped below the 3/30-day threshold — demonstrating PACT's graduated response (warn before penalizing).
Keeper Oracle — A Node.js process (scripts/covenant-keeper.js or frontend/app/api/assess/route.ts) that bypasses the broken Somnia agent platform stub by reading live data directly (CoinGecko for peg checks, Aave V3 on Ethereum mainnet for health factors) and writing covenant assessments on-chain. The deployer wallet is authorized as assessmentAgent on CovenantPosition and assessmentLlm on AgentDispatcher via setup-keeper.js. Applies demo/live branching: DREAM collateral → curated GREEN verdicts; any other token → real API data, honest results.
Emergency Bypass — A mechanism in AgentDispatcher that allows ReactiveHandler or the owner to trigger a covenant check immediately, bypassing the normal time throttle. Used when a price alert fires and positions may be at risk.
Emergency Dispatch — The call chain triggered when ReactiveHandler detects a price drop: for each registered position with a low health factor, it calls AgentDispatcher.emergencyDispatch(), which immediately runs covenant checks regardless of the normal interval.
Evidence — The struct stored on-chain by AgentDispatcher after each covenant check:
checkedBlock — block number when check ran
checkedTimestamp — Unix timestamp of the check
rawResponse — bytes from the agent (API data, scraped text)
summary — string written by AssessmentAgent (LLM reasoning)
success — whether the data fetch succeeded
Grace Period — See DeFi Concepts above.
PACT Score — A frontend-computed number (0–100) that summarizes the health of all covenants on a position. Calculated by averaging weighted covenant statuses: GREEN=100, AMBER=50, ORANGE=25, RED=0. Not stored on-chain — derived from on-chain status reads.
PACT Scout — A frontend feature that assesses a borrower's wallet and collateral before they open a position, calling POST /api/scout (no on-chain writes, no user gas). For DREAM collateral: plays a curated animation (5 GREEN + 1 AMBER) representing an ideal borrower. For any other token: runs real Aave V3 health checks and returns honest verdicts. Pre-assessment lets users see which covenants they qualify for and what terms they'll receive, without committing to a loan.
PactVault — The Phase 1 core contract (PactVault.sol) handling all lending operations: collateral deposit, borrowing, repayment, lender share management, liquidation, and term storage per position.
ReactiveHandler — The Phase 5 contract (ReactiveHandler.sol) that subscribes to price oracle events via the Somnia reactive precompile. When prices drop 2%+ it checks registered positions and triggers emergency covenant checks for any at risk.
Reasoning Log — The PACT frontend page (/reasoning-log/[posId]) that displays every AssessmentCompleted event for a position, showing the exact LLM output stored on-chain. This is PACT's key differentiator — every AI decision is auditable and immutable.
TermCalculator — The Phase 2 contract (TermCalculator.sol) that computes adjusted LTV and APR from a set of compliant (GREEN) covenant codes. Maximum LTV is 95%; minimum rate is 1%. Called automatically by CovenantPosition whenever covenant statuses change.
TermExecutor — The Phase 5 contract (TermExecutor.sol) that uses inferToolsChat to run a multi-round LLM conversation. The LLM can call three on-chain tools (getPositionData, getCompliantCovenants, proposeUpdateTerms) to autonomously adjust a position's terms. A secondary authority to the covenant system.
NotificationRegistry — The Phase 5 contract (NotificationRegistry.sol) that maps wallet addresses to bytes32 tokens. The Telegram bot uses these tokens to link wallet events to chat IDs, enabling position alerts without exposing wallet addresses to the bot.
TokenRegistry — The Phase 6 contract (TokenRegistry.sol) that dynamically assesses whether an ERC20 token is fit to be used as collateral in PACT. It dispatches a Qwen3-30B LLM agent to evaluate the token's protocol across seven risk dimensions, assigns a fitness score (0–100), and maps that score to a status (APPROVED, CONDITIONAL, or BLOCKED) and an LTV cap. PactVault reads this registry on every deposit and borrow. Re-assessments fire every 7,000 blocks (~24h), or immediately via forceReassessment().
Token Fitness Score — A number from 0 to 100 assigned to a collateral token by TokenRegistry after an LLM agent assessment. Each of seven criteria contributes ~14 points: DEX liquidity, contract verification, audit recency, active development, team transparency, governance concentration, and insider selling signals. Score 80+ = APPROVED (no additional LTV cap). Score 60–79 = APPROVED (70% LTV cap). Score 40–59 = CONDITIONAL (60% cap + mandatory covenants). Score 20–39 = CONDITIONAL (50% cap + more mandatory covenants). Score below 20 = BLOCKED.
Token Picker — A UI component on the PACT borrow page that detects which supported collateral tokens (DREAM, CAVE) the connected wallet holds by calling balanceOf for each. If the wallet has only one token, it displays a badge showing which token is selected. If the wallet holds multiple tokens, it shows a radio selector so the user can choose which to collateralize with before Scout runs. Replaced the earlier Token Fitness Badge component.
CONDITIONAL (token status) — A TokenRegistry.TokenStatus value assigned when a token's fitness score is between 20 and 59. The token can be used as collateral but with a reduced LTV cap (50% or 60%) and mandatory covenants (at minimum C1.5 Audit Recency and C4.4 Team Transparency). Distinct from the per-covenant AMBER/ORANGE statuses — this is a token-level classification, not a covenant-level one.
BLOCKED (token status) — A TokenRegistry.TokenStatus value assigned when a token's fitness score falls below 20 or the LLM explicitly returns "STATUS: BLOCKED". No new deposits are accepted. The owner can also set this directly via blockToken(token, reason) for emergency response. Existing positions are not automatically closed — they continue until repaid or liquidated.
Covenant Status — The five-state classification applied to each covenant on each position:
| Value | Name | Meaning |
|---|---|---|
| 0 | PENDING | Not yet assessed by an agent |
| 1 | GREEN | Condition met — full reward applies |
| 2 | AMBER | Minor issue detected — 24h grace period |
| 3 | ORANGE | Significant issue — terms begin adjusting |
| 4 | RED | Breach confirmed — full penalty applies |
| 5 | INACTIVE | Covenant removed from this position |
Agent — A Somnia-native computation unit that executes off-chain tasks (API calls, website scraping, LLM inference) and delivers results back to a smart contract via an async callback, with results proven by validator consensus.
Agent Swarm — PACT's collection of agents running simultaneously across multiple covenants and positions. Each covenant check is an independent agent call; multiple can run in parallel.
inferString — Somnia's synchronous-style LLM API for smart contracts. Takes a prompt string, runs it through Qwen3-30B across all validators, and returns the consensus text output. Used by AssessmentAgent to classify covenant status from raw evidence.
inferToolsChat — Somnia's advanced multi-round LLM API that allows the model to call on-chain "tools" (functions) during a conversation. Used by TermExecutor — the LLM reads position data, reasons about appropriate terms, and calls proposeUpdateTerms directly on-chain.
JSON API Agent — A Somnia agent type that fetches data from HTTP JSON endpoints and returns the response bytes on-chain. Cost: ~$0.03 per validator call. Used for quantitative covenant checks (prices, liquidity depth, health factors).
LLM Website Agent — A Somnia agent type that navigates to a URL, reads its content, and uses an LLM to interpret it. Cost: ~$0.10 per validator call. Used for qualitative covenant checks (audit reports, GitHub repos, team pages, news).
Qwen3-30B — The LLM model running on Somnia's validator network. A 30-billion parameter open-source model used for all inferString and inferToolsChat calls in PACT.
Reactive Precompile — A built-in Somnia contract at address 0x0100 (SOMNIA_EXT) that enables smart contracts to subscribe to on-chain events and be called back automatically when those events fire. Used by ReactiveHandler to subscribe to oracle price updates.
Reactive Subscriptions — Event subscriptions set up via the reactive precompile. In PACT: ReactiveHandler.subscribeToOracle() subscribes to PriceSet events; AgentDispatcher.setupReactiveSubscriptions() subscribes to LST Transfer events. These calls revert in Foundry tests — they only work on Somnia.
Somnia — A high-throughput EVM-compatible blockchain with a built-in AI agent execution layer. Chain ID: 50312 (testnet). Enables on-chain LLM inference, reactive event subscriptions, and consensus-proven agent results.
Somnia Agentathon — The hackathon for which PACT was built, focused on building applications using Somnia's on-chain AI agent capabilities.
Validator — A node in the Somnia network that independently executes agent tasks and votes on the result. Somnia has 847 validators. Agent results are only accepted when the supermajority agrees — this is what makes LLM outputs "consensus-proven."
Consensus-Proven — When 847 Somnia validators independently run the same LLM prompt and reach the same output. Temperature=0 and a fixed seed make outputs deterministic, so consensus is always reached. This means on-chain LLM results are as trustworthy as on-chain transactions.
Anvil — A local Ethereum development node included in Foundry. Used for running PACT's interaction scripts (Interact.s.sol) locally before deploying to Somnia testnet.
cast — Foundry's command-line tool for interacting with deployed contracts: reading state, sending transactions, decoding calldata.
ethers.js — A JavaScript library for interacting with Ethereum-compatible chains. Used in the PACT Telegram bot (backend/notification-bot/index.js) to listen for contract events and send notifications.
forge — Foundry's build and test tool. Compiles Solidity, runs the test suite, and executes deployment scripts.
Foundry — A fast, Rust-based Solidity development toolkit. PACT uses it for compilation, testing (126 tests), and deployment scripting.
Next.js — A React framework for building web applications. PACT's frontend uses Next.js 14 with the App Router (file-based routing, SSR by default).
OpenZeppelin — A library of audited, reusable Solidity contracts. PACT uses it for ERC20 token standards, ReentrancyGuard (prevents reentrancy attacks), and Ownable (access control).
RainbowKit — A React library that provides wallet connection UI (the "Connect Wallet" button and modal) supporting MetaMask, WalletConnect, Coinbase Wallet, and others.
TanStack Query (React Query) — An async state management library for React. Used in the PACT frontend to handle loading, caching, and refetching of contract reads.
Tailwind CSS — A utility-first CSS framework. Each style is applied via class names (e.g. text-sm, rounded-xl). PACT's design tokens (colors, fonts) are defined in tailwind.config.ts.
viem — A TypeScript library for Ethereum. Handles low-level tasks: ABI encoding/decoding, transaction building, RPC communication. wagmi uses viem under the hood.
wagmi — A React hooks library built on top of viem. Provides hooks like useReadContract, useWriteContract, useAccount for interacting with contracts from React components.
bytes32 — A fixed-size 32-byte value in Solidity. PACT uses keccak256("C1.2") to convert human-readable covenant codes into bytes32 identifiers for gas-efficient on-chain storage and comparison.
calldata — Read-only input data passed to a smart contract function. More gas-efficient than memory for function arguments that are not modified.
immutable — A Solidity variable that can only be set once (in the constructor) and is then permanently embedded in the contract bytecode. More gas-efficient than storage for values that never change (e.g. contract addresses set at deploy time).
keccak256 — Ethereum's primary hash function (a variant of SHA-3). Used throughout PACT to convert covenant code strings (e.g. "C1.2") into compact bytes32 identifiers.
modifier — A Solidity function decorator that adds pre/post conditions to a function. TermExecutor uses the executingTools modifier to ensure proposeUpdateTerms can only be called during an active LLM tool execution session.
nonReentrant — An OpenZeppelin modifier that prevents reentrancy attacks — a class of exploit where an attacker's contract re-enters a function before it finishes executing. Applied to all state-changing functions in PactVault.
Ownable — An OpenZeppelin contract that adds owner() and transferOwnership() to a contract. The owner gets exclusive access to admin functions (e.g. setting contract addresses, registering covenants).
precompile — A contract address with special built-in behavior at the protocol level, not deployed Solidity code. Somnia's reactive precompile at address(0x0100) enables event subscriptions directly from smart contracts.
ReentrancyGuard — An OpenZeppelin contract that adds the nonReentrant modifier. See nonReentrant above.
storage — Persistent data stored on the blockchain (expensive). Contrast with memory (temporary, exists only during a transaction) and calldata (read-only input).
try/catch — Solidity's error handling mechanism for external calls. Used in ReactiveHandler._dispatchEmergencyChecks() so a failed agent call on one position doesn't revert the whole emergency check loop.
via_ir — A Foundry/Solc compiler setting that routes compilation through an intermediate representation (IR). Required for Interact.s.sol because it is large and would otherwise hit Solidity's stack depth limit. Set in foundry.toml — do not remove.
WAD math — See WAD in Acronyms section. The convention of expressing all percentages as 1e18-scaled integers in Solidity. Always multiply before dividing to preserve precision: (amount * rateWad) / 1e18, never amount * (rateWad / 1e18).
PACT — Covenant-Native Lending on Somnia — Somnia Agentathon 2026