# Contract Interaction Audit

## Summary

Contract interaction patterns primarily rely on ethers `Contract` usage, ABI managers, and QuoterV2 call patterns. Event handling and ABI encoding/decoding are concentrated in generated type definitions and ABI helper modules.

## Contract Factory Usage

- `src/helpers/ContractFactory.ts` uses `Contract` from `ethers` to instantiate pool, factory, quoter, vault, and periphery contracts. This is the core factory for contract creation.
- `src/helpers/QuoterFactory.ts` uses `Contract` from `ethers` to create QuoterV2 instances by protocol.
- `src/SwapCalculator.ts` routes through `ContractFactory` for pool/vault/periphery contract creation.

## ABI Encoding/Decoding

- `src/types/pool.d.ts` defines an autogenerated ABI interface (`UniswapV3PoolInterface extends ethers.Interface`) and includes `encodeFunctionData`/`decodeFunctionResult` helpers.
- `src/helpers/AbiManager.ts` selects ABI artifacts for pools, quoters, vaults, and periphery.
- ABI JSON references are used in quote engines (e.g. `src/engines/uniswap-v4-quote-engine.ts` uses `StateView.json`).

## Contract Method Calls / Call Patterns

- Quote engines use `quoter.callStatic.*` or similar methods:
  - `src/engines/uniswap-v3-quote-engine.ts`
  - `src/engines/uniswap-v4-quote-engine.ts`
  - `src/engines/algebra-quote-engine.ts`
  - `src/engines/algebra19-integral-quote-engine.ts`
  - `src/engines/aerodrome-quote-engine.ts`
  - `src/engines/thickv2-quote-engine.ts`
- Routers call pool state methods like `slot0()` / `globalState()` and use protocol-specific ABI fields.

## Event Handling

- Event filters and listeners appear in `src/types/pool.d.ts` (generated types): `filters`, `on`, `once`, `addListener`, `removeListener`.
- No explicit event handling in runtime logic outside generated types.

## Notes

- `callStatic` is used in several quote engines; ethers v6 supports `staticCall` via function fragments, but existing code still uses `callStatic` on `quoter`. Verify compatibility with QuoterV2 typing in v6.
- Generated `src/types/pool.d.ts` now imports types from `ethers` rather than `@ethersproject/*`.
