aere-contracts/contracts/mocks/MockSinkToggle.sol
Aere Network a13a649b77
Some checks are pending
contracts-ci / Install (lockfile) → compile → full test suite (push) Waiting to run
contracts-ci / PQC known-answer tests (NIST vectors) (push) Waiting to run
contracts-ci / Coverage (scoped, with artifacts) (push) Waiting to run
Initial public release
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.
2026-07-20 01:02:37 +03:00

26 lines
960 B
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/// TEST-ONLY sink whose flush(token, amount) can be toggled to revert. Lets a test drive
/// AERE402FacilitatorPQC down its best-effort "sink flush failed" branch (which accrues a
/// tracked fee residual) and then recover the sink to prove flushResidual forwards ONLY that
/// residual. Mirrors MockSinkSimple's pull-on-flush behavior when not failing. Not for prod.
contract MockSinkToggle {
bool public fail;
uint256 public lastFlushAmount;
event Flushed(address token, uint256 amount);
function setFail(bool v) external {
fail = v;
}
function flush(address token, uint256 amount) external {
require(!fail, "sink-down");
require(IERC20(token).transferFrom(msg.sender, address(this), amount), "transfer-failed");
lastFlushAmount = amount;
emit Flushed(token, amount);
}
}