File tree Expand file tree Collapse file tree 3 files changed +49
-0
lines changed
Expand file tree Collapse file tree 3 files changed +49
-0
lines changed Original file line number Diff line number Diff line change @@ -71,6 +71,26 @@ abstract contract Assertion is Credible, StateChanges {
7171 triggerRecorder.registerBalanceChangeTrigger (fnSelector);
7272 }
7373
74+ /// @notice Registers an onFnCall trigger for a specific adopter selector.
75+ /// @param fnSelector The function selector of the assertion function.
76+ /// @param triggerSelector The adopter function selector to watch.
77+ function registerFnCallTrigger (bytes4 fnSelector , bytes4 triggerSelector ) internal view {
78+ triggerRecorder.registerFnCallTrigger (fnSelector, triggerSelector);
79+ }
80+
81+ /// @notice Registers a trigger that fires once after the transaction completes.
82+ /// @param fnSelector The function selector of the assertion function.
83+ function registerTxEndTrigger (bytes4 fnSelector ) internal view {
84+ triggerRecorder.registerTxEndTrigger (fnSelector);
85+ }
86+
87+ /// @notice Registers a trigger that fires when the given token's balances change.
88+ /// @param fnSelector The function selector of the assertion function.
89+ /// @param token The ERC20 token address to watch.
90+ function registerErc20ChangeTrigger (bytes4 fnSelector , address token ) internal view {
91+ triggerRecorder.registerErc20ChangeTrigger (fnSelector, token);
92+ }
93+
7494 /// @notice Registers the desired assertion spec. Must be called within the constructor.
7595 /// The assertion spec defines what subset of precompiles are available.
7696 /// Can only be called once. For an assertion to be valid, it needs a defined spec.
Original file line number Diff line number Diff line change @@ -93,6 +93,17 @@ interface PhEvm {
9393 uint256 callIndex;
9494 }
9595
96+ /// @notice Context for an onFnCall-triggered assertion invocation.
97+ /// @dev Only valid inside an assertion function triggered by registerFnCallTrigger.
98+ struct TriggerContext {
99+ /// @notice The adopter selector that triggered this assertion invocation.
100+ bytes4 selector;
101+ /// @notice Call index for constructing a PreCall fork.
102+ uint256 callStart;
103+ /// @notice Call index for constructing a PostCall fork.
104+ uint256 callEnd;
105+ }
106+
96107 /// @notice Fork to the state before the assertion-triggering transaction
97108 /// @dev Allows inspection of pre-transaction state for comparison
98109 function forkPreTx () external ;
@@ -259,6 +270,10 @@ interface PhEvm {
259270 /// @return txObject The transaction data struct
260271 function getTxObject () external view returns (TxObject memory txObject );
261272
273+ /// @notice Returns the current onFnCall trigger context.
274+ /// @dev Reverts when called outside an onFnCall-triggered assertion execution.
275+ function context () external view returns (TriggerContext memory );
276+
262277 /// @notice Returns canonical Solidity key encodings h(key) for keys
263278 /// whose mapping entry at baseSlot was written during the tx.
264279 /// @dev Best-effort heuristic: traces KECCAK256 -> SSTORE provenance in the
Original file line number Diff line number Diff line change @@ -31,4 +31,18 @@ interface TriggerRecorder {
3131 /// if the assertion adopter is called.
3232 /// @param fnSelector The function selector of the assertion function.
3333 function registerCallTrigger (bytes4 fnSelector ) external view ;
34+
35+ /// @notice Registers a trigger that fires once per matching adopter call.
36+ /// @param fnSelector The function selector of the assertion function.
37+ /// @param triggerSelector The adopter function selector to watch.
38+ function registerFnCallTrigger (bytes4 fnSelector , bytes4 triggerSelector ) external view ;
39+
40+ /// @notice Registers a trigger that fires once after the transaction completes.
41+ /// @param fnSelector The function selector of the assertion function.
42+ function registerTxEndTrigger (bytes4 fnSelector ) external view ;
43+
44+ /// @notice Registers a trigger that fires when the given token's balances change.
45+ /// @param fnSelector The function selector of the assertion function.
46+ /// @param token The ERC20 token address to watch.
47+ function registerErc20ChangeTrigger (bytes4 fnSelector , address token ) external view ;
3448}
You can’t perform that action at this time.
0 commit comments