Aere Network public source. Everything here can be checked against the live chain (chain id 2800, https://rpc.aere.network). Scope note, stated up front rather than buried: consensus on chain 2800 is classical secp256k1 ECDSA QBFT. The post-quantum work in this repository is at the signature, precompile, account and transport layers. Nothing here makes the consensus post-quantum, and no document in it should be read as claiming so.
39 lines
1.4 KiB
Solidity
39 lines
1.4 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.23;
|
|
|
|
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
|
|
/// @notice Minimal market stub implementing AereInsuranceFund's
|
|
/// IAereLendingMarketForFund. Lets a test pin an EXACT debt balance so
|
|
/// the fund's clamp-then-cap ordering can be exercised at precise
|
|
/// boundaries, free of the per-second interest drift the real
|
|
/// AereLendingMarket introduces over the 7-day registration timelock.
|
|
contract MockDebtMarketForFund {
|
|
address public immutable debtToken;
|
|
mapping(address => uint256) public debt;
|
|
|
|
constructor(address _debtToken) {
|
|
debtToken = _debtToken;
|
|
}
|
|
|
|
function DEBT_TOKEN() external view returns (address) {
|
|
return debtToken;
|
|
}
|
|
|
|
function setDebt(address user, uint256 amount) external {
|
|
debt[user] = amount;
|
|
}
|
|
|
|
function debtBalance(address user) external view returns (uint256) {
|
|
return debt[user];
|
|
}
|
|
|
|
/// @notice Pulls `amount` of the debt token from the caller (the fund) and
|
|
/// reduces the stored debt, mirroring a real repay.
|
|
function repayOnBehalfOf(address account, uint256 amount) external {
|
|
require(IERC20(debtToken).transferFrom(msg.sender, address(this), amount), "pull failed");
|
|
uint256 d = debt[account];
|
|
debt[account] = amount >= d ? 0 : d - amount;
|
|
}
|
|
}
|