@@ -13,14 +13,7 @@ import {BacktestingUtils} from "./BacktestingUtils.sol";
1313abstract contract CredibleTestWithBacktesting is CredibleTest , Test {
1414 using Strings for uint256 ;
1515
16- /// @notice Execute backtesting with simple interface
17- /// @param targetContract Contract to test assertions against
18- /// @param endBlock Latest block to test (works backwards)
19- /// @param blockRange Number of blocks to test
20- /// @param assertionCreationCode Bytecode for assertion contract
21- /// @param assertionSelector Function selector to trigger
22- /// @param rpcUrl RPC URL for blockchain access
23- /// @return results Detailed backtesting results with error categorization
16+ /// @notice Execute backtesting with detailed logging
2417 function executeBacktest (
2518 address targetContract ,
2619 uint256 endBlock ,
@@ -29,26 +22,18 @@ abstract contract CredibleTestWithBacktesting is CredibleTest, Test {
2922 bytes4 assertionSelector ,
3023 string memory rpcUrl
3124 ) public returns (BacktestingTypes.BacktestingResults memory results ) {
32- // Log configuration at the start
33- console.log ("=== BACKTESTING CONFIGURATION === " );
34- console.log (string .concat ("Target contract: " , Strings.toHexString (targetContract)));
35- console.log (
36- string .concat (
37- "Block range: " ,
38- (endBlock > blockRange ? endBlock - blockRange + 1 : 1 ).toString (),
39- " to " ,
40- endBlock.toString ()
41- )
42- );
43- console.log (string .concat ("Assertion selector: " , Strings.toHexString (uint32 (assertionSelector), 4 )));
44- console.log (string .concat ("RPC URL: " , rpcUrl));
45- console.log ("================================= " );
46-
47- console.log ("=== BACKTESTING START === " );
48- console.log (string .concat ("Target contract: " , Strings.toHexString (targetContract)));
49-
5025 uint256 startBlock = endBlock > blockRange ? endBlock - blockRange + 1 : 1 ;
51- console.log (string .concat ("Block range: " , startBlock.toString (), " to " , endBlock.toString ()));
26+
27+ // Print configuration at the start
28+ console.log ("========================================== " );
29+ console.log (" BACKTESTING CONFIGURATION " );
30+ console.log ("========================================== " );
31+ console.log (string .concat ("Target Contract: " , Strings.toHexString (targetContract)));
32+ console.log (string .concat ("Block Range: " , startBlock.toString (), " to " , endBlock.toString ()));
33+ console.log (string .concat ("Assertion Selector: " , Strings.toHexString (uint32 (assertionSelector), 4 )));
34+ console.log (string .concat ("RPC URL: " , rpcUrl));
35+ console.log ("========================================== " );
36+ console.log ("" );
5237
5338 BacktestingTypes.TransactionData[] memory transactions =
5439 _fetchTransactions (targetContract, startBlock, endBlock, rpcUrl);
@@ -62,26 +47,27 @@ abstract contract CredibleTestWithBacktesting is CredibleTest, Test {
6247 }
6348
6449 for (uint256 i = 0 ; i < transactions.length ; i++ ) {
50+ // Print transaction start marker
51+ console.log ("" );
52+ console.log (string .concat ("=== TRANSACTION " , (i + 1 ).toString (), " === " ));
53+ console.log (string .concat ("Hash: " , BacktestingUtils.bytes32ToHex (transactions[i].hash)));
54+ console.log (string .concat ("Function: " , BacktestingUtils.extractFunctionSelector (transactions[i].data)));
55+ console.log ("--- " );
56+
6557 BacktestingTypes.ValidationDetails memory validation =
6658 _validateTransaction (targetContract, assertionCreationCode, assertionSelector, rpcUrl, transactions[i]);
6759
6860 if (validation.result == BacktestingTypes.ValidationResult.Success) {
6961 results.successfulValidations++ ;
70- console.log (
71- string .concat (
72- "[PASS] TX " ,
73- (i + 1 ).toString (),
74- " " ,
75- BacktestingUtils.bytes32ToHex (transactions[i].hash),
76- " " ,
77- BacktestingUtils.extractFunctionSelector (transactions[i].data)
78- )
79- );
62+ console.log ("[PASS] VALIDATION PASSED " );
8063 } else {
8164 results.failedValidations++ ;
8265 _categorizeAndLogError (i, transactions[i], validation);
8366 _incrementErrorCounter (results, validation.result);
8467 }
68+
69+ // Print transaction end marker
70+ console.log ("--- " );
8571 }
8672
8773 _printDetailedResults (startBlock, endBlock, results);
@@ -220,25 +206,14 @@ abstract contract CredibleTestWithBacktesting is CredibleTest, Test {
220206 BacktestingTypes.ValidationDetails memory validation
221207 ) private pure {
222208 string memory errorType = _getErrorTypeString (validation.result);
223- console.log (
224- string .concat (
225- "[ " ,
226- errorType,
227- "] TX " ,
228- (txIndex + 1 ).toString (),
229- " " ,
230- BacktestingUtils.bytes32ToHex (txData.hash),
231- " " ,
232- BacktestingUtils.extractFunctionSelector (txData.data)
233- )
234- );
209+ console.log (string .concat ("[ " , errorType, "] VALIDATION FAILED " ));
235210
236211 if (bytes (validation.errorMessage).length > 0 ) {
237212 console.log (string .concat (" Error: " , validation.errorMessage));
238213 }
239214
240215 if (validation.isProtocolViolation) {
241- console.log (" !!! PROTOCOL VIOLATION DETECTED " );
216+ console.log (" !!! PROTOCOL VIOLATION DETECTED !!! " );
242217 }
243218 }
244219
@@ -283,20 +258,27 @@ abstract contract CredibleTestWithBacktesting is CredibleTest, Test {
283258 BacktestingTypes.BacktestingResults memory results
284259 ) private pure {
285260 console.log ("" );
286- console.log ("=== DETAILED BACKTESTING RESULTS === " );
261+ console.log ("========================================== " );
262+ console.log (" BACKTESTING SUMMARY " );
263+ console.log ("========================================== " );
287264 console.log (string .concat ("Block Range: " , startBlock.toString (), " - " , endBlock.toString ()));
288265 console.log (string .concat ("Total Transactions: " , results.totalTransactions.toString ()));
289266 console.log (string .concat ("Successful Validations: " , results.successfulValidations.toString ()));
290267 console.log (string .concat ("Failed Validations: " , results.failedValidations.toString ()));
291- console.log ("" );
292- console.log ("=== ERROR BREAKDOWN === " );
293- console.log (string .concat ("Protocol Violations (Assertion Failures): " , results.assertionFailures.toString ()));
294- console.log (string .concat ("Transaction Reverts: " , results.transactionReverts.toString ()));
295- console.log (string .concat ("Fork Errors: " , results.forkErrors.toString ()));
296- console.log (string .concat ("Invalid Transactions: " , results.invalidTransactions.toString ()));
297- console.log (string .concat ("Gas Limit Exceeded: " , results.gasLimitExceeded.toString ()));
298- console.log (string .concat ("State Mismatches: " , results.stateMismatches.toString ()));
299- console.log (string .concat ("Unknown Errors: " , results.unknownErrors.toString ()));
268+
269+ if (results.failedValidations > 0 ) {
270+ console.log ("" );
271+ console.log ("=== ERROR BREAKDOWN === " );
272+ console.log (
273+ string .concat ("Protocol Violations (Assertion Failures): " , results.assertionFailures.toString ())
274+ );
275+ console.log (string .concat ("Transaction Reverts: " , results.transactionReverts.toString ()));
276+ console.log (string .concat ("Fork Errors: " , results.forkErrors.toString ()));
277+ console.log (string .concat ("Invalid Transactions: " , results.invalidTransactions.toString ()));
278+ console.log (string .concat ("Gas Limit Exceeded: " , results.gasLimitExceeded.toString ()));
279+ console.log (string .concat ("State Mismatches: " , results.stateMismatches.toString ()));
280+ console.log (string .concat ("Unknown Errors: " , results.unknownErrors.toString ()));
281+ }
300282 console.log ("" );
301283
302284 uint256 successRate =
0 commit comments