before dangerous ops
Signed-off-by: T-Hax <>
This commit is contained in:
parent
4065d89909
commit
704648ed2c
41 changed files with 31021 additions and 460 deletions
|
@ -1,13 +0,0 @@
|
|||
# RPC URLs
|
||||
ETH_MAINNET_TEST_RPC=
|
||||
|
||||
# debug (debug events are logged to console)
|
||||
DEBUG=
|
||||
|
||||
# use tor (torify tests)
|
||||
TORIFY=
|
||||
# tor port (regular = 9050, browser = 9150)
|
||||
TOR_PORT=
|
||||
|
||||
# relayer DOMAIN (the example.xyz in https://example.xyz) for testing
|
||||
TEST_RELAYER_DOMAIN=
|
1
@tornado/sdk-data/docs/.nojekyll
Normal file
1
@tornado/sdk-data/docs/.nojekyll
Normal file
|
@ -0,0 +1 @@
|
|||
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
|
@ -42,12 +42,13 @@
|
|||
"fs-extra": "^11.1.0",
|
||||
"mocha": "^10.2.0",
|
||||
"prettier": "^2.3.0",
|
||||
"rimraf": "^4.4.0",
|
||||
"rimraf": "^5.0.0",
|
||||
"source-map-support": "^0.5.19",
|
||||
"ts-essentials": "^9.3.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"tsc-alias": "^1.2.11",
|
||||
"tsconfig-paths": "^4.1.2",
|
||||
"typedoc": "^0.24.6",
|
||||
"typescript": "^5.0.4"
|
||||
},
|
||||
"scripts": {
|
||||
|
@ -59,7 +60,7 @@
|
|||
"postversion": "git push --follow-tags && npm publish",
|
||||
"lint": "eslint --ext ts,js --fix src",
|
||||
"build-live": "tsc -w && tsc-alias -w",
|
||||
"clean": "rm -rf --interactive=never cache/*",
|
||||
"clean": "rm -rf --interactive=never docs/*",
|
||||
"format": "prettier src/*.ts -w"
|
||||
},
|
||||
"files": [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Big modules
|
||||
import { BigNumber } from 'ethers'
|
||||
import { existsSync, mkdirSync } from 'fs'
|
||||
import { existsSync, mkdirSync, readFileSync } from 'fs'
|
||||
import { opendir, readFile, rm } from 'fs/promises'
|
||||
import { createInterface } from 'readline'
|
||||
|
||||
|
@ -80,6 +80,7 @@ export namespace Files {
|
|||
export const makeCacheDir = (prefix?: string): void => mkdirSync(getCachePath('', prefix))
|
||||
|
||||
export const loadRaw = (relative: string): Promise<Buffer> => readFile(getResourcePath(relative))
|
||||
export const loadRawSync = (relative: string): Buffer => readFileSync(getResourcePath(relative))
|
||||
|
||||
export async function wipeCache(prompt: boolean = true): Promise<void> {
|
||||
const dir = await opendir(getCachePath(''))
|
||||
|
@ -126,7 +127,6 @@ export namespace Files {
|
|||
export namespace Json {
|
||||
const cachedJsonData = new Map<string, any>()
|
||||
|
||||
// reading
|
||||
export async function load(
|
||||
relativePath: string,
|
||||
encoding: BufferEncoding = 'utf8',
|
||||
|
@ -140,6 +140,19 @@ export namespace Json {
|
|||
}
|
||||
}
|
||||
|
||||
export function loadSync(
|
||||
relativePath: string,
|
||||
encoding: BufferEncoding = 'utf8',
|
||||
pathGetter: Files.PathGetter = Files.getResourcePath
|
||||
): any {
|
||||
if (cachedJsonData.has(relativePath)) return cachedJsonData.get(relativePath)
|
||||
else {
|
||||
const obj = JSON.parse(readFileSync(pathGetter(relativePath), encoding))
|
||||
cachedJsonData.set(relativePath, obj)
|
||||
return obj
|
||||
}
|
||||
}
|
||||
|
||||
export function toMap<V>(jsonData: any): Map<string, V> {
|
||||
return new Map<string, V>(Object.entries(jsonData))
|
||||
}
|
||||
|
@ -187,6 +200,23 @@ export namespace Onchain {
|
|||
}
|
||||
}
|
||||
|
||||
export function getClassicInstanceDataSync(
|
||||
network: string,
|
||||
token: string,
|
||||
denomination: string
|
||||
): ClassicInstance {
|
||||
const instanceData = Json.getValue(Json.loadSync('onchain/instances.json'), [network, token])
|
||||
return {
|
||||
network: +network,
|
||||
symbol: token.toUpperCase(),
|
||||
decimals: Json.getValue(instanceData, ['decimals']),
|
||||
denomination: +denomination,
|
||||
deployBlock: Json.getValue(instanceData, ['deployedBlockNumber', denomination]),
|
||||
address: Json.getValue(instanceData, ['instanceAddress', denomination]),
|
||||
anonymityMiningEnabled: Json.getValue(instanceData, ['miningEnabled'])
|
||||
}
|
||||
}
|
||||
|
||||
export async function getInstanceLookupKeys(instanceAddress: string): Promise<Keys.InstanceLookup> {
|
||||
// lookup some stuff first
|
||||
const lookupObj: { [key: string]: string } = await Json.load('onchain/instanceAddresses.json')
|
||||
|
@ -204,6 +234,23 @@ export namespace Onchain {
|
|||
}
|
||||
}
|
||||
|
||||
export function getInstanceLookupKeysSync(instanceAddress: string): Keys.InstanceLookup {
|
||||
// lookup some stuff first
|
||||
const lookupObj: { [key: string]: string } = Json.loadSync('onchain/instanceAddresses.json')
|
||||
|
||||
const pathstring: string = Object.entries(lookupObj).find((el) => el[1] === instanceAddress)![0]
|
||||
|
||||
const network = pathstring.match('[0-9]+')![0],
|
||||
token = pathstring.substring(network.length).match('[a-z]+')![0],
|
||||
denomination = pathstring.substring(network.length + token.length)
|
||||
|
||||
return {
|
||||
network: network,
|
||||
token: token,
|
||||
denomination: denomination
|
||||
}
|
||||
}
|
||||
|
||||
export async function getPathstringBasedContent<T>(
|
||||
filepath: string,
|
||||
paths: Array<{
|
||||
|
@ -220,12 +267,31 @@ export namespace Onchain {
|
|||
)
|
||||
}
|
||||
|
||||
export function getPathstringBasedContentSync<T>(
|
||||
filepath: string,
|
||||
paths: Array<{
|
||||
network?: string
|
||||
token?: string
|
||||
denomination?: string
|
||||
}>
|
||||
): Array<T> {
|
||||
return paths.map((path) =>
|
||||
Json.getValue(Json.loadSync(filepath), [
|
||||
`${path.network ?? ''}${path.token ?? ''}${path.denomination ?? ''}`
|
||||
])
|
||||
)
|
||||
}
|
||||
|
||||
export async function getNetworkSymbol(networkId: string): Promise<string> {
|
||||
return (
|
||||
await getPathstringBasedContent<string>('onchain/networkSymbols.json', [{ network: networkId }])
|
||||
)[0]
|
||||
}
|
||||
|
||||
export function getNetworkSymbolSync(networkId: string): string {
|
||||
return getPathstringBasedContentSync<string>('onchain/networkSymbols.json', [{ network: networkId }])[0]
|
||||
}
|
||||
|
||||
export function getInstanceAddresses(
|
||||
paths: Array<{
|
||||
network: string
|
||||
|
@ -236,6 +302,16 @@ export namespace Onchain {
|
|||
return getPathstringBasedContent<string>('onchain/instanceAddresses.json', paths)
|
||||
}
|
||||
|
||||
export function getInstanceAddressesSync(
|
||||
paths: Array<{
|
||||
network: string
|
||||
token: string
|
||||
denomination: string
|
||||
}>
|
||||
): Array<string> {
|
||||
return getPathstringBasedContentSync<string>('onchain/instanceAddresses.json', paths)
|
||||
}
|
||||
|
||||
export async function getInstanceAddress(
|
||||
network: string,
|
||||
token: string,
|
||||
|
@ -244,6 +320,10 @@ export namespace Onchain {
|
|||
return (await getInstanceAddresses([{ network: network, token: token, denomination: denomination }]))[0]
|
||||
}
|
||||
|
||||
export function getInstanceAddressSync(network: string, token: string, denomination: string): string {
|
||||
return getInstanceAddressesSync([{ network: network, token: token, denomination: denomination }])[0]
|
||||
}
|
||||
|
||||
export function getInstanceDeployBlockNums(
|
||||
paths: Array<{
|
||||
network: string
|
||||
|
@ -254,6 +334,16 @@ export namespace Onchain {
|
|||
return getPathstringBasedContent<number>('onchain/deployedBlockNumbers.json', paths)
|
||||
}
|
||||
|
||||
export function getInstanceDeployBlockNumsSync(
|
||||
paths: Array<{
|
||||
network: string
|
||||
token: string
|
||||
denomination: string
|
||||
}>
|
||||
): Array<number> {
|
||||
return getPathstringBasedContentSync<number>('onchain/deployedBlockNumbers.json', paths)
|
||||
}
|
||||
|
||||
export async function getInstanceDeployBlockNum(
|
||||
network: string,
|
||||
token: string,
|
||||
|
@ -264,6 +354,14 @@ export namespace Onchain {
|
|||
)[0]
|
||||
}
|
||||
|
||||
export function getInstanceDeployBlockNumSync(
|
||||
network: string,
|
||||
token: string,
|
||||
denomination: string
|
||||
): number {
|
||||
return getInstanceDeployBlockNumsSync([{ network: network, token: token, denomination: denomination }])[0]
|
||||
}
|
||||
|
||||
export async function getProxyAddress(network: string): Promise<string> {
|
||||
return Json.getValue(await Json.load('onchain/infrastructure.json'), [network, 'proxy'])
|
||||
}
|
||||
|
@ -276,6 +374,18 @@ export namespace Onchain {
|
|||
return Json.getValue(await Json.load('onchain/infrastructure.json'), [network, 'multicall3'])
|
||||
}
|
||||
|
||||
export function getProxyAddressSync(network: string): string {
|
||||
return Json.getValue(Json.loadSync('onchain/infrastructure.json'), [network, 'proxy'])
|
||||
}
|
||||
|
||||
export function getMulticallAddressSync(network: string): string {
|
||||
return Json.getValue(Json.loadSync('onchain/infrastructure.json'), [network, 'multicall'])
|
||||
}
|
||||
|
||||
export function getMulticall3AddressSync(network: string): string {
|
||||
return Json.getValue(Json.loadSync('onchain/infrastructure.json'), [network, 'multicall3'])
|
||||
}
|
||||
|
||||
export async function getTokenData(network: string, token: string): Promise<TokenData> {
|
||||
const data = Json.getValue(await Json.load('onchain/tokens.json'), [network, token])
|
||||
return {
|
||||
|
@ -285,6 +395,15 @@ export namespace Onchain {
|
|||
}
|
||||
}
|
||||
|
||||
export function getTokenDataSync(network: string, token: string): TokenData {
|
||||
const data = Json.getValue(Json.loadSync('onchain/tokens.json'), [network, token])
|
||||
return {
|
||||
network: +network,
|
||||
decimals: +data['decimals'],
|
||||
address: data['address']
|
||||
}
|
||||
}
|
||||
|
||||
export async function getTokenAddress(network: string, token: string): Promise<string> {
|
||||
return (
|
||||
await getPathstringBasedContent<string>('onchain/tokenAddresses.json', [
|
||||
|
@ -293,11 +412,23 @@ export namespace Onchain {
|
|||
)[0]
|
||||
}
|
||||
|
||||
export function getTokenAddressSync(network: string, token: string): string {
|
||||
return getPathstringBasedContentSync<string>('onchain/tokenAddresses.json', [
|
||||
{ network: network, token: token }
|
||||
])[0]
|
||||
}
|
||||
|
||||
export async function getTokenDecimals(network: string, token: string): Promise<number> {
|
||||
return (
|
||||
await getPathstringBasedContent<number>('onchain/decimals.json', [{ network: network, token: token }])
|
||||
)[0]
|
||||
}
|
||||
|
||||
export function getTokenDecimalsSync(network: string, token: string): number {
|
||||
return getPathstringBasedContentSync<number>('onchain/decimals.json', [
|
||||
{ network: network, token: token }
|
||||
])[0]
|
||||
}
|
||||
}
|
||||
|
||||
export namespace Offchain {
|
||||
|
@ -317,9 +448,29 @@ export namespace Offchain {
|
|||
return rpcs.get(keys.next().value)!
|
||||
}
|
||||
|
||||
export function getUncensoredRpcURLSync(network: string, name: string = ''): string {
|
||||
const rpcs = Json.toMap<string>(
|
||||
Json.getValue(Json.loadSync('offchain/infrastructure.json'), ['jrpc-uncensored', network])
|
||||
)
|
||||
|
||||
if (name.length !== 0) {
|
||||
return rpcs.get(name)!
|
||||
}
|
||||
|
||||
let keys = rpcs.keys()
|
||||
let randCount = NumberUtils.getRandomFromRange(0, rpcs.size - 1)
|
||||
for (let i = 0; i < randCount; i++) keys.next()
|
||||
|
||||
return rpcs.get(keys.next().value)!
|
||||
}
|
||||
|
||||
export async function getClassicSubgraphURL(network: string): Promise<string> {
|
||||
return Json.getValue(await Json.load('offchain/infrastructure.json'), ['subgraph', network])
|
||||
}
|
||||
|
||||
export function getClassicSubgraphURLSync(network: string): string {
|
||||
return Json.getValue(Json.loadSync('offchain/infrastructure.json'), ['subgraph', network])
|
||||
}
|
||||
}
|
||||
|
||||
export namespace Constants {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue