Some checks failed
CI/CD Pipeline / Security Scanning (push) Has been cancelled
CI/CD Pipeline / Solidity Contracts (push) Has been cancelled
CI/CD Pipeline / Lint and Format (push) Has been cancelled
CI/CD Pipeline / Terraform Validation (push) Has been cancelled
CI/CD Pipeline / Kubernetes Validation (push) Has been cancelled
Validation / validate-genesis (push) Has started running
Validation / validate-terraform (push) Has been cancelled
Validation / validate-kubernetes (push) Has been cancelled
Validation / validate-smart-contracts (push) Has been cancelled
Validation / validate-security (push) Has been cancelled
Validation / validate-documentation (push) Has been cancelled
Extends AaveQuotePushFlashReceiver with before/after swap collateral steps, env-driven run scripts, forkproof parity, and scoped forge tests for supply/toggle callback ordering. Co-authored-by: Cursor <cursoragent@cursor.com>
68 lines
2.9 KiB
Solidity
68 lines
2.9 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import {Vm} from "forge-std/Vm.sol";
|
|
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
|
|
import {AaveQuotePushFlashReceiver} from "../../../contracts/flash/AaveQuotePushFlashReceiver.sol";
|
|
|
|
/**
|
|
* @title QuotePushCollateralEnv
|
|
* @notice Build `QuotePushParams.collateral` from optional env vars for mainnet quote-push scripts.
|
|
*
|
|
* Env (all optional — empty when counts are zero / unset):
|
|
* QUOTE_PUSH_COLLATERAL_SUPPLY_COUNT
|
|
* QUOTE_PUSH_COLLATERAL_SUPPLY_{i}_ASSET
|
|
* QUOTE_PUSH_COLLATERAL_SUPPLY_{i}_AMOUNT_RAW
|
|
*
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_COUNT
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_{i}_ASSET
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_{i}_ENABLE (1 = true, 0 = false)
|
|
*
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_AFTER_COUNT
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_AFTER_{i}_ASSET
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_AFTER_{i}_ENABLE
|
|
*
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_UNWIND_COUNT
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_UNWIND_{i}_ASSET
|
|
* QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_UNWIND_{i}_ENABLE
|
|
*/
|
|
library QuotePushCollateralEnv {
|
|
Vm private constant VM = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));
|
|
|
|
function loadCollateralParams() internal view returns (AaveQuotePushFlashReceiver.CollateralParams memory params) {
|
|
params.supplyBeforeSwap = _loadSupplies();
|
|
params.toggleBeforeSwap = _loadToggles("QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE");
|
|
params.toggleAfterSwap = _loadToggles("QUOTE_PUSH_COLLATERAL_TOGGLE_AFTER");
|
|
params.toggleBeforeUnwind = _loadToggles("QUOTE_PUSH_COLLATERAL_TOGGLE_BEFORE_UNWIND");
|
|
}
|
|
|
|
function _loadSupplies()
|
|
private
|
|
view
|
|
returns (AaveQuotePushFlashReceiver.CollateralSupplyStep[] memory steps)
|
|
{
|
|
uint256 n = VM.envOr("QUOTE_PUSH_COLLATERAL_SUPPLY_COUNT", uint256(0));
|
|
steps = new AaveQuotePushFlashReceiver.CollateralSupplyStep[](n);
|
|
for (uint256 i = 0; i < n; ++i) {
|
|
string memory prefix = string.concat("QUOTE_PUSH_COLLATERAL_SUPPLY_", Strings.toString(i), "_");
|
|
steps[i].asset = VM.envAddress(string.concat(prefix, "ASSET"));
|
|
steps[i].amount = VM.envUint(string.concat(prefix, "AMOUNT_RAW"));
|
|
}
|
|
}
|
|
|
|
function _loadToggles(string memory groupPrefix)
|
|
private
|
|
view
|
|
returns (AaveQuotePushFlashReceiver.CollateralToggleStep[] memory steps)
|
|
{
|
|
string memory countKey = string.concat(groupPrefix, "_COUNT");
|
|
uint256 n = VM.envOr(countKey, uint256(0));
|
|
steps = new AaveQuotePushFlashReceiver.CollateralToggleStep[](n);
|
|
for (uint256 i = 0; i < n; ++i) {
|
|
string memory prefix = string.concat(groupPrefix, "_", Strings.toString(i), "_");
|
|
steps[i].asset = VM.envAddress(string.concat(prefix, "ASSET"));
|
|
steps[i].useAsCollateral = VM.envUint(string.concat(prefix, "ENABLE")) != 0;
|
|
}
|
|
}
|
|
}
|