- Add staking/unstaking actions to fuzzing scenarios (stake every 3rd trade) - Implement snatching logic when stake pool reaches capacity (uses max tax rate) - Add configurable parameters: - buyBias: Control buy vs sell ratio (0-100%) - stakingBias: Control stake vs unstake ratio (0-100%) - tradesPerRun: Configure number of trades per scenario - staking: Enable/disable staking entirely - Simplify to single trading strategy (_executeRandomLargeTrades) - Fix memory issues by recording only every 5th trade to CSV - Track staking metrics (stakes attempted/succeeded, snatches attempted/succeeded) - Update CLAUDE.md with new fuzzing parameters and usage examples - Clean up old TODO files and unused code 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
35 lines
1.3 KiB
Solidity
35 lines
1.3 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import "forge-std/Test.sol";
|
|
import "forge-std/Vm.sol";
|
|
|
|
/**
|
|
* @title CSVHelper
|
|
* @dev Library for managing CSV data in Solidity, including converting values to strings and writing CSV data.
|
|
*/
|
|
library CSVHelper {
|
|
/**
|
|
* @notice Creates a standard CSV header for liquidity position data.
|
|
* @return The CSV header as a string.
|
|
*/
|
|
function createPositionsHeader() internal pure returns (string memory) {
|
|
return
|
|
"precedingAction, currentTick, floorTickLower, floorTickUpper, floorLiquidity, anchorTickLower, anchorTickUpper, anchorLiquidity, discoveryTickLower, discoveryTickUpper, discoveryLiquidity, token0isWeth, percentageStaked, avgTaxRate";
|
|
}
|
|
|
|
function createTimeSeriesHeader() internal pure returns (string memory) {
|
|
return "time, price, harbTotalSupply, supplyChange, stakeOutstandingShares, avgTaxRate, sentiment, taxCollected";
|
|
}
|
|
|
|
/**
|
|
* @notice Appends new CSV data to the existing CSV string.
|
|
* @param csv The current CSV string.
|
|
* @param newRow The new row to append.
|
|
* @return The updated CSV string.
|
|
*/
|
|
function appendRow(string memory csv, string memory newRow) internal pure returns (string memory) {
|
|
return string(abi.encodePacked(csv, "\n", newRow));
|
|
}
|
|
|
|
}
|