before dangerous ops

Signed-off-by: T-Hax <>
This commit is contained in:
T-Hax 2023-05-06 23:59:38 +00:00
parent 4065d89909
commit 704648ed2c
41 changed files with 31021 additions and 460 deletions

View file

@ -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=

View 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.

View file

@ -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": [

View file

@ -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 {