Skip to content
Open
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
12 changes: 12 additions & 0 deletions config.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ contracts:
stabullArbAddress: "0x1234...5678"
# Dispair v4 contract address
dispair: "0x1234...5678"
# Optional interpreter/store overrides, only needed when the deployer above
# does not expose them onchain (RaindexV6 deployers only expose parse2)
interpreter: "0x1234...5678"
store: "0x1234...5678"
v5:
# Sushi RP arb v5 contract address
sushiArbAddress: "0x1234...5678"
Expand All @@ -64,6 +68,10 @@ contracts:
stabullArbAddress: "0x1234...5678"
# Dispair v5 contract address
dispair: "0x1234...5678"
# Optional interpreter/store overrides, only needed when the deployer above
# does not expose them onchain (RaindexV6 deployers only expose parse2)
interpreter: "0x1234...5678"
store: "0x1234...5678"
v6:
# Sushi RP arb v6 contract address
sushiArbAddress: "0x1234...5678"
Expand All @@ -77,6 +85,10 @@ contracts:
raindexArbAddress: "0x1234...5678"
# Dispair v6 contract address
dispair: "0x1234...5678"
# Optional interpreter/store overrides, only needed when the deployer above
# does not expose them onchain (RaindexV6 deployers only expose parse2)
interpreter: "0x1234...5678"
store: "0x1234...5678"

# list of liquidity providers
# if provided through an env var, they should be separated by a comma
Expand Down
22 changes: 22 additions & 0 deletions src/config/validators.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,8 @@ describe("Test yaml Validator methods", async function () {
v4: {
sushiArb: sushiArbV4 as `0x${string}`,
dispair: dispairV4 as `0x${string}`,
interpreter: undefined,
store: undefined,
genericArb: genericArbV4 as `0x${string}`,
balancerArb: balancerArbV4 as `0x${string}`,
stabullArb: stabullArbV4 as `0x${string}`,
Expand All @@ -802,6 +804,8 @@ describe("Test yaml Validator methods", async function () {
v5: {
sushiArb: sushiArbV5 as `0x${string}`,
dispair: dispairV5 as `0x${string}`,
interpreter: undefined,
store: undefined,
genericArb: genericArbV5 as `0x${string}`,
balancerArb: balancerArbV5 as `0x${string}`,
stabullArb: stabullArbV5 as `0x${string}`,
Expand All @@ -827,6 +831,8 @@ describe("Test yaml Validator methods", async function () {
v6: {
sushiArb: sushiArbV6 as `0x${string}`,
dispair: dispairV6 as `0x${string}`,
interpreter: undefined,
store: undefined,
genericArb: genericArbV6 as `0x${string}`,
balancerArb: balancerArbV6 as `0x${string}`,
stabullArb: stabullArbV6 as `0x${string}`,
Expand Down Expand Up @@ -856,20 +862,26 @@ describe("Test yaml Validator methods", async function () {
v4: {
sushiArb: sushiArbV4 as `0x${string}`,
dispair: dispairV4 as `0x${string}`,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: undefined,
stabullArb: undefined,
},
v5: {
sushiArb: undefined,
dispair: undefined,
interpreter: undefined,
store: undefined,
genericArb: genericArbV5 as `0x${string}`,
balancerArb: undefined,
stabullArb: undefined,
},
v6: {
sushiArb: undefined,
dispair: undefined,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: balancerArbV6 as `0x${string}`,
stabullArb: undefined,
Expand All @@ -891,6 +903,8 @@ describe("Test yaml Validator methods", async function () {
v4: {
sushiArb: sushiArbV4 as `0x${string}`,
dispair: undefined,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: undefined,
stabullArb: undefined,
Expand All @@ -912,6 +926,8 @@ describe("Test yaml Validator methods", async function () {
v5: {
sushiArb: undefined,
dispair: dispairV5 as `0x${string}`,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: balancerArbV5 as `0x${string}`,
stabullArb: undefined,
Expand All @@ -932,6 +948,8 @@ describe("Test yaml Validator methods", async function () {
v6: {
sushiArb: undefined,
dispair: undefined,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: undefined,
stabullArb: undefined,
Expand Down Expand Up @@ -968,6 +986,8 @@ describe("Test yaml Validator methods", async function () {
v4: {
sushiArb: sushiArbV4 as `0x${string}`,
dispair: dispairV4 as `0x${string}`,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: undefined,
stabullArb: undefined,
Expand All @@ -991,6 +1011,8 @@ describe("Test yaml Validator methods", async function () {
v6: {
sushiArb: undefined,
dispair: undefined,
interpreter: undefined,
store: undefined,
genericArb: undefined,
balancerArb: balancerArbV6 as `0x${string}`,
stabullArb: undefined,
Expand Down
24 changes: 24 additions & 0 deletions src/config/validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,12 @@ export namespace Validator {

export function resolveContracts(input: any): AppOptionsContracts {
const dispairV4 = resolveAddress(input?.contracts?.v4?.dispair, "dispair v4", true);
const interpreterV4 = resolveAddress(
input?.contracts?.v4?.interpreter,
"interpreter v4",
true,
);
const storeV4 = resolveAddress(input?.contracts?.v4?.store, "store v4", true);
const sushiArbAddressV4 = resolveAddress(
input?.contracts?.v4?.sushiArbAddress,
"sushiArbAddress v4",
Expand All @@ -492,6 +498,12 @@ export namespace Validator {
true,
);
const dispairV5 = resolveAddress(input?.contracts?.v5?.dispair, "dispair v5", true);
const interpreterV5 = resolveAddress(
input?.contracts?.v5?.interpreter,
"interpreter v5",
true,
);
const storeV5 = resolveAddress(input?.contracts?.v5?.store, "store v5", true);
const sushiArbAddressV5 = resolveAddress(
input?.contracts?.v5?.sushiArbAddress,
"sushiArbAddress v5",
Expand All @@ -513,6 +525,12 @@ export namespace Validator {
true,
);
const dispairV6 = resolveAddress(input?.contracts?.v6?.dispair, "dispair v6", true);
const interpreterV6 = resolveAddress(
input?.contracts?.v6?.interpreter,
"interpreter v6",
true,
);
const storeV6 = resolveAddress(input?.contracts?.v6?.store, "store v6", true);
const sushiArbAddressV6 = resolveAddress(
input?.contracts?.v6?.sushiArbAddress,
"sushiArbAddress v6",
Expand Down Expand Up @@ -549,6 +567,8 @@ export namespace Validator {
contracts.v4 = {
sushiArb: sushiArbAddressV4 as `0x${string}` | undefined,
dispair: dispairV4 as `0x${string}` | undefined,
interpreter: interpreterV4 as `0x${string}` | undefined,
store: storeV4 as `0x${string}` | undefined,
genericArb: genericArbAddressV4 as `0x${string}` | undefined,
balancerArb: balancerArbAddressV4 as `0x${string}` | undefined,
stabullArb: stabullArbAddressV4 as `0x${string}` | undefined,
Expand All @@ -564,6 +584,8 @@ export namespace Validator {
contracts.v5 = {
sushiArb: sushiArbAddressV5 as `0x${string}` | undefined,
dispair: dispairV5 as `0x${string}` | undefined,
interpreter: interpreterV5 as `0x${string}` | undefined,
store: storeV5 as `0x${string}` | undefined,
genericArb: genericArbAddressV5 as `0x${string}` | undefined,
balancerArb: balancerArbAddressV5 as `0x${string}` | undefined,
stabullArb: stabullArbAddressV5 as `0x${string}` | undefined,
Expand All @@ -580,6 +602,8 @@ export namespace Validator {
contracts.v6 = {
sushiArb: sushiArbAddressV6 as `0x${string}` | undefined,
dispair: dispairV6 as `0x${string}` | undefined,
interpreter: interpreterV6 as `0x${string}` | undefined,
store: storeV6 as `0x${string}` | undefined,
genericArb: genericArbAddressV6 as `0x${string}` | undefined,
balancerArb: balancerArbAddressV6 as `0x${string}` | undefined,
stabullArb: stabullArbAddressV6 as `0x${string}` | undefined,
Expand Down
4 changes: 4 additions & 0 deletions src/config/yaml.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ orderbookTradeTypes:
sushiArb: "0x1111111111111111111111111111111111111111",
balancerArb: "0x3333333333333333333333333333333333333333",
dispair: "0x2222222222222222222222222222222222222222",
interpreter: undefined,
store: undefined,
genericArb: undefined,
stabullArb: "0x4444444444444444444444444444444444444444",
},
Expand Down Expand Up @@ -179,6 +181,8 @@ orderbookTradeTypes:
v5: {
sushiArbAddress: "0x1111111111111111111111111111111111111111",
dispair: "0x2222222222222222222222222222222222222222",
interpreter: undefined,
store: undefined,
genericArbAddress: "0x3333333333333333333333333333333333333333",
},
},
Expand Down
12 changes: 12 additions & 0 deletions src/config/yaml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,32 @@ export type AppOptionsContracts = {
v4?: {
sushiArb?: `0x${string}`;
dispair?: `0x${string}`;
/** Optional interpreter override, for deployers that do not expose it onchain */
interpreter?: `0x${string}`;
/** Optional store override, for deployers that do not expose it onchain */
store?: `0x${string}`;
genericArb?: `0x${string}`;
balancerArb?: `0x${string}`;
stabullArb?: `0x${string}`;
};
v5?: {
sushiArb?: `0x${string}`;
dispair?: `0x${string}`;
/** Optional interpreter override, for deployers that do not expose it onchain */
interpreter?: `0x${string}`;
/** Optional store override, for deployers that do not expose it onchain */
store?: `0x${string}`;
genericArb?: `0x${string}`;
balancerArb?: `0x${string}`;
stabullArb?: `0x${string}`;
};
v6?: {
sushiArb?: `0x${string}`;
dispair?: `0x${string}`;
/** Optional interpreter override, for deployers that do not expose it onchain */
interpreter?: `0x${string}`;
/** Optional store override, for deployers that do not expose it onchain */
store?: `0x${string}`;
genericArb?: `0x${string}`;
balancerArb?: `0x${string}`;
stabullArb?: `0x${string}`;
Expand Down
95 changes: 95 additions & 0 deletions src/order/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1747,6 +1747,101 @@ describe("Test OrderManager", () => {
expect(result.size).toBe(0);
});

it("should not throw when the chain has no routing base tokens configured", async () => {
// a chain that sushi has no BASES_TO_CHECK_TRADES_AGAINST entry for
delete (BASES_TO_CHECK_TRADES_AGAINST as any)[state.chainConfig.id];

const orderARes = Result.ok({
type: Order.Type.V4,
owner: "0xowner",
validInputs: [
{
token: "0xinput",
vaultId:
"0x0000000000000000000000000000000000000000000000000000000000000001",
},
],
validOutputs: [
{
token: "0xoutput",
vaultId:
"0x0000000000000000000000000000000000000000000000000000000000000001",
},
],
});
const orderBRes = Result.ok({
type: Order.Type.V4,
owner: "0xowner",
validInputs: [
{
token: "0xbasetoken",
vaultId:
"0x0000000000000000000000000000000000000000000000000000000000000001",
},
],
validOutputs: [
{
token: "0xinput",
vaultId:
"0x0000000000000000000000000000000000000000000000000000000000000001",
},
],
});
(Order.tryFromBytes as Mock)
.mockReturnValueOnce(orderARes)
.mockReturnValueOnce(orderBRes);
const orderA = {
__version: SubgraphVersions.V6,
orderHash: "0xhashA",
orderbook: { id: "0xorderbook" },
orderBytes: "0xbytesA",
outputs: [
{
token: { address: "0xoutput", symbol: "OUT", decimals: "18" },
balance:
"0xffffffee00000000000000000000000000000000000000000000000000000001",
},
],
inputs: [
{
token: { address: "0xinput", symbol: "IN", decimals: "18" },
balance:
"0xffffffee00000000000000000000000000000000000000000000000000000001",
},
],
};
const orderB = {
__version: SubgraphVersions.V6,
orderHash: "0xhashB",
orderbook: { id: "0xorderbook" },
orderBytes: "0xbytesB",
outputs: [
{
token: { address: "0xinput", symbol: "IN", decimals: "18" },
balance:
"0xffffffee00000000000000000000000000000000000000000000000000000001",
},
],
inputs: [
{
token: { address: "0xbasetoken", symbol: "BASE", decimals: "18" },
balance:
"0xffffffee00000000000000000000000000000000000000000000000000000001",
},
],
};

await orderManager.addOrder(orderA as any);
await orderManager.addOrder(orderB as any);

const pairA = getPair("0xorderbook", "0xhashA", "0xoutput", "0xinput");

const result = orderManager.getCounterpartyOrdersAgainstBaseTokens(pairA);

expect(result).toBeInstanceOf(Map);
expect(result.size).toBe(0);
});

it("should skip non-base tokens", async () => {
const mockBaseToken = { address: "0xbasetoken", symbol: "BASE", decimals: 18 };
(BASES_TO_CHECK_TRADES_AGAINST as any)[state.chainConfig.id] = [mockBaseToken as any];
Expand Down
2 changes: 1 addition & 1 deletion src/order/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ export class OrderManager {
// skip mirrored order pairs and pairs with middle token that is not in routing base tokens
if (
tkn === sellToken ||
BASES_TO_CHECK_TRADES_AGAINST[this.state.chainConfig.id].every(
(BASES_TO_CHECK_TRADES_AGAINST[this.state.chainConfig.id] ?? []).every(
(baseToken) => baseToken.address.toLowerCase() !== tkn,
)
) {
Expand Down
Loading
Loading