Skip to content

Commit

Permalink
Revert "update"
Browse files Browse the repository at this point in the history
This reverts commit 224dc45.
  • Loading branch information
rouzwelt committed Feb 14, 2025
1 parent 1f4e8e9 commit 37a5f3c
Show file tree
Hide file tree
Showing 10 changed files with 186 additions and 166 deletions.
19 changes: 13 additions & 6 deletions src/modes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { findOpp as findInterObOpp } from "./interOrderbook";
import { findOpp as findIntraObOpp } from "./intraOrderbook";
import { findOppWithRetries as findRpOpp } from "./routeProcessor";
import { BotConfig, BundledOrders, ViemClient, DryrunResult, SpanAttrs } from "../types";
import { extendSpanAttributes } from "../utils";

/**
* The main entrypoint for the main logic to find opps.
Expand Down Expand Up @@ -116,18 +117,24 @@ export async function findOpp({
noneNodeError: undefined,
};
if ((allResults[0] as any)?.reason?.spanAttributes) {
spanAttributes["routeProcessor"] = JSON.stringify(
(allResults[0] as any).reason.spanAttributes,
extendSpanAttributes(
spanAttributes,
JSON.stringify((allResults[0] as any).reason.spanAttributes),
"routeProcessor",
);
}
if ((allResults[1] as any)?.reason?.spanAttributes) {
spanAttributes["intraOrderbook"] = JSON.stringify(
(allResults[1] as any).reason.spanAttributes["intraOrderbook"],
extendSpanAttributes(
spanAttributes,
JSON.stringify((allResults[1] as any).reason.spanAttributes),
"intraOrderbook",
);
}
if ((allResults[2] as any)?.reason?.spanAttributes) {
spanAttributes["interOrderbook"] = JSON.stringify(
(allResults[2] as any).reason.spanAttributes,
extendSpanAttributes(
spanAttributes,
JSON.stringify((allResults[2] as any).reason.spanAttributes),
"interOrderbook",
);
}
if ((allResults[0] as any)?.reason?.value?.noneNodeError) {
Expand Down
61 changes: 42 additions & 19 deletions src/modes/interOrderbook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@ import { BigNumber, Contract, ethers } from "ethers";
import { containsNodeError, errorSnapshot } from "../error";
import { getBountyEnsureRainlang, parseRainlang } from "../task";
import { BaseError, ExecutionRevertedError, PublicClient } from "viem";
import { ONE18, scale18To, estimateProfit, withBigintSerializer } from "../utils";
import { BotConfig, BundledOrders, ViemClient, DryrunResult, SpanAttrs } from "../types";
import {
ONE18,
scale18To,
estimateProfit,
withBigintSerializer,
extendSpanAttributes,
} from "../utils";

const obInterface = new ethers.utils.Interface(orderbookAbi);

Expand Down Expand Up @@ -122,13 +128,21 @@ export async function dryrun({
gasLimit = ethers.BigNumber.from(estimation.gas).mul(config.gasLimitMultiplier).div(100);

// include dryrun headroom gas estimation in otel logs
spanAttributes["gasEst.headroom.gasLimit"] = estimation.gas.toString();
spanAttributes["gasEst.headroom.totalCost"] = estimation.totalGasCost.toString();
spanAttributes["gasEst.headroom.gasPrice"] = estimation.gasPrice.toString();
if (config.isSpecialL2) {
spanAttributes["gasEst.headroom.l1Cost"] = estimation.l1Cost.toString();
spanAttributes["gasEst.headroom.l1GasPrice"] = estimation.l1GasPrice.toString();
}
extendSpanAttributes(
spanAttributes,
JSON.stringify({
gasLimit: estimation.gas.toString(),
totalCost: estimation.totalGasCost.toString(),
gasPrice: estimation.gasPrice.toString(),
...(config.isSpecialL2
? {
l1Cost: estimation.l1Cost.toString(),
l1GasPrice: estimation.l1GasPrice.toString(),
}
: {}),
}),
"gasEst.headroom",
);
} catch (e) {
const isNodeError = containsNodeError(e as BaseError);
const errMsg = errorSnapshot("", e);
Expand Down Expand Up @@ -198,13 +212,21 @@ export async function dryrun({
gasCost = gasLimit.mul(gasPrice).add(estimation.l1Cost);

// include dryrun final gas estimation in otel logs
spanAttributes["gasEst.final.gasLimit"] = estimation.gas.toString();
spanAttributes["gasEst.final.totalCost"] = estimation.totalGasCost.toString();
spanAttributes["gasEst.final.gasPrice"] = estimation.gasPrice.toString();
if (config.isSpecialL2) {
spanAttributes["gasEst.final.l1Cost"] = estimation.l1Cost.toString();
spanAttributes["gasEst.final.l1GasPrice"] = estimation.l1GasPrice.toString();
}
extendSpanAttributes(
spanAttributes,
JSON.stringify({
gasLimit: estimation.gas.toString(),
totalCost: estimation.totalGasCost.toString(),
gasPrice: estimation.gasPrice.toString(),
...(config.isSpecialL2
? {
l1Cost: estimation.l1Cost.toString(),
l1GasPrice: estimation.l1GasPrice.toString(),
}
: {}),
}),
"gasEst.final",
);
task.evaluable.bytecode = await parseRainlang(
await getBountyEnsureRainlang(
ethers.utils.parseUnits(inputToEthPrice),
Expand Down Expand Up @@ -401,12 +423,13 @@ export async function findOpp({
// } catch {
// /**/
// }
const allOrderbooksAttributes: any = {};
for (let i = 0; i < e.errors.length; i++) {
allOrderbooksAttributes[opposingOrderbookOrders[i].orderbook] =
e.errors[i].spanAttributes;
extendSpanAttributes(
spanAttributes,
JSON.stringify(e.errors[i].spanAttributes),
"againstOrderbooks." + opposingOrderbookOrders[i].orderbook,
);
}
spanAttributes["againstOrderbooks"] = JSON.stringify(allOrderbooksAttributes);
const noneNodeErrors = allNoneNodeErrors.filter((v) => !!v);
if (allNoneNodeErrors.length && noneNodeErrors.length / allNoneNodeErrors.length > 0.5) {
result.value = {
Expand Down
54 changes: 36 additions & 18 deletions src/modes/intraOrderbook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { estimateGasCost } from "../gas";
import { BigNumber, ethers } from "ethers";
import { containsNodeError, errorSnapshot } from "../error";
import { getWithdrawEnsureRainlang, parseRainlang } from "../task";
import { estimateProfit, scale18, withBigintSerializer } from "../utils";
import { BaseError, erc20Abi, ExecutionRevertedError, PublicClient } from "viem";
import { estimateProfit, scale18, withBigintSerializer, extendSpanAttributes } from "../utils";
import {
SpanAttrs,
BotConfig,
Expand Down Expand Up @@ -120,13 +120,21 @@ export async function dryrun({
gasLimit = ethers.BigNumber.from(estimation.gas).mul(config.gasLimitMultiplier).div(100);

// include dryrun headroom gas estimation in otel logs
spanAttributes["gasEst.headroom.gasLimit"] = estimation.gas.toString();
spanAttributes["gasEst.headroom.totalCost"] = estimation.totalGasCost.toString();
spanAttributes["gasEst.headroom.gasPrice"] = estimation.gasPrice.toString();
if (config.isSpecialL2) {
spanAttributes["gasEst.headroom.l1Cost"] = estimation.l1Cost.toString();
spanAttributes["gasEst.headroom.l1GasPrice"] = estimation.l1GasPrice.toString();
}
extendSpanAttributes(
spanAttributes,
JSON.stringify({
gasLimit: estimation.gas.toString(),
totalCost: estimation.totalGasCost.toString(),
gasPrice: estimation.gasPrice.toString(),
...(config.isSpecialL2
? {
l1Cost: estimation.l1Cost.toString(),
l1GasPrice: estimation.l1GasPrice.toString(),
}
: {}),
}),
"gasEst.headroom",
);
} catch (e) {
// reason, code, method, transaction, error, stack, message
const isNodeError = containsNodeError(e as BaseError);
Expand Down Expand Up @@ -206,13 +214,21 @@ export async function dryrun({
gasCost = gasLimit.mul(gasPrice).add(estimation.l1Cost);

// include dryrun final gas estimation in otel logs
spanAttributes["gasEst.final.gasLimit"] = estimation.gas.toString();
spanAttributes["gasEst.final.totalCost"] = estimation.totalGasCost.toString();
spanAttributes["gasEst.final.gasPrice"] = estimation.gasPrice.toString();
if (config.isSpecialL2) {
spanAttributes["gasEst.final.l1Cost"] = estimation.l1Cost.toString();
spanAttributes["gasEst.final.l1GasPrice"] = estimation.l1GasPrice.toString();
}
extendSpanAttributes(
spanAttributes,
JSON.stringify({
gasLimit: estimation.gas.toString(),
totalCost: estimation.totalGasCost.toString(),
gasPrice: estimation.gasPrice.toString(),
...(config.isSpecialL2
? {
l1Cost: estimation.l1Cost.toString(),
l1GasPrice: estimation.l1GasPrice.toString(),
}
: {}),
}),
"gasEst.final",
);
task.evaluable.bytecode = await parseRainlang(
await getWithdrawEnsureRainlang(
signer.account.address,
Expand Down Expand Up @@ -342,7 +358,6 @@ export async function findOpp({
);
if (!opposingOrders || !opposingOrders.length) throw undefined;

const allErrorAttributes: string[] = [];
const allNoneNodeErrors: (string | undefined)[] = [];
const inputBalance = scale18(
await viemClient.readContract({
Expand Down Expand Up @@ -379,10 +394,13 @@ export async function findOpp({
});
} catch (e: any) {
allNoneNodeErrors.push(e?.value?.noneNodeError);
allErrorAttributes.push(JSON.stringify(e.spanAttributes));
extendSpanAttributes(
spanAttributes,
JSON.stringify(e.spanAttributes),
"intraOrderbook." + i,
);
}
}
spanAttributes["intraOrderbook"] = allErrorAttributes;
const noneNodeErrors = allNoneNodeErrors.filter((v) => !!v);
if (allNoneNodeErrors.length && noneNodeErrors.length / allNoneNodeErrors.length > 0.5) {
result.value = {
Expand Down
49 changes: 33 additions & 16 deletions src/modes/routeProcessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
estimateProfit,
visualizeRoute,
withBigintSerializer,
extendSpanAttributes,
} from "../utils";

/**
Expand Down Expand Up @@ -190,13 +191,21 @@ export async function dryrun({
.div(100);

// include dryrun headroom gas estimation in otel logs
spanAttributes["gasEst.headroom.gasLimit"] = estimation.gas.toString();
spanAttributes["gasEst.headroom.totalCost"] = estimation.totalGasCost.toString();
spanAttributes["gasEst.headroom.gasPrice"] = estimation.gasPrice.toString();
if (config.isSpecialL2) {
spanAttributes["gasEst.headroom.l1Cost"] = estimation.l1Cost.toString();
spanAttributes["gasEst.headroom.l1GasPrice"] = estimation.l1GasPrice.toString();
}
extendSpanAttributes(
spanAttributes,
JSON.stringify({
gasLimit: estimation.gas.toString(),
totalCost: estimation.totalGasCost.toString(),
gasPrice: estimation.gasPrice.toString(),
...(config.isSpecialL2
? {
l1Cost: estimation.l1Cost.toString(),
l1GasPrice: estimation.l1GasPrice.toString(),
}
: {}),
}),
"gasEst.headroom",
);
} catch (e) {
// reason, code, method, transaction, error, stack, message
const isNodeError = containsNodeError(e as BaseError);
Expand Down Expand Up @@ -268,13 +277,21 @@ export async function dryrun({
gasCost = gasLimit.mul(gasPrice).add(estimation.l1Cost);

// include dryrun final gas estimation in otel logs
spanAttributes["gasEst.final.gasLimit"] = estimation.gas.toString();
spanAttributes["gasEst.final.totalCost"] = estimation.totalGasCost.toString();
spanAttributes["gasEst.final.gasPrice"] = estimation.gasPrice.toString();
if (config.isSpecialL2) {
spanAttributes["gasEst.final.l1Cost"] = estimation.l1Cost.toString();
spanAttributes["gasEst.final.l1GasPrice"] = estimation.l1GasPrice.toString();
}
extendSpanAttributes(
spanAttributes,
JSON.stringify({
gasLimit: estimation.gas.toString(),
totalCost: estimation.totalGasCost.toString(),
gasPrice: estimation.gasPrice.toString(),
...(config.isSpecialL2
? {
l1Cost: estimation.l1Cost.toString(),
l1GasPrice: estimation.l1GasPrice.toString(),
}
: {}),
}),
"gasEst.final",
);
task.evaluable.bytecode = await parseRainlang(
await getBountyEnsureRainlang(
ethers.utils.parseUnits(ethPrice),
Expand Down Expand Up @@ -413,7 +430,7 @@ export async function findOpp({
// the fail reason can only be no route in case all hops fail reasons are no route
if (e.reason !== RouteProcessorDryrunHaltReason.NoRoute) noRoute = false;
allNoneNodeErrors.push(e?.value?.noneNodeError);
spanAttributes["full"] = JSON.stringify(e.spanAttributes);
extendSpanAttributes(spanAttributes, JSON.stringify(e.spanAttributes), "full");
}
if (!hasPriceMatch.value) {
const maxTradeSize = findMaxInput({
Expand Down Expand Up @@ -446,7 +463,7 @@ export async function findOpp({
// the fail reason can only be no route in case all hops fail reasons are no route
if (e.reason !== RouteProcessorDryrunHaltReason.NoRoute) noRoute = false;
allNoneNodeErrors.push(e?.value?.noneNodeError);
spanAttributes["partial"] = JSON.stringify(e.spanAttributes);
extendSpanAttributes(spanAttributes, JSON.stringify(e.spanAttributes), "partial");
}
}
}
Expand Down
35 changes: 2 additions & 33 deletions src/processOrders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -602,40 +602,9 @@ export async function processPair(args: {
}
}
} catch (e: any) {
// record all span attributes in their scopes
// record all span attributes
for (const attrKey in e.spanAttributes) {
if (attrKey === "routeProcessor") {
const rpAttrs = JSON.parse(e.spanAttributes[attrKey]);
for (const key in rpAttrs) {
const innerAttrs = JSON.parse(rpAttrs[key]);
for (const innerKey in innerAttrs) {
spanAttributes["details.routeProcessor." + key + "." + innerKey] =
innerAttrs[innerKey];
}
}
} else if (attrKey === "intraOrderbook") {
const intraAttrs = JSON.parse(e.spanAttributes[attrKey]);
for (let i = 0; i < intraAttrs.length; i++) {
const innerAttrs = JSON.parse(intraAttrs[i]);
for (const innerKey in innerAttrs) {
spanAttributes["details.intraOrderbook." + i + "." + innerKey] =
innerAttrs[innerKey];
}
}
} else if (attrKey === "interOrderbook") {
const interAttrs = JSON.parse(
JSON.parse(e.spanAttributes[attrKey])["againstOrderbooks"],
);
for (const key in interAttrs) {
for (const innerKey in interAttrs[key]) {
spanAttributes[
"details.interOrderbook.againstOrderbooks." + key + "." + innerKey
] = interAttrs[key][innerKey];
}
}
} else {
spanAttributes["details." + attrKey] = e.spanAttributes[attrKey];
}
spanAttributes["details." + attrKey] = e.spanAttributes[attrKey];
}
if (e.noneNodeError) {
spanAttributes["details.noneNodeError"] = true;
Expand Down
10 changes: 6 additions & 4 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -816,16 +816,18 @@ export function scale18To(value: BigNumberish, targetDecimals: BigNumberish): Bi
*/
export function extendSpanAttributes(
spanAttributes: Record<string, any>,
newAttributes: Record<string, any>,
newAttributes: string,
header: string,
excludeHeaderForKeys: string[] = [],
) {
for (const attrKey in newAttributes) {
const attrs = JSON.parse(newAttributes);
for (const attrKey in attrs) {
if (!excludeHeaderForKeys.includes(attrKey)) {
spanAttributes[header + "." + attrKey] = newAttributes[attrKey];
spanAttributes[header + "." + attrKey] = attrs[attrKey];
} else {
spanAttributes[attrKey] = newAttributes[attrKey];
spanAttributes[attrKey] = attrs[attrKey];
}
delete attrs[attrKey];
}
}

Expand Down
Loading

0 comments on commit 37a5f3c

Please sign in to comment.