Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions schema/tables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ export const orderTypeEnum = onchainEnum("order_type", [
"CirclesBackingOrder",
"SwapOrderHandler",
"ERC4626CowSwapFeeBurner",
"CurveCowSwapBurner",
"BalancerCowSwapFeeBurner",
"CowAmmConstantProduct",
"Unknown",
]);

Expand Down
2 changes: 1 addition & 1 deletion src/application/handlers/blockHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import { log } from "../helpers/logger";
import { type OrderType } from "../../utils/order-types";
type DiscreteStatus = (typeof discreteOrderStatusEnum.enumValues)[number];

const NON_DETERMINISTIC_TYPES: readonly OrderType[] = ["PerpetualSwap", "GoodAfterTime", "TradeAboveThreshold", "Unknown"];
const NON_DETERMINISTIC_TYPES: readonly OrderType[] = ["PerpetualSwap", "GoodAfterTime", "TradeAboveThreshold", "CurveCowSwapBurner", "BalancerCowSwapFeeBurner", "CowAmmConstantProduct", "Unknown"];
const SINGLE_SHOT_NON_DETERMINISTIC: readonly OrderType[] = ["GoodAfterTime", "TradeAboveThreshold"];
const BLOCK_NEVER = 2n ** 63n - 1n; // sentinel for epoch-scheduled generators (PollTryAtEpoch)
const VALID_DISCRETE_STATUSES = new Set(["fulfilled", "unfilled", "expired", "cancelled"]);
Expand Down
21 changes: 21 additions & 0 deletions src/utils/order-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ export type OrderType =
| "CirclesBackingOrder"
| "SwapOrderHandler"
| "ERC4626CowSwapFeeBurner"
| "CurveCowSwapBurner"
| "BalancerCowSwapFeeBurner"
| "CowAmmConstantProduct"
| "Unknown";

/**
Expand All @@ -43,12 +46,27 @@ export const HANDLER_ADDRESS_TO_TYPE: Record<string, OrderType> = {
const MAINNET_ONLY_HANDLERS: Record<string, OrderType> = {
"0xd506fe0b3ddf9e685c16e000514a835d3a511b26": "SwapOrderHandler",
"0x816e90dc85bf016455017a76bc09cc0451eeb308": "ERC4626CowSwapFeeBurner",
// Curve Finance fee-burn handler: converts protocol fees → target token via CoW swap.
// Source: https://docs.curve.finance/fees/CowSwapBurner/ — Vyper 0.3.10, verified.
"0xc0fc3ddfec95ca45a0d2393f518d3ea1ccf44f8b": "CurveCowSwapBurner",
// Balancer v3 CowSwapFeeBurner: burns protocol fees via CoW swap.
// v2 (current): deployed via 20250530-v3-cow-swap-fee-burner-v2 task.
"0x9958317b80ee5f10457017d54c2484d722059157": "BalancerCowSwapFeeBurner",
// v1 (deprecated): deployed via 20250221-v3-cow-swap-fee-burner (now in deprecated/).
"0x0e800d8d2e8b4694610aedc385aa6d763492b106": "BalancerCowSwapFeeBurner",
};

const GNOSIS_ONLY_HANDLERS: Record<string, OrderType> = {
"0x43866c5602b0e3b3272424396e88b849796dc608": "CirclesBackingOrder",
"0x7a77934d32d78bfe8dc1e23415b5679960a1c610": "SwapOrderHandler",
"0x5915dea04ce390f0f44ca0806f7c6dd99ce2f941": "ERC4626CowSwapFeeBurner",
// Balancer v3 CowSwapFeeBurner v2 on Gnosis.
// Deployed via 20250530-v3-cow-swap-fee-burner-v2 task.
"0x254f3a2974b97dc2e675f6115c845567c55f83b0": "BalancerCowSwapFeeBurner",
// CoW AMM ConstantProduct pool (verified). Each pool instance IS its own handler —
// the pool address equals the handler address. Factory: ConstantProductFactory.
// Source: https://github.com/cowprotocol/cow-amm
"0xb148f40fff05b5ce6b22752cf8e454b556f7a851": "CowAmmConstantProduct",
};

const HANDLER_MAP: Record<number, Record<string, OrderType>> = {
Expand Down Expand Up @@ -86,5 +104,8 @@ export const DETERMINISTIC_ORDER_TYPE: Record<OrderType, boolean> = {
TradeAboveThreshold: false,
SwapOrderHandler: false,
ERC4626CowSwapFeeBurner: false,
CurveCowSwapBurner: false,
BalancerCowSwapFeeBurner: false,
CowAmmConstantProduct: false,
Unknown: false,
};
3 changes: 3 additions & 0 deletions tests/utils/order-types.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ describe("DETERMINISTIC_ORDER_TYPE", () => {
expect(DETERMINISTIC_ORDER_TYPE["TradeAboveThreshold"]).toBe(false);
expect(DETERMINISTIC_ORDER_TYPE["SwapOrderHandler"]).toBe(false);
expect(DETERMINISTIC_ORDER_TYPE["ERC4626CowSwapFeeBurner"]).toBe(false);
expect(DETERMINISTIC_ORDER_TYPE["CurveCowSwapBurner"]).toBe(false);
expect(DETERMINISTIC_ORDER_TYPE["BalancerCowSwapFeeBurner"]).toBe(false);
expect(DETERMINISTIC_ORDER_TYPE["CowAmmConstantProduct"]).toBe(false);
expect(DETERMINISTIC_ORDER_TYPE["Unknown"]).toBe(false);
});
});
Loading