Skip to content

refactor: replace deprecated @eth-op/sdk with viem #763

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@
"@across-protocol/across-token": "^1.0.0",
"@across-protocol/constants": "^3.1.20",
"@across-protocol/contracts": "^3.0.16",
"@eth-optimism/sdk": "^3.3.1",
"@ethersproject/bignumber": "^5.7.0",
"@pinata/sdk": "^2.1.0",
"@types/mocha": "^10.0.1",
Expand Down
4 changes: 1 addition & 3 deletions src/relayFeeCalculator/chain-queries/baseQuery.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { L2Provider } from "@eth-optimism/sdk/dist/interfaces/l2-provider";
import { providers } from "ethers";
import assert from "assert";
import { Coingecko } from "../../coingecko";
Expand All @@ -17,7 +16,6 @@ import { Logger, QueryInterface } from "../relayFeeCalculator";
import { Transport } from "viem";

type Provider = providers.Provider;
type OptimismProvider = L2Provider<Provider>;
type SymbolMappingType = Record<
string,
{
Expand Down Expand Up @@ -45,7 +43,7 @@ export class QueryBase implements QueryInterface {
* @param coingeckoBaseCurrency The basis currency that CoinGecko will use to resolve pricing
*/
constructor(
readonly provider: Provider | OptimismProvider,
readonly provider: Provider,
readonly symbolMapping: SymbolMappingType,
readonly spokePoolAddress: string,
readonly simulatedRelayerAddress: string,
Expand Down
6 changes: 1 addition & 5 deletions src/relayFeeCalculator/chain-queries/factory.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import assert from "assert";
import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants";
import { getDeployedAddress } from "@across-protocol/contracts";
import { asL2Provider } from "@eth-optimism/sdk";
import { providers } from "ethers";
import { DEFAULT_SIMULATED_RELAYER_ADDRESS } from "../../constants";
import { chainIsAlephZero, chainIsMatic, chainIsOPStack, isDefined } from "../../utils";
import { chainIsAlephZero, chainIsMatic, isDefined } from "../../utils";
import { QueryBase } from "./baseQuery";
import { PolygonQueries } from "./polygon";
import { DEFAULT_LOGGER, Logger } from "../relayFeeCalculator";
Expand Down Expand Up @@ -56,9 +55,6 @@ export class QueryBase__factory {
);
}

// For OPStack chains, we need to wrap the provider in an L2Provider
provider = chainIsOPStack(chainId) ? asL2Provider(provider) : provider;

return new QueryBase(
provider,
symbolMapping,
Expand Down
32 changes: 20 additions & 12 deletions src/utils/common.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { L2Provider } from "@eth-optimism/sdk/dist/interfaces/l2-provider";
import { isL2Provider as isOptimismL2Provider } from "@eth-optimism/sdk/dist/l2-provider";
import assert from "assert";
import Decimal from "decimal.js";
import { ethers, PopulatedTransaction, providers, VoidSigner } from "ethers";
Expand All @@ -8,8 +6,9 @@
import { BigNumber, BigNumberish, BN, formatUnits, parseUnits, toBN } from "./BigNumberUtils";
import { ConvertDecimals } from "./FormattingUtils";
import { chainIsOPStack } from "./NetworkUtils";
import { Address, Transport } from "viem";
import { CHAIN_IDs } from "@across-protocol/constants";
import { Address, createPublicClient, Hex, http, Transport } from "viem";
import * as chains from "viem/chains";
import { publicActionsL2 } from "viem/op-stack";
import { estimateGas } from "viem/linea";
import { getPublicClient } from "../gasPriceOracle/util";

Expand Down Expand Up @@ -252,7 +251,7 @@
export async function estimateTotalGasRequiredByUnsignedTransaction(
unsignedTx: PopulatedTransaction,
senderAddress: string,
provider: providers.Provider | L2Provider<providers.Provider>,
provider: providers.Provider,
options: Partial<{
gasPrice: BigNumberish;
gasUnits: BigNumberish;
Expand All @@ -270,20 +269,29 @@

// OP stack is a special case; gas cost is computed by the SDK, without having to query price.
if (chainIsOPStack(chainId)) {
assert(isOptimismL2Provider(provider), `Unexpected provider for chain ID ${chainId}.`);
const chain = Object.values(chains).find((chain) => chain.id === chainId);
assert(chain, `Chain ID ${chainId} not supported`);
const opStackClient = createPublicClient({
chain,
transport: transport ?? http(),
}).extend(publicActionsL2());
const populatedTransaction = await voidSigner.populateTransaction({
...unsignedTx,
gasLimit: nativeGasCost, // prevents additional gas estimation call
});
// Concurrently estimate the gas cost on L1 and L2 instead of calling
// `provider.estimateTotalGasCost` to improve performance.
const [l1GasCost, l2GasPrice] = await Promise.all([
provider.estimateL1GasCost(populatedTransaction),
_gasPrice || provider.getGasPrice(),
opStackClient.estimateL1Fee({
account: senderAddress as Address,
to: populatedTransaction.to as Address,
value: BigInt(populatedTransaction.value?.toString() ?? 0),
data: populatedTransaction.data as Hex,
gas: populatedTransaction.gasLimit ? BigInt(populatedTransaction.gasLimit.toString()) : undefined,
}),
_gasPrice ? BigInt(_gasPrice.toString()) : opStackClient.getGasPrice(),
]);
const l2GasCost = nativeGasCost.mul(l2GasPrice);
tokenGasCost = l1GasCost.add(l2GasCost);
const l2GasCost = nativeGasCost.mul(l2GasPrice.toString());
tokenGasCost = BigNumber.from(l1GasCost.toString()).add(l2GasCost);
} else if (chainId === CHAIN_IDs.LINEA && process.env[`NEW_GAS_PRICE_ORACLE_${chainId}`] === "true") {

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Builds

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Builds

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Builds

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Builds

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Builds

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Builds

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Lint

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Lint

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Lint

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Test

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Test

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?

Check failure on line 294 in src/utils/common.ts

View workflow job for this annotation

GitHub Actions / Test

Cannot find name 'CHAIN_IDs'. Did you mean 'chainId'?
// Permit linea_estimateGas via NEW_GAS_PRICE_ORACLE_59144=true
const {
gasLimit: nativeGasCost,
Expand Down
77 changes: 5 additions & 72 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -565,15 +565,6 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333"
integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==

"@eth-optimism/[email protected]":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.6.0.tgz#15ae76222a9b4d958a550cafb1960923af613a31"
integrity sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==
dependencies:
"@eth-optimism/core-utils" "0.12.0"
"@ethersproject/abstract-provider" "^5.7.0"
"@ethersproject/abstract-signer" "^5.7.0"

"@eth-optimism/contracts@^0.5.37", "@eth-optimism/contracts@^0.5.40", "@eth-optimism/contracts@^0.5.5":
version "0.5.40"
resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.5.40.tgz#d13a04a15ea947a69055e6fc74d87e215d4c936a"
Expand Down Expand Up @@ -605,26 +596,6 @@
bufio "^1.0.7"
chai "^4.3.4"

"@eth-optimism/[email protected]":
version "0.13.2"
resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.13.2.tgz#c0187c3abf6d86dad039edf04ff81299253214fe"
integrity sha512-u7TOKm1RxH1V5zw7dHmfy91bOuEAZU68LT/9vJPkuWEjaTl+BgvPDRDTurjzclHzN0GbWdcpOqPZg4ftjkJGaw==
dependencies:
"@ethersproject/abi" "^5.7.0"
"@ethersproject/abstract-provider" "^5.7.0"
"@ethersproject/address" "^5.7.0"
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/constants" "^5.7.0"
"@ethersproject/contracts" "^5.7.0"
"@ethersproject/keccak256" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/rlp" "^5.7.0"
"@ethersproject/web" "^5.7.1"
chai "^4.3.10"
ethers "^5.7.2"
node-fetch "^2.6.7"

"@eth-optimism/core-utils@^0.7.7":
version "0.7.7"
resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.7.7.tgz#c993d45d2be7a1956284621ad18129a88880c658"
Expand All @@ -638,18 +609,6 @@
ethers "^5.5.4"
lodash "^4.17.21"

"@eth-optimism/sdk@^3.3.1":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@eth-optimism/sdk/-/sdk-3.3.1.tgz#f72b6f93b58e2a2943f10aca3be91dfc23d9839f"
integrity sha512-zf8qL+KwYWUUwvdcjF1HpBxgKSt5wsKr8oa6jwqUhdPkQHUtVK5SRKtqXqYplnAgKtxDQYwlK512GU16odEl1w==
dependencies:
"@eth-optimism/contracts" "0.6.0"
"@eth-optimism/core-utils" "0.13.2"
lodash "^4.17.21"
merkletreejs "^0.3.11"
rlp "^2.2.7"
semver "^7.6.0"

"@ethereum-waffle/[email protected]":
version "4.0.10"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-4.0.10.tgz#6f600a40b6fdaed331eba42b8625ff23f3a0e59a"
Expand Down Expand Up @@ -1142,7 +1101,7 @@
"@ethersproject/transactions" "^5.7.0"
"@ethersproject/wordlists" "^5.7.0"

"@ethersproject/[email protected]", "@ethersproject/web@^5.5.1", "@ethersproject/web@^5.7.0", "@ethersproject/web@^5.7.1":
"@ethersproject/[email protected]", "@ethersproject/web@^5.5.1", "@ethersproject/web@^5.7.0":
version "5.7.1"
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
Expand Down Expand Up @@ -4883,11 +4842,6 @@ buffer-layout@^1.2.0, buffer-layout@^1.2.2:
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5"
integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==

buffer-reverse@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60"
integrity sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=

buffer-to-arraybuffer@^0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a"
Expand Down Expand Up @@ -5133,7 +5087,7 @@ chai-exclude@^2.1.0:
dependencies:
fclone "^1.0.11"

chai@^4.3.0, chai@^4.3.10, chai@^4.3.4, chai@^4.3.8:
chai@^4.3.0, chai@^4.3.4, chai@^4.3.8:
version "4.4.1"
resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1"
integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==
Expand Down Expand Up @@ -5888,11 +5842,6 @@ crypto-hash@^1.3.0:
resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247"
integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==

crypto-js@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631"
integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==

css-color-names@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67"
Expand Down Expand Up @@ -10949,17 +10898,6 @@ merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4:
readable-stream "^3.6.0"
semaphore-async-await "^1.5.1"

merkletreejs@^0.3.11:
version "0.3.11"
resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f"
integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==
dependencies:
bignumber.js "^9.0.1"
buffer-reverse "^1.0.1"
crypto-js "^4.2.0"
treeify "^1.1.0"
web3-utils "^1.3.4"

methods@^1.1.2, methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
Expand Down Expand Up @@ -13183,7 +13121,7 @@ [email protected]:
dependencies:
bn.js "^4.11.1"

rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4, rlp@^2.2.7:
rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4:
version "2.2.7"
resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf"
integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==
Expand Down Expand Up @@ -13417,7 +13355,7 @@ semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==

semver@^7.0.0, semver@^7.1.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
semver@^7.0.0, semver@^7.1.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
version "7.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
Expand Down Expand Up @@ -14547,11 +14485,6 @@ tr46@~0.0.3:
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=

treeify@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8"
integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==

triple-beam@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9"
Expand Down Expand Up @@ -15584,7 +15517,7 @@ [email protected]:
randombytes "^2.1.0"
utf8 "3.0.0"

web3-utils@^1.0.0-beta.31, web3-utils@^1.2.1, web3-utils@^1.3.0, web3-utils@^1.3.4, web3-utils@^1.3.6:
web3-utils@^1.0.0-beta.31, web3-utils@^1.2.1, web3-utils@^1.3.0, web3-utils@^1.3.6:
version "1.10.2"
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44"
integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow==
Expand Down
Loading