Skip to content

Commit

Permalink
Sync with upstream repo (#68)
Browse files Browse the repository at this point in the history
Merge latest changes from upstream repo
  • Loading branch information
sameersubudhi authored Sep 26, 2024
2 parents 4235e14 + 247451c commit 0beda08
Show file tree
Hide file tree
Showing 49 changed files with 268 additions and 231 deletions.
10 changes: 10 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ module.exports = {
"no-duplicate-imports": "error",
"@typescript-eslint/no-floating-promises": ["error"],
"@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: false }],
"no-restricted-imports": [
"error",
{
patterns: [{ group: ["@ethersproject/bignumber"], message: "Use 'src/utils/BNUtils' instead" }],
paths: [
{ name: "ethers", importNames: ["BigNumber"], message: "Use 'src/utils/BNUtils' instead" },
{ name: "ethers", importNames: ["Event"], message: "Use Log from 'src/interfaces/Common' instead" },
],
},
],
},
settings: {
node: {
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"dependencies": {
"@across-protocol/constants": "^3.1.14",
"@across-protocol/contracts": "^3.0.10",
"@across-protocol/sdk": "^3.1.36",
"@across-protocol/sdk": "^3.2.0",
"@arbitrum/sdk": "^3.1.3",
"@aws-sdk/client-kms": "^3.592.0",
"@aws-sdk/client-s3": "^3.592.0",
Expand All @@ -22,6 +22,7 @@
"@ethersproject/abi": "^5.7.0",
"@ethersproject/abstract-provider": "^5.7.0",
"@ethersproject/abstract-signer": "^5.7.0",
"@ethersproject/bignumber": "^5.7.0",
"@google-cloud/kms": "^3.6.0",
"@google-cloud/storage": "^6.10.1",
"@maticnetwork/maticjs": "^3.6.0",
Expand Down
8 changes: 3 additions & 5 deletions scripts/hubpool.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import minimist from "minimist";
import { WETH9__factory as WETH9 } from "@across-protocol/contracts";
import { constants as sdkConsts } from "@across-protocol/sdk";
import { BigNumber, ethers, Signer } from "ethers";
import { ethers, Signer } from "ethers";
import { config } from "dotenv";
import { getNetworkName, getSigner } from "../src/utils";
import { BigNumber, bnOne, bnUint256Max, formatEther, formatUnits, getNetworkName, getSigner } from "../src/utils";
import * as utils from "./utils";

const { PROTOCOL_DEFAULT_CHAIN_ID_INDICES } = sdkConsts;
const { MaxUint256, One: bnOne } = ethers.constants;
const { formatEther, formatUnits } = ethers.utils;

const { NODE_SUCCESS, NODE_INPUT_ERR, NODE_APP_ERR } = utils;

Expand Down Expand Up @@ -99,7 +97,7 @@ async function dispute(args: Record<string, number | string>, signer: Signer): P

if (allowance.lt(bondAmount)) {
console.log(`Approving ${network} HubPool @ ${hubPool.address} to transfer ${symbol}.`);
const approval = await bondToken.connect(signer).approve(hubPool.address, MaxUint256);
const approval = await bondToken.connect(signer).approve(hubPool.address, bnUint256Max);
console.log(`Approval: ${approval.hash}...`);
await approval.wait();
}
Expand Down
2 changes: 1 addition & 1 deletion src/adapter/bridges/BlastBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export class BlastBridge extends BaseBridgeAdapter {
const l2Bridge = this.getL2Bridge();
const events = await paginatedEventQuery(
l2Bridge,
l2Bridge.filters.ERC20BridgeFinalized(l1Token, undefined, fromAddress),
l2Bridge.filters.ERC20BridgeFinalized(undefined, l1Token, fromAddress),
eventConfig
);
return {
Expand Down
8 changes: 4 additions & 4 deletions src/adapter/bridges/OpStackWethBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import {
paginatedEventQuery,
Signer,
Provider,
Event,
ZERO_ADDRESS,
TOKEN_SYMBOLS_MAP,
} from "../../utils";
import { CONTRACT_ADDRESSES } from "../../common";
import { Log } from "../../interfaces";
import { matchL2EthDepositAndWrapEvents, processEvent } from "../utils";
import { utils } from "@across-protocol/sdk";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
Expand Down Expand Up @@ -67,7 +67,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter {
});
}

private convertEventListToBridgeEvents(events: Event[]): BridgeEvents {
private convertEventListToBridgeEvents(events: Log[]): BridgeEvents {
return {
[this.resolveL2TokenAddress(TOKEN_SYMBOLS_MAP.WETH.addresses[this.hubChainId])]: events.map((event) =>
processEvent(event, "_amount", "_to", "_from")
Expand Down Expand Up @@ -138,7 +138,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter {
)
// If EOA sent the ETH via the AtomicDepositor, then remove any events where the
// toAddress is not the EOA so we don't get confused with other users using the AtomicDepositor
.filter((event) => event.args._to === fromAddress);
.filter((event) => event.args._to === toAddress);

// We only care about WETH finalization events initiated by the relayer running this rebalancer logic, so only
// filter on Deposit events sent from the provided signer. We can't simply filter on `fromAddress` because
Expand Down Expand Up @@ -176,7 +176,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter {
fromAddress: string,
eventConfig: EventSearchConfig,
l2Weth = this.l2Weth
): Promise<Event[]> {
): Promise<Log[]> {
return paginatedEventQuery(l2Weth, l2Weth.filters.Deposit(fromAddress), eventConfig);
}
}
4 changes: 2 additions & 2 deletions src/adapter/bridges/UsdcCCTPBridge.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { BigNumber, Contract, Signer } from "ethers";
import { Contract, Signer } from "ethers";
import { CONTRACT_ADDRESSES, chainIdsToCctpDomains } from "../../common";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
import { EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils";
import { BigNumber, EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils";
import { processEvent } from "../utils";
import { cctpAddressToBytes32, retrieveOutstandingCCTPBridgeUSDCTransfers } from "../../utils/CCTPUtils";

Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/UsdcTokenSplitterBridge.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BigNumber, Signer } from "ethers";
import { Signer } from "ethers";
import { CONTRACT_ADDRESSES, CANONICAL_BRIDGE } from "../../common";
import { UsdcCCTPBridge } from "./UsdcCCTPBridge";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
import { EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils";
import { BigNumber, EventSearchConfig, Provider, TOKEN_SYMBOLS_MAP, compareAddressesSimple, assert } from "../../utils";

export class UsdcTokenSplitterBridge extends BaseBridgeAdapter {
protected cctpBridge: BaseBridgeAdapter;
Expand Down
2 changes: 1 addition & 1 deletion src/adapter/bridges/ZKSyncBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ export class ZKSyncBridge extends BaseBridgeAdapter {
return l2Gas;
}

protected getMailboxContract() {
protected getMailboxContract(): Contract {
return this.zkSyncMailbox;
}
}
6 changes: 3 additions & 3 deletions src/adapter/utils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { BigNumber, Event } from "ethers";
import { TOKEN_APPROVALS_TO_FIRST_ZERO } from "../common";
import {
BigNumber,
spreadEventWithBlockNumber,
toBN,
MAX_SAFE_ALLOWANCE,
Expand All @@ -12,7 +12,7 @@ import {
winston,
} from "../utils";
import { BridgeEvent } from "./bridges/BaseBridgeAdapter";
import { SortableEvent } from "../interfaces";
import { Log, SortableEvent } from "../interfaces";
import { ExpandedERC20 } from "@across-protocol/contracts";

export {
Expand Down Expand Up @@ -54,7 +54,7 @@ export async function approveTokens(
return ["*Approval transactions:*", ...approvalMarkdwn].join("\n");
}

export function processEvent(event: Event, amountField: string, toField: string, fromField: string): BridgeEvent {
export function processEvent(event: Log, amountField: string, toField: string, fromField: string): BridgeEvent {
const eventSpread = spreadEventWithBlockNumber(event) as SortableEvent & {
amount: BigNumber;
to: string;
Expand Down
8 changes: 4 additions & 4 deletions src/clients/InventoryClient.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { utils as ethersUtils } from "ethers";
import { constants, utils as sdkUtils } from "@across-protocol/sdk";
import WETH_ABI from "../common/abi/Weth.json";
import {
Expand All @@ -10,6 +9,7 @@ import {
createFormatFunction,
blockExplorerLink,
Contract,
formatUnits,
runTransaction,
isDefined,
DefaultLogLevels,
Expand Down Expand Up @@ -577,9 +577,9 @@ export class InventoryClient {
cumulativeVirtualBalance,
cumulativeVirtualBalanceWithShortfall,
cumulativeVirtualBalanceWithShortfallPostRefunds,
targetPct: ethersUtils.formatUnits(tokenConfig.targetPct, 18),
targetOverage: ethersUtils.formatUnits(targetOverageBuffer, 18),
effectiveTargetPct: ethersUtils.formatUnits(effectiveTargetPct, 18),
targetPct: formatUnits(tokenConfig.targetPct, 18),
targetOverage: formatUnits(targetOverageBuffer, 18),
effectiveTargetPct: formatUnits(effectiveTargetPct, 18),
expectedPostRelayAllocation,
chainsToEvaluate,
}
Expand Down
5 changes: 3 additions & 2 deletions src/clients/MultiCallerClient.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { utils as sdkUtils } from "@across-protocol/sdk";
import { BigNumber } from "ethers";
import { DEFAULT_MULTICALL_CHUNK_SIZE, Multicall2Call } from "../common";
import {
BigNumber,
winston,
bnZero,
getNetworkName,
Expand Down Expand Up @@ -633,7 +633,8 @@ export class TryMulticallClient extends MultiCallerClient {
mrkdwn: mrkdwn.join(""),
};
};
txnRequestsToSubmit.push(...txnCalldataToRebuild.map(rebuildTryMulticall));
const tryMulticallTxns = txnCalldataToRebuild.filter((txn) => txn.calldata.length !== 0).map(rebuildTryMulticall);
txnRequestsToSubmit.push(...tryMulticallTxns);
}

if (simulate) {
Expand Down
9 changes: 5 additions & 4 deletions src/clients/SpokePoolClient.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import assert from "assert";
import { ChildProcess, spawn } from "child_process";
import { Contract, Event } from "ethers";
import { Contract } from "ethers";
import { clients, utils as sdkUtils } from "@across-protocol/sdk";
import { Log } from "../interfaces";
import { CHAIN_MAX_BLOCK_LOOKBACK, RELAYER_DEFAULT_SPOKEPOOL_INDEXER } from "../common/Constants";
import { EventSearchConfig, getNetworkName, isDefined, MakeOptional, winston } from "../utils";
import { EventsAddedMessage, EventRemovedMessage } from "../utils/SuperstructUtils";
Expand Down Expand Up @@ -43,8 +44,8 @@ export class IndexedSpokePoolClient extends clients.SpokePoolClient {
private pendingCurrentTime: number;
private pendingOldestTime: number;

private pendingEvents: Event[][];
private pendingEventsRemoved: Event[];
private pendingEvents: Log[][];
private pendingEventsRemoved: Log[];

constructor(
readonly logger: winston.Logger,
Expand Down Expand Up @@ -194,7 +195,7 @@ export class IndexedSpokePoolClient extends clients.SpokePoolClient {
* @param event An Ethers event instance.
* @returns void
*/
protected removeEvent(event: Event): boolean {
protected removeEvent(event: Log): boolean {
let removed = false;
const eventIdx = this.queryableEventNames.indexOf(event.event);
const pendingEvents = this.pendingEvents[eventIdx];
Expand Down
7 changes: 3 additions & 4 deletions src/clients/TokenTransferClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ import {
winston,
assign,
ERC20,
Event,
Contract,
paginatedEventQuery,
spreadEventWithBlockNumber,
} from "../utils";
import { TokenTransfer, TransfersByChain } from "../interfaces";
import { Log, TokenTransfer, TransfersByChain } from "../interfaces";
import { Provider } from "@ethersproject/abstract-provider";

export class TokenTransferClient {
Expand Down Expand Up @@ -52,7 +51,7 @@ export class TokenTransferClient {
this.querySendAndReceiveEvents(tokenContract, monitoredAddress, searchConfigByChainIds[chainId])
)
);
const transferEventsPerToken: { [tokenAddress: string]: Event[][] } = Object.fromEntries(
const transferEventsPerToken: { [tokenAddress: string]: Log[][] } = Object.fromEntries(
transferEventsList.map((transferEvents, i) => [tokenContracts[i].address, transferEvents])
);

Expand Down Expand Up @@ -89,7 +88,7 @@ export class TokenTransferClient {
}

// Returns outgoing and incoming transfers for the specified tokenContract and address.
querySendAndReceiveEvents(tokenContract: Contract, address: string, config: EventSearchConfig): Promise<Event[][]> {
querySendAndReceiveEvents(tokenContract: Contract, address: string, config: EventSearchConfig): Promise<Log[][]> {
const eventFilters = [[address], [undefined, address]];
return Promise.all(
eventFilters.map((eventFilter) =>
Expand Down
68 changes: 51 additions & 17 deletions src/clients/bridges/AdapterManager.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import { utils } from "@across-protocol/sdk";
import { spokesThatHoldEthAndWeth, SUPPORTED_TOKENS } from "../../common/Constants";
import {
spokesThatHoldEthAndWeth,
SUPPORTED_TOKENS,
CUSTOM_BRIDGE,
CANONICAL_BRIDGE,
DEFAULT_GAS_MULTIPLIER,
} from "../../common/Constants";
import { InventoryConfig, OutstandingTransfers } from "../../interfaces";
import { BigNumber, isDefined, winston, Signer, getL2TokenAddresses, TransactionResponse, assert } from "../../utils";
import { SpokePoolClient, HubPoolClient } from "../";
import { ArbitrumAdapter, PolygonAdapter, ZKSyncAdapter, LineaAdapter, OpStackAdapter, ScrollAdapter } from "./";
import { CHAIN_IDs } from "@across-protocol/constants";
import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants";

import { BaseChainAdapter } from "../../adapter";

Expand Down Expand Up @@ -40,6 +46,19 @@ export class AdapterManager {
};

const { OPTIMISM, ARBITRUM, POLYGON, ZK_SYNC, BASE, MODE, LINEA, LISK, BLAST, REDSTONE, SCROLL, ZORA } = CHAIN_IDs;
const hubChainId = hubPoolClient.chainId;
const l1Signer = spokePoolClients[hubChainId].spokePool.signer;
const constructBridges = (chainId: number) => {
return Object.fromEntries(
SUPPORTED_TOKENS[chainId].map((symbol) => {
const l2Signer = spokePoolClients[chainId].spokePool.signer;
const l1Token = TOKEN_SYMBOLS_MAP[symbol].addresses[hubChainId];
const bridgeConstructor = CUSTOM_BRIDGE[chainId]?.[l1Token] ?? CANONICAL_BRIDGE[chainId];
const bridge = new bridgeConstructor(chainId, hubChainId, l1Signer, l2Signer, l1Token);
return [l1Token, bridge];
})
);
};
if (this.spokePoolClients[OPTIMISM] !== undefined) {
this.adapters[OPTIMISM] = new OpStackAdapter(
OPTIMISM,
Expand Down Expand Up @@ -71,51 +90,66 @@ export class AdapterManager {
this.adapters[LINEA] = new LineaAdapter(logger, spokePoolClients, filterMonitoredAddresses(LINEA));
}
if (this.spokePoolClients[MODE] !== undefined) {
this.adapters[MODE] = new OpStackAdapter(
this.adapters[MODE] = new BaseChainAdapter(
spokePoolClients,
MODE,
hubChainId,
filterMonitoredAddresses(MODE),
logger,
SUPPORTED_TOKENS[MODE],
spokePoolClients,
filterMonitoredAddresses(MODE)
constructBridges(MODE),
DEFAULT_GAS_MULTIPLIER[MODE] ?? 1
);
}
if (this.spokePoolClients[REDSTONE] !== undefined) {
this.adapters[REDSTONE] = new OpStackAdapter(
this.adapters[REDSTONE] = new BaseChainAdapter(
spokePoolClients,
REDSTONE,
hubChainId,
filterMonitoredAddresses(REDSTONE),
logger,
SUPPORTED_TOKENS[REDSTONE],
spokePoolClients,
filterMonitoredAddresses(REDSTONE)
constructBridges(REDSTONE),
DEFAULT_GAS_MULTIPLIER[REDSTONE] ?? 1
);
}
if (this.spokePoolClients[LISK] !== undefined) {
this.adapters[LISK] = new OpStackAdapter(
this.adapters[LISK] = new BaseChainAdapter(
spokePoolClients,
LISK,
hubChainId,
filterMonitoredAddresses(LISK),
logger,
SUPPORTED_TOKENS[LISK],
spokePoolClients,
filterMonitoredAddresses(LISK)
constructBridges(LISK),
DEFAULT_GAS_MULTIPLIER[LISK] ?? 1
);
}
if (this.spokePoolClients[BLAST] !== undefined) {
this.adapters[BLAST] = new OpStackAdapter(
this.adapters[BLAST] = new BaseChainAdapter(
spokePoolClients,
BLAST,
hubChainId,
filterMonitoredAddresses(BLAST),
logger,
SUPPORTED_TOKENS[BLAST],
spokePoolClients,
filterMonitoredAddresses(BLAST)
constructBridges(BLAST),
DEFAULT_GAS_MULTIPLIER[BLAST] ?? 1
);
}
if (this.spokePoolClients[SCROLL] !== undefined) {
this.adapters[SCROLL] = new ScrollAdapter(logger, spokePoolClients, filterMonitoredAddresses(SCROLL));
}
if (this.spokePoolClients[ZORA] !== undefined) {
this.adapters[ZORA] = new OpStackAdapter(
this.adapters[ZORA] = new BaseChainAdapter(
spokePoolClients,
ZORA,
hubChainId,
filterMonitoredAddresses(ZORA),
logger,
SUPPORTED_TOKENS[ZORA],
spokePoolClients,
filterMonitoredAddresses(ZORA)
constructBridges(ZORA),
DEFAULT_GAS_MULTIPLIER[ZORA] ?? 1
);
}

Expand Down
Loading

0 comments on commit 0beda08

Please sign in to comment.