Skip to content
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

chore: Dynamic gateway generation #45

Draft
wants to merge 37 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4cde3d1
add dynamic bridge generation
Jason-W123 Nov 16, 2022
a2396b5
fix
Jason-W123 Nov 16, 2022
380ce44
add axios check
Jason-W123 Nov 16, 2022
0343984
fix
Jason-W123 Nov 16, 2022
9a0a7b3
add default gateway searcher
Jason-W123 Nov 17, 2022
86d51ae
add comments
Jason-W123 Nov 17, 2022
c03dfad
sdk
Jason-W123 Nov 17, 2022
f81b7ed
Update src/lib/utils.ts
Jason-Wanxt Nov 21, 2022
041b19c
delete file
Jason-W123 Nov 21, 2022
b3fcc02
fix
Jason-W123 Nov 21, 2022
3a44447
add checkMapResultByL2Gateway to avoid edge case
Jason-W123 Nov 23, 2022
43b55d9
format
Jason-W123 Nov 23, 2022
24853f5
Update token_list_gen.ts
Jason-Wanxt Dec 12, 2022
4560de6
use subgraph to pull gatewaySet events
Jason-W123 Dec 20, 2022
82847d3
delete file
Jason-W123 Dec 20, 2022
28cc632
add subgraph list
Dec 20, 2022
fe82e46
support grt
Dec 20, 2022
0b6087e
rename sort method
Dec 20, 2022
acf5f78
conflicts
Dec 21, 2022
1615178
remove lines
Dec 21, 2022
e94dbad
add timeComparableEvent interface
Dec 23, 2022
c585adf
remove lpg line
Dec 23, 2022
ce0b130
add number cast
Dec 23, 2022
57ff9d0
conflict
Jason-W123 Jan 31, 2023
4c41280
resolve conflicts
Jason-W123 Jan 31, 2023
790eb41
resolve conflicts
Jason-W123 Feb 24, 2023
aa27214
add subgraph changes
Jason-W123 Feb 24, 2023
c3a4613
delete subgrahp and move functions to graph
Jason-W123 Feb 27, 2023
a6af8a3
update yarn.lock
Jason-W123 Feb 27, 2023
ce84306
format
Jason-W123 Feb 27, 2023
b6d0408
fix graph
Jason-W123 Feb 27, 2023
dff4af1
add goerli grt and resolve unset gateway
Jason-W123 Feb 28, 2023
6faf00c
solve endpoint mess
Jason-W123 Feb 28, 2023
c3d2396
add network check for grt gateway
Jason-W123 Mar 2, 2023
430ec1c
add network check for grt gateway
Jason-W123 Mar 2, 2023
56e29bb
curly brace and reset casting
Jason-W123 Mar 3, 2023
a079d9a
remove file
Jason-W123 Mar 7, 2023
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
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
"start_server": "yarn ts-node server/app.ts"
},
"dependencies": {
"@arbitrum/sdk": "^2.0.13",
"@arbitrum/sdk": "^2.0.18",
"@uniswap/token-lists": "^1.0.0-beta.30",
"ajv": "^8.6.3",
"ajv-formats": "^2.1.1",
"axios": "^0.23.0",
"axios": "^1.1.3",
"better-ajv-errors": "^1.1.2",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
Expand Down
11 changes: 9 additions & 2 deletions src/lib/token_list_gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@ import {
getChunks,
promiseErrorMultiplier,
getL1GatewayAddress,
generateGatewayMap,
} from './utils';
import { constants as arbConstants } from '@arbitrum/sdk';
import { writeFileSync, readFileSync, existsSync } from 'fs';
import { getNetworkConfig } from './instantiate_bridge';
import { getPrevList, listNameToFileName } from './store';
import { exit } from 'process';
Jason-Wanxt marked this conversation as resolved.
Show resolved Hide resolved

export interface ArbificationOptions {
overwriteCurrentList: boolean;
Expand Down Expand Up @@ -183,7 +185,11 @@ export const generateTokenList = async (
}

const tokenData = intermediateTokenData.flat(1);

const l2ToL1GatewayAddresses = await generateGatewayMap(
l2.multiCaller,
l2.network,
l1.provider
);
const _arbifiedTokenList = tokens
.map((t, i) => ({
token: t,
Expand All @@ -200,7 +206,8 @@ export const generateTokenList = async (
const l2GatewayAddress =
token.token.joinTableEntry[0].gateway.gatewayAddr;
const l1GatewayAddress =
(await getL1GatewayAddress(l2GatewayAddress, l2.provider)) ?? 'N/A';
(await getL1GatewayAddress(l2GatewayAddress, l2ToL1GatewayAddresses)) ??
'N/A';

let { name: _name, decimals, symbol: _symbol } = token.tokenDatum;

Expand Down
127 changes: 95 additions & 32 deletions src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,20 @@ import addFormats from 'ajv-formats';
import { schema, TokenList } from '@uniswap/token-lists';
import { readFileSync, existsSync, writeFileSync } from 'fs';
import axios from 'axios';
import dotenv from 'dotenv';
import { L2Network, MultiCaller } from '@arbitrum/sdk';
import { L1GatewayRouter__factory } from '@arbitrum/sdk/dist/lib/abi/factories/L1GatewayRouter__factory';
import { L2GatewayRouter__factory } from '@arbitrum/sdk/dist/lib/abi/factories/L2GatewayRouter__factory';

import { ArbTokenList, GraphTokenResult } from './types';
import yargs from './getClargs';
import { providers } from 'ethers';
import { ethers } from 'ethers';
import path from 'path';

import {
l2ToL1GatewayAddresses,
l2ToL1GatewayAddressesNova,
TOKENLIST_DIR_PATH,
} from './constants';

import { TokenGateway__factory } from '@arbitrum/sdk/dist/lib/abi/factories/TokenGateway__factory';

import { exit } from 'process';
import { Provider } from '@ethersproject/providers';
dotenv.config();
export const EtherscanKey = process.env.Etherscan_KEY;
export const isArbOne = yargs.l2NetworkID === 42161;
export const isNova = yargs.l2NetworkID === 42170;
export const isGoerliRollup = yargs.l2NetworkID === 421613;
Expand Down Expand Up @@ -87,32 +84,98 @@ export const promiseErrorMultiplier = <T, Q extends Error>(
});
};

export const generateGatewayMap = async (
l2Multicaller: MultiCaller,
l2Network: L2Network,
l1Provider: Provider
) => {
const fromBlock = 0;
DZGoldman marked this conversation as resolved.
Show resolved Hide resolved
const toBlock = await l1Provider.getBlockNumber();
const topic0 = ethers.utils.id('GatewaySet(address,address)');
Jason-Wanxt marked this conversation as resolved.
Show resolved Hide resolved
const l1GatewayResults: Map<string, string> = new Map();
DZGoldman marked this conversation as resolved.
Show resolved Hide resolved
const l1Token: any[] = [];
let page = 0;
let currentResult: string | any[];
const gatewayMap: Map<string, string> = new Map();

//default gateway can be set during initialize call, it does not emit GatewaySet, so we should
//manually set it
{
Jason-Wanxt marked this conversation as resolved.
Show resolved Hide resolved
const l1GatewayRouter = L1GatewayRouter__factory.connect(
l2Network.tokenBridge.l1GatewayRouter,
l1Provider
);
const defaultGateway = await l1GatewayRouter.defaultGateway();
const defaultGatewayContract = await new ethers.Contract(
defaultGateway,
TokenGateway__factory.abi
).connect(l1Provider);
const defaultCounterPartGateway =
await defaultGatewayContract.counterpartGateway();
gatewayMap.set(
defaultCounterPartGateway.toLowerCase(),
defaultGateway.toLowerCase()
);
}

//search events (GatewaySet) to get all gateways address and related token address
do {
page++;
const requestPara =
`https://api.etherscan.io/api?module=logs&action=getLogs&` +
Jason-Wanxt marked this conversation as resolved.
Show resolved Hide resolved
`address=${l2Network.tokenBridge.l1GatewayRouter}&` +
`fromBlock=${fromBlock}&toBlock=${toBlock}&topic0=${topic0}&page=${page}&` +
`offset=1000&apikey=${EtherscanKey}`;
try {
const scanResult = await axios.get(requestPara);
currentResult = scanResult.data.result;
} catch (e) {
console.log(e);
console.log('Bridge gateway list generate failed');
exit(1);
}

for (let i = 0; i < currentResult.length; i++) {
const tokenAddress = ethers.utils.hexDataSlice(
currentResult[i].topics[1],
12
);
let l1GatewayAddress = ethers.utils.hexDataSlice(
currentResult[i].topics[2],
12
);
//if gateway set to zero, which means will set back to standard erc20 gateway
if (l1GatewayAddress === ethers.constants.AddressZero) {
l1GatewayAddress = l2Network.tokenBridge.l1ERC20Gateway;
}

l1GatewayResults.set(tokenAddress, l1GatewayAddress);
l1Token.push(tokenAddress);
}
} while (currentResult.length > 0);
const l2GatewayMaps = await getL2GatewayAddressesFromL1Token(
l1Token,
l2Multicaller,
l2Network
);

//set gateway map
for (let i = 0; i < l1Token.length; i++) {
if (l2GatewayMaps[i] === ethers.constants.AddressZero) continue;
gatewayMap.set(
l2GatewayMaps[i].toLowerCase(),
l1GatewayResults.get(l1Token[i])!.toLowerCase()
);
}
console.log('Successfully generate gateway map');
return gatewayMap;
};

export const getL1GatewayAddress = async (
l2GatewayAddress: string,
l2Provider: providers.Provider
l2ToL1GatewayAddresses: Map<string, string>
) => {
const l2Gateway = isNova
? l2ToL1GatewayAddressesNova[l2GatewayAddress.toLowerCase()]
: l2ToL1GatewayAddresses[l2GatewayAddress.toLowerCase()];

if (l2Gateway) return l2Gateway;

return undefined;

// TODO: discuss:
// try {
// const tokenGateway = TokenGateway__factory.connect(
// l2GatewayAddress,
// l2Provider
// );
// const l1Gateway = await promiseErrorMultiplier(
// tokenGateway.counterpartGateway(),
// (error) => tokenGateway.counterpartGateway()
// );
// return l1Gateway;
// } catch (e) {
// return undefined;
// }
return l2ToL1GatewayAddresses.get(l2GatewayAddress.toLowerCase());
};

export const getL2GatewayAddressesFromL1Token = async (
Expand Down
109 changes: 69 additions & 40 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
ts-node "^10.2.1"
typechain "7.0.0"

"@arbitrum/sdk-nitro@npm:@arbitrum/[email protected].8":
version "3.0.0-beta.8"
resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.0.0-beta.8.tgz#639981b0772309552576a61ce66edcb98505a97c"
integrity sha512-wSjzilBc2rSAPqJXvr5tIs/1W8SAqBdi/XseH3IwziUiXLcZdZ+yHanN6FfNtwk0Ij6HY9D4Qt3ZLhW0E+LM7A==
"@arbitrum/sdk-nitro@npm:@arbitrum/[email protected].13":
version "3.0.0-beta.13"
resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.0.0-beta.13.tgz#d4a2eadf24c2c1de8c680edb3b340e14476b6d8a"
integrity sha512-dAo26gDnofjFrvxfRAAvByuSM/7YnqH9+ErDsdr+jC4uzRwYQcCvIE9jd91zXrLna2KNOyNwpf0yqqcC9esu4g==
dependencies:
"@ethersproject/address" "^5.0.8"
"@ethersproject/bignumber" "^5.1.1"
Expand All @@ -34,23 +34,17 @@
ts-node "^10.2.1"
typechain "7.0.0"

"@arbitrum/sdk@^2.0.13":
version "2.0.13"
resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-2.0.13.tgz#6c9c60c2fab0a6c1fd4fefc82fbb27e16ef0c8b1"
integrity sha512-C/ckSzQkX4e8SKAY5Lz3yfakM5Aj6sA2mB9Q7cvZR/NFsFb0R95DiA6l1VMFT6Z1S1v8W936x4j9rLsJaFd/gg==
"@arbitrum/sdk@^2.0.18":
version "2.0.19"
resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-2.0.19.tgz#a1b56dfc35b2098a93ff3ad0defa2b81eb72d535"
integrity sha512-MbFUIf5sn61VTJY2iIGwGqR1uLTqTCMSjYZf8prjA4zIyhFOjarbki/q8iGKK7hvX/Kdh45sv2xV+czRi9DQUA==
dependencies:
"@arbitrum/sdk-classic" "npm:@arbitrum/[email protected]"
"@arbitrum/sdk-nitro" "npm:@arbitrum/[email protected].8"
"@arbitrum/sdk-nitro" "npm:@arbitrum/[email protected].13"
"@ethersproject/address" "^5.0.8"
"@ethersproject/bignumber" "^5.1.1"
"@ethersproject/bytes" "^5.0.8"
"@typechain/ethers-v5" "9.0.0"
"@types/prompts" "^2.0.14"
"@types/yargs" "^17.0.9"
dotenv "^10.0.0"
ethers "^5.1.0"
ts-node "^10.2.1"
typechain "7.0.0"

"@babel/code-frame@^7.16.0":
version "7.16.7"
Expand Down Expand Up @@ -572,19 +566,19 @@
integrity sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw==

"@types/node@^16.11.1":
version "16.11.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.1.tgz#2e50a649a50fc403433a14f829eface1a3443e97"
integrity sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==
version "16.18.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.3.tgz#d7f7ba828ad9e540270f01ce00d391c54e6e0abc"
integrity sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==

"@types/prettier@^2.1.1":
version "2.6.3"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a"
integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==
version "2.7.1"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e"
integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==

"@types/prompts@^2.0.14":
version "2.0.14"
resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.14.tgz#10cb8899844bb0771cabe57c1becaaaca9a3b521"
integrity sha512-HZBd99fKxRWpYCErtm2/yxUZv6/PBI9J7N4TNFffl5JbrYMHBwF25DjQGTW3b3jmXq+9P6/8fCIb2ee57BFfYA==
version "2.4.1"
resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.4.1.tgz#d47adcb608a0afcd48121ff7c75244694a3a04c5"
integrity sha512-1Mqzhzi9W5KlooNE4o0JwSXGUDeQXKldbGn9NO4tpxwZbHXYd+WcKpCksG2lbhH7U9I9LigfsdVsP2QAY0lNPA==
dependencies:
"@types/node" "*"

Expand Down Expand Up @@ -619,9 +613,9 @@
"@types/yargs-parser" "*"

"@types/yargs@^17.0.9":
version "17.0.10"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a"
integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==
version "17.0.13"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76"
integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==
dependencies:
"@types/yargs-parser" "*"

Expand Down Expand Up @@ -826,12 +820,14 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=

axios@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.23.0.tgz#b0fa5d0948a8d1d75e3d5635238b6c4625b05149"
integrity sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==
axios@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.1.3.tgz#8274250dada2edf53814ed7db644b9c2866c1e35"
integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==
dependencies:
follow-redirects "^1.14.4"
follow-redirects "^1.15.0"
form-data "^4.0.0"
proxy-from-env "^1.1.0"

balanced-match@^1.0.0:
version "1.0.2"
Expand Down Expand Up @@ -1459,10 +1455,10 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561"
integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==

follow-redirects@^1.14.4:
version "1.14.4"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==
follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==

form-data@^3.0.0:
version "3.0.1"
Expand All @@ -1473,6 +1469,15 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"

form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"

[email protected]:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
Expand Down Expand Up @@ -1965,9 +1970,9 @@ prettier-linter-helpers@^1.0.0:
fast-diff "^1.1.2"

prettier@^2.1.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032"
integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
version "2.7.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==

prettier@^2.4.1:
version "2.4.1"
Expand All @@ -1987,6 +1992,11 @@ proxy-addr@~2.0.5:
forwarded "0.2.0"
ipaddr.js "1.9.1"

proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==

punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
Expand Down Expand Up @@ -2226,7 +2236,26 @@ ts-essentials@^7.0.1:
resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38"
integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==

ts-node@^10.2.1, ts-node@^10.8.1:
ts-node@^10.2.1:
version "10.9.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
dependencies:
"@cspotcode/source-map-support" "^0.8.0"
"@tsconfig/node10" "^1.0.7"
"@tsconfig/node12" "^1.0.7"
"@tsconfig/node14" "^1.0.0"
"@tsconfig/node16" "^1.0.2"
acorn "^8.4.1"
acorn-walk "^8.1.1"
arg "^4.1.0"
create-require "^1.1.0"
diff "^4.0.1"
make-error "^1.1.1"
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"

ts-node@^10.8.1:
version "10.8.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066"
integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==
Expand Down