@layerzerolabs/lz-utilities 2.0.8 → 2.0.10-tron

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -65,6 +65,15 @@ function getEvmAccountFromMnemonic(mnemonic, path2 = "m/44'/60'/0'/0/0") {
65
65
  address: wallet.address
66
66
  };
67
67
  }
68
+ function getTronAccountFromMnemonic(mnemonic, path2 = "m/44'/195'/0'/0/0") {
69
+ const wallet = ethers.ethers.Wallet.fromMnemonic(mnemonic, path2);
70
+ return {
71
+ mnemonic,
72
+ path: path2,
73
+ privateKey: wallet.privateKey,
74
+ address: wallet.address
75
+ };
76
+ }
68
77
  function getAptosAccountFromMnemonic(mnemonic, path2 = "m/44'/637'/0'/0'/0'") {
69
78
  if (!aptos__namespace.AptosAccount.isValidPath(path2)) {
70
79
  throw new Error(`Invalid derivation path: ${path2}`);
@@ -281,12 +290,13 @@ function getProjectRootDir(cwd) {
281
290
  return path__default.default.dirname(pnpm);
282
291
  throw new Error("Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml");
283
292
  }
284
- function isHttpServiceReachable(host, port, timeout) {
293
+ function isHttpServiceReachable(host, port, timeout, path2) {
285
294
  return new Promise((resolve, reject) => {
286
295
  const options = {
287
296
  host,
288
297
  port,
289
298
  timeout,
299
+ path: path2,
290
300
  method: "HEAD"
291
301
  };
292
302
  const request = http__default.default.request(options, (response) => {
@@ -391,6 +401,7 @@ exports.getLogger = getLogger;
391
401
  exports.getProjectPackageManager = getProjectPackageManager;
392
402
  exports.getProjectRootDir = getProjectRootDir;
393
403
  exports.getSolanaAccountFromMnemonic = getSolanaAccountFromMnemonic;
404
+ exports.getTronAccountFromMnemonic = getTronAccountFromMnemonic;
394
405
  exports.initLogger = initLogger;
395
406
  exports.isHttpServiceReachable = isHttpServiceReachable;
396
407
  exports.pkgroot = pkgroot;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace"],"mappings":"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","sourcesContent":["import { ChildProcess, SpawnOptions, spawn } from 'child_process'\nimport http from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\nimport { sync as findUpSync } from 'find-up'\nimport kill from 'tree-kill'\nimport { Logger } from 'winston'\n\nexport async function sleep(timeout: number) {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport function isHttpServiceReachable(host: string, port: number, timeout: number): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const options = {\n host,\n port,\n timeout,\n method: 'HEAD',\n }\n\n const request = http.request(options, (response) => {\n resolve(true)\n })\n\n request.on('error', (err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (!m || !m.groups || !m.groups.host || !m.groups.schema || !m.groups.port) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n\nexport class CmdExecutor {\n private currentProcess: ChildProcess | null = null\n\n private onFinish: Promise<void> | null = null\n\n public executeCmd(\n command: string,\n args: string[],\n options: SpawnOptions,\n verbose = false,\n runningCheck?: { key: string; runningNotify: (running: boolean) => void },\n logger?: Logger\n ): Promise<void> {\n if (logger) {\n logger.info(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n } else {\n console.log(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n }\n return new Promise<void>((resolve, reject) => {\n let notified = false\n this.currentProcess = spawn(command, args, options)\n if (!this.currentProcess) {\n throw new Error(`Failed to spawn command: ${command} ${args?.join(' ') ?? ''}`)\n }\n\n // Listen for standard output from the child process and print it to the console\n this.currentProcess.stdout?.on('data', (data) => {\n if (runningCheck && !notified && data.toString().includes(runningCheck.key)) {\n runningCheck.runningNotify(true)\n notified = true\n }\n if (verbose && logger) {\n logger.info(data.toString())\n } else if (verbose) {\n process.stdout.write(data)\n }\n })\n\n // Listen for errors from the child process and print them to the console\n this.currentProcess.stderr?.on('data', (data) => {\n if (logger) {\n logger.error(data.toString())\n } else {\n console.error(data.toString())\n }\n })\n\n // Listen for the exit event of the child process and resolve the promise\n // if the child process exits normally (with code 0)\n this.currentProcess.on('exit', (code) => {\n if (code && code !== 0) {\n if (logger) {\n logger.info(`Command ${command} exited with code ${code}.`)\n } else {\n console.info(`Command ${command} exited with code ${code}.`)\n }\n reject({ command: `${command} ${args.join(' ')}` })\n return\n }\n resolve()\n })\n })\n }\n\n public async interrupt(killDescendents = true) {\n if (this.currentProcess) {\n console.log('Killing process:', this.currentProcess.pid)\n if (killDescendents) {\n kill(this.currentProcess.pid!)\n // the implementation of tree-kill is using spawn, which is async. So we need to wait for a while\n await sleep(2000)\n } else {\n this.currentProcess.kill()\n }\n this.currentProcess = null\n }\n }\n}\n","import { bytesToHex } from '@noble/hashes/utils'\nimport { Keypair } from '@solana/web3.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, bytesToHex(bip39.mnemonicToSeedSync(normalizeMnemonics)))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger\n\nexport { Logger }\n\nfunction getStackTrace() {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer() {\n const ancestors: any[] = []\n return function (key: any, value: any) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n // @ts-ignore\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === undefined || m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf((info) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() || ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const spaces = info.metadata?.pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string' ? info.message : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const format = info.metadata?.format\n const message = format ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n})\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string) {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n return logger\n}\n\nconst exportsObject = {}\nif (process.env['NODE_ENV'] === 'test') {\n // @ts-ignore\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment | undefined {\n return deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = !options.chain || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = !options.network || options.network === deployment.network\n const hasMatchingSource = !options.source || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) =>\n networkToEndpointId(deployment.network, v)\n )\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!contractCache[key]) {\n const Contract = new ethers.ContractFactory(deployment.abi!, deployment.bytecode!)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string) {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match || []\n const dirname = basePath || path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity) {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines && lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string) {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace"],"mappings":";AAAA,SAAqC,aAAa;AAClD,OAAO,UAA8B;AACrC,OAAO,UAAU;;;ACFjB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,kBAAkB;AAC9B,SAAS,cAAc;AAEvB,SAAS,iBAAiB;AASnB,SAAS,cAAc,WAAsB,SAAiB,QAAgB,OAAuB;AAaxG,UAAQ,WAAW;AAAA,IACf,KAAK,UAAU;AAEX,aAAO,aAAa,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,IACnD,KAAK,UAAU;AAEX,aAAO,cAAc,OAAO,KAAK,MAAM,KAAK,KAAK;AAAA,IACrD,KAAK,UAAU;AAEX,aAAO,cAAc,OAAO,KAAK,MAAM;AAAA,IAC3C;AACI,YAAM,IAAI,MAAM,sBAAsB,SAAS,EAAE;AAAA,EACzD;AACJ;AAEO,SAAS,0BAA0B,UAAkBA,QAAO,oBAAqC;AACpG,QAAM,SAAS,OAAO,OAAO,aAAa,UAAUA,KAAI;AACxD,SAAO;AAAA,IACH;AAAA,IACA,MAAAA;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO;AAAA,EACpB;AACJ;AAEO,SAAS,2BAA2B,UAAkBA,QAAO,qBAAsC;AACtG,QAAM,SAAS,OAAO,OAAO,aAAa,UAAUA,KAAI;AACxD,SAAO;AAAA,IACH;AAAA,IACA,MAAAA;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO;AAAA,EACpB;AACJ;AAEO,SAAS,4BAA4B,UAAkBA,QAAO,uBAAwC;AAEzG,MAAI,CAAO,mBAAa,YAAYA,KAAI,GAAG;AACvC,UAAM,IAAI,MAAM,4BAA4BA,KAAI,EAAE;AAAA,EACtD;AACA,QAAM,qBAAqB,SACtB,KAAK,EACL,MAAM,KAAK,EACX,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,EAChC,KAAK,GAAG;AACb;AACI,UAAM,EAAE,IAAI,IAAU,iBAAWA,OAAM,WAAiB,yBAAmB,kBAAkB,CAAC,CAAC;AAC/F,UAAM,UAAU,IAAU,mBAAa,IAAI,WAAW,GAAG,CAAC,EAAE,mBAAmB;AAC/E,WAAO;AAAA,MACH;AAAA,MACA,MAAAA;AAAA,MACA,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ;AAAA,IACrB;AAAA,EACJ;AACJ;AAEO,SAAS,6BAA6B,UAAkBA,QAAO,oBAAqC;AACvG,QAAM,OAAa,yBAAmB,UAAU,EAAE;AAClD,QAAM,UAAU,QAAQ,SAAsB,wBAAWA,OAAM,KAAK,SAAS,KAAK,CAAC,EAAE,GAAG;AACxF,SAAO;AAAA,IACH;AAAA,IACA,MAAAA;AAAA,IACA,YAAY,OAAO,MAAM,QAAQ,QAAQ,SAAS;AAAA,IAClD,SAAS,QAAQ,UAAU,SAAS;AAAA,EACxC;AACJ;AAEO,SAAS,uBAAuB,WAAsB,UAAkBA,OAAgC;AAC3G,UAAQ,WAAW;AAAA,IACf,KAAK,UAAU;AACX,aAAO,0BAA0B,UAAUA,KAAI;AAAA,IACnD,KAAK,UAAU;AACX,aAAO,4BAA4B,UAAUA,KAAI;AAAA,IACrD,KAAK,UAAU;AACX,aAAO,6BAA6B,UAAUA,KAAI;AAAA,IACtD;AACI,YAAM,IAAI,MAAM,sBAAsB,SAAS,EAAE;AAAA,EACzD;AACJ;;;AC5GA,YAAY,aAAa;AACzB,SAAS,QAAQ,cAAc;AAE/B,IAAI;AAIJ,SAAS,gBAAgB;AACrB,QAAM,WAAW,MAAM;AACvB,QAAM,kBAAkB;AACxB,QAAM,SAAS,IAAI,MAAM,EAAE;AAC3B,QAAM,kBAAkB;AACxB,SAAO;AACX;AAGO,SAAS,sBAAsB;AAClC,QAAM,YAAmB,CAAC;AAC1B,SAAO,SAAU,KAAU,OAAY;AACnC,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,aAAO;AAAA,IACX;AAIA,WAAO,UAAU,SAAS,KAAK,UAAU,GAAG,EAAE,MAAM,MAAM;AACtD,gBAAU,IAAI;AAAA,IAClB;AACA,QAAI,UAAU,SAAS,KAAK,GAAG;AAC3B,aAAO;AAAA,IACX;AACA,cAAU,KAAK,KAAK;AACpB,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,kBAAkB,MAAsB;AAC7C,aAAW,WAAW,CAAC,sBAAsB,mBAAmB,GAAG;AAC/D,UAAM,IAAI,KAAK,MAAM,OAAO;AAC5B,QAAI,MAAM,UAAa,MAAM,MAAM;AAC/B;AAAA,IACJ;AACA,UAAM,CAAC,EAAE,YAAY,IAAI;AACzB,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,IAAM,YAAY,OAAO,OAAO,CAAC,SAAS;AACtC,MAAI,KAAK,MAAM,YAAY,MAAM,WAAW,KAAK,MAAM,YAAY,MAAM,QAAQ;AAC7E,WAAO,GAAG,KAAK,SAAS,IAAI,KAAK,MAAM,YAAY,CAAC,KAAK,KAAK,OAAO;AAAA,EACzE;AACA,QAAM,QAAQ,cAAc,KAAK;AAEjC,QAAM,aAAa,MAAM,MAAM,IAAI;AACnC,QAAM,QACF,WAAW,UAAU,CAAC,SAAS;AAC3B,WAAO,KAAK,MAAM,kBAAkB;AAAA,EACxC,CAAC,IAAI;AAET,MAAI,WAAW;AACf,MAAI,WAAW,SAAS,OAAO;AAC3B,UAAM,OAAO,WAAW,KAAK;AAC7B,eAAW,kBAAkB,IAAI;AAAA,EACrC;AAEA,QAAM,UAAoB,CAAC;AAC3B,MAAI,aAAa,aAAa;AAC1B,YAAQ,KAAK,QAAQ;AAAA,EACzB;AAEA,QAAM,SAAS,KAAK,UAAU,WAAW,OAAO,IAAI;AACpD,QAAM,QACF,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,KAAK,UAAU,KAAK,SAAS,oBAAoB,GAAG,MAAM;AAChH,QAAMC,UAAS,KAAK,UAAU;AAC9B,QAAM,UAAUA,UAASA,QAAO,QAAQ,OAAO,KAAK,IAAI;AAExD,SAAO,CAAC,GAAG,SAAS,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,SAAS,IAAI,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAC5G,CAAC;AAED,IAAM,eAAe,OAAO;AAAA,EACxB,OAAO,UAAU,EAAE,QAAQ,oBAAoB,CAAC;AAAA,EAChD,OAAO,MAAM;AAAA,EACb,OAAO,SAAS,EAAE,YAAY,CAAC,SAAS,aAAa,SAAS,EAAE,CAAC;AAAA,EACjE;AAAA,EACA,OAAO,SAAS;AAAA,IACZ,KAAK;AAAA,EACT,CAAC;AACL;AAEO,SAAS,WAAW,OAAe;AACtC,MAAI,CAAC,QAAQ;AACT,aAASC,cAAa,KAAK;AAAA,EAC/B;AACJ;AAEO,SAASA,cAAa,OAAuB;AAChD,QAAMC,UAAiB,qBAAa;AAAA,IAChC;AAAA,IACA,QAAQ;AAAA,IACR,YAAY,CAAC,IAAY,mBAAW,QAAQ,CAAC;AAAA,EACjD,CAAC;AACD,SAAOA;AACX;AAEO,SAAS,YAAoB;AAChC,aAAW,QAAQ,IAAI,UAAU,MAAM;AACvC,SAAO;AACX;AAEA,IAAM,gBAAgB,CAAC;AACvB,IAAI,QAAQ,IAAI,UAAU,MAAM,QAAQ;AAEpC,gBAAc,sBAAsB;AACxC;;;AClHA,SAAS,UAAAC,eAAc;AAEvB;AAAA,EAKI;AAAA,EACA;AAAA,OACG;AAgCA,SAAS,eACZ,aACA,eACA,SACsB;AACtB,SAAO,YAAY,KAAK,CAAC,eAAe;AACpC,QAAI,2BAA2B,WAAW,SAAS;AACnD,QAAI,CAAC,4BAA4BA,QAAO,MAAM,UAAU,aAAa,GAAG;AACpE,iCACIA,QAAO,MAAM,WAAW,WAAW,OAAO,MAAMA,QAAO,MAAM,WAAW,aAAa;AAAA,IAC7F;AACA,UAAM,mBAAmB,CAAC,QAAQ,SAAS,QAAQ,UAAU,eAAe,WAAW,OAAO;AAC9F,UAAM,qBAAqB,CAAC,QAAQ,WAAW,QAAQ,YAAY,WAAW;AAC9E,UAAM,oBAAoB,CAAC,QAAQ,UAAU,QAAQ,WAAW,WAAW;AAC3E,QAAI,sBAAsB;AAC1B,QAAI,QAAQ,YAAY;AACpB,YAAM,sBAAsB,WAAW,mBAAmB;AAAA,QAAI,CAAC,MAC3D,oBAAoB,WAAW,SAAS,CAAC;AAAA,MAC7C;AACA,4BAAsB,oBAAoB,SAAS,QAAQ,UAAU;AAAA,IACzE;AACA,WACI,4BACA,oBACA,sBACA,uBACA;AAAA,EAER,CAAC;AACL;AAGA,IAAM,gBAA8B,CAAC;AAC9B,SAAS,wBACZ,YACA,UACC;AACD,QAAM,MAAM,GAAG,WAAW,OAAO,IAAI,WAAW,OAAO;AACvD,MAAI,CAAC,cAAc,GAAG,GAAG;AACrB,UAAM,WAAW,IAAIA,QAAO,gBAAgB,WAAW,KAAM,WAAW,QAAS;AACjF,kBAAc,GAAG,IAAI,SAAS,OAAO,WAAW,OAAO;AAAA,EAC3D;AACA,MAAI,CAAC,UAAU;AACX,WAAO,cAAc,GAAG;AAAA,EAC5B;AACA,SAAO,cAAc,GAAG,EAAE,QAAQ,QAAQ;AAC9C;;;ACvFA,SAAS,qBAAqB;AAMvB,SAAS,QAAQJ,OAAc;AAClC,QAAM,QAAQA,MAAK,MAAM,2BAA2B;AACpD,QAAM,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC;AAC/B,QAAMK,WAAU,YAAYL;AAC5B,SAAOK;AACX;AAEA,SAASC,eAAc,kBAAkB,UAAU;AAC/C,QAAM,WAAW,MAAM;AACvB,QAAM,kBAAkB;AACxB,QAAM,SAAS,IAAI,MAAM,EAAE;AAC3B,QAAM,kBAAkB;AACxB,SAAO;AACX;AAEA,SAAS,YAAgC;AACrC,QAAM,SAASA,eAAc,EAAE,KAAK,IAAI,MAAM,IAAI;AAMlD,MAAI,SAAS,MAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AACvC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,IAAI,KAAK,MAAM,qBAAqB;AAC1C,QAAI,GAAG;AACH,aAAO,EAAE,CAAC;AAAA,IACd;AAAA,EACJ;AACJ;AAQO,SAAS,QAAQ,aAAqB,gBAAyB;AAClE,MAAI,mBAAmB,QAAW;AAC9B,qBAAiB,UAAU;AAC3B,QAAI,mBAAmB,QAAW;AAC9B,uBAAiB;AAAA,IACrB;AAAA,EACJ;AAEA,QAAM,WAAW,cAAc,cAAc,EAAE,QAAQ,GAAG,WAAW,eAAe;AACpF,QAAM,cAAc,QAAQ,QAAQ;AAMpC,SAAO,YAAY,QAAQ,4DAA4D,EAAE;AAC7F;;;AJlDA,SAAS,QAAQ,kBAAkB;AACnC,OAAO,UAAU;AAGjB,eAAsB,MAAM,SAAiB;AACzC,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,OAAO,CAAC;AAC/D;AAEO,SAAS,yBAAyB,KAAc;AACnD,QAAM,OAAO,WAAW,aAAa,EAAE,IAAI,CAAC;AAC5C,MAAI;AAAM,WAAO;AAEjB,QAAM,MAAM,WAAW,qBAAqB,EAAE,IAAI,CAAC;AACnD,MAAI;AAAK,WAAO;AAGhB,QAAM,OAAO,WAAW,kBAAkB,EAAE,IAAI,CAAC;AACjD,MAAI;AAAM,WAAO;AAEjB,QAAM,IAAI,MAAM,uCAAuC;AAC3D;AAEO,SAAS,kBAAkB,KAAc;AAC5C,QAAM,OAAO,WAAW,aAAa,EAAE,IAAI,CAAC;AAC5C,MAAI;AAAM,WAAO,KAAK,QAAQ,IAAI;AAElC,QAAM,MAAM,WAAW,qBAAqB,EAAE,IAAI,CAAC;AACnD,MAAI;AAAK,WAAO,KAAK,QAAQ,GAAG;AAEhC,QAAM,OAAO,WAAW,kBAAkB,EAAE,IAAI,CAAC;AACjD,MAAI;AAAM,WAAO,KAAK,QAAQ,IAAI;AAElC,QAAM,IAAI,MAAM,8DAA8D;AAClF;AAEO,SAAS,uBAAuB,MAAc,MAAc,SAAiBN,OAAiC;AACjH,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,UAAM,UAA0B;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAA;AAAA,MACA,QAAQ;AAAA,IACZ;AAEA,UAAM,UAAU,KAAK,QAAQ,SAAS,CAAC,aAAa;AAChD,cAAQ,IAAI;AAAA,IAChB,CAAC;AAED,YAAQ,GAAG,SAAS,CAAC,QAAQ;AACzB,cAAQ,KAAK;AAAA,IACjB,CAAC;AAED,YAAQ,IAAI;AAAA,EAChB,CAAC;AACL;AAEO,SAAS,eAAe,KAI7B;AAEE,QAAM,IAAI,IAAI,MAAM,oDAAoD;AACxE,MAAI,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,QAAQ,CAAC,EAAE,OAAO,UAAU,CAAC,EAAE,OAAO,MAAM;AACzE,UAAM,IAAI,MAAM,eAAe,GAAG,EAAE;AAAA,EACxC;AAEA,SAAO;AAAA,IACH,QAAQ,EAAE,OAAO;AAAA,IACjB,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,EACnB;AACJ;AAEO,IAAM,cAAN,MAAkB;AAAA,EAAlB;AACH,SAAQ,iBAAsC;AAE9C,SAAQ,WAAiC;AAAA;AAAA,EAElC,WACH,SACA,MACA,SACA,UAAU,OACV,cACAG,SACa;AACb,QAAIA,SAAQ;AACR,MAAAA,QAAO,KAAK,oBAAoB,OAAO,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE,EAAE;AAAA,IACtE,OAAO;AACH,cAAQ,IAAI,oBAAoB,OAAO,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE,EAAE;AAAA,IACtE;AACA,WAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC1C,UAAI,WAAW;AACf,WAAK,iBAAiB,MAAM,SAAS,MAAM,OAAO;AAClD,UAAI,CAAC,KAAK,gBAAgB;AACtB,cAAM,IAAI,MAAM,4BAA4B,OAAO,IAAI,MAAM,KAAK,GAAG,KAAK,EAAE,EAAE;AAAA,MAClF;AAGA,WAAK,eAAe,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAC7C,YAAI,gBAAgB,CAAC,YAAY,KAAK,SAAS,EAAE,SAAS,aAAa,GAAG,GAAG;AACzE,uBAAa,cAAc,IAAI;AAC/B,qBAAW;AAAA,QACf;AACA,YAAI,WAAWA,SAAQ;AACnB,UAAAA,QAAO,KAAK,KAAK,SAAS,CAAC;AAAA,QAC/B,WAAW,SAAS;AAChB,kBAAQ,OAAO,MAAM,IAAI;AAAA,QAC7B;AAAA,MACJ,CAAC;AAGD,WAAK,eAAe,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAC7C,YAAIA,SAAQ;AACR,UAAAA,QAAO,MAAM,KAAK,SAAS,CAAC;AAAA,QAChC,OAAO;AACH,kBAAQ,MAAM,KAAK,SAAS,CAAC;AAAA,QACjC;AAAA,MACJ,CAAC;AAID,WAAK,eAAe,GAAG,QAAQ,CAAC,SAAS;AACrC,YAAI,QAAQ,SAAS,GAAG;AACpB,cAAIA,SAAQ;AACR,YAAAA,QAAO,KAAK,WAAW,OAAO,qBAAqB,IAAI,GAAG;AAAA,UAC9D,OAAO;AACH,oBAAQ,KAAK,WAAW,OAAO,qBAAqB,IAAI,GAAG;AAAA,UAC/D;AACA,iBAAO,EAAE,SAAS,GAAG,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;AAClD;AAAA,QACJ;AACA,gBAAQ;AAAA,MACZ,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEA,MAAa,UAAU,kBAAkB,MAAM;AAC3C,QAAI,KAAK,gBAAgB;AACrB,cAAQ,IAAI,oBAAoB,KAAK,eAAe,GAAG;AACvD,UAAI,iBAAiB;AACjB,aAAK,KAAK,eAAe,GAAI;AAE7B,cAAM,MAAM,GAAI;AAAA,MACpB,OAAO;AACH,aAAK,eAAe,KAAK;AAAA,MAC7B;AACA,WAAK,iBAAiB;AAAA,IAC1B;AAAA,EACJ;AACJ","sourcesContent":["import { ChildProcess, SpawnOptions, spawn } from 'child_process'\nimport http, { RequestOptions } from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\n\nimport { sync as findUpSync } from 'find-up'\nimport kill from 'tree-kill'\nimport { Logger } from 'winston'\n\nexport async function sleep(timeout: number) {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport function isHttpServiceReachable(host: string, port: number, timeout: number, path?: string): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const options: RequestOptions = {\n host,\n port,\n timeout,\n path,\n method: 'HEAD',\n }\n\n const request = http.request(options, (response) => {\n resolve(true)\n })\n\n request.on('error', (err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (!m || !m.groups || !m.groups.host || !m.groups.schema || !m.groups.port) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n\nexport class CmdExecutor {\n private currentProcess: ChildProcess | null = null\n\n private onFinish: Promise<void> | null = null\n\n public executeCmd(\n command: string,\n args: string[],\n options: SpawnOptions,\n verbose = false,\n runningCheck?: { key: string; runningNotify: (running: boolean) => void },\n logger?: Logger\n ): Promise<void> {\n if (logger) {\n logger.info(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n } else {\n console.log(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n }\n return new Promise<void>((resolve, reject) => {\n let notified = false\n this.currentProcess = spawn(command, args, options)\n if (!this.currentProcess) {\n throw new Error(`Failed to spawn command: ${command} ${args?.join(' ') ?? ''}`)\n }\n\n // Listen for standard output from the child process and print it to the console\n this.currentProcess.stdout?.on('data', (data) => {\n if (runningCheck && !notified && data.toString().includes(runningCheck.key)) {\n runningCheck.runningNotify(true)\n notified = true\n }\n if (verbose && logger) {\n logger.info(data.toString())\n } else if (verbose) {\n process.stdout.write(data)\n }\n })\n\n // Listen for errors from the child process and print them to the console\n this.currentProcess.stderr?.on('data', (data) => {\n if (logger) {\n logger.error(data.toString())\n } else {\n console.error(data.toString())\n }\n })\n\n // Listen for the exit event of the child process and resolve the promise\n // if the child process exits normally (with code 0)\n this.currentProcess.on('exit', (code) => {\n if (code && code !== 0) {\n if (logger) {\n logger.info(`Command ${command} exited with code ${code}.`)\n } else {\n console.info(`Command ${command} exited with code ${code}.`)\n }\n reject({ command: `${command} ${args.join(' ')}` })\n return\n }\n resolve()\n })\n })\n }\n\n public async interrupt(killDescendents = true) {\n if (this.currentProcess) {\n console.log('Killing process:', this.currentProcess.pid)\n if (killDescendents) {\n kill(this.currentProcess.pid!)\n // the implementation of tree-kill is using spawn, which is async. So we need to wait for a while\n await sleep(2000)\n } else {\n this.currentProcess.kill()\n }\n this.currentProcess = null\n }\n }\n}\n","import { bytesToHex } from '@noble/hashes/utils'\nimport { Keypair } from '@solana/web3.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getTronAccountFromMnemonic(mnemonic: string, path = \"m/44'/195'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, bytesToHex(bip39.mnemonicToSeedSync(normalizeMnemonics)))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger\n\nexport { Logger }\n\nfunction getStackTrace() {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer() {\n const ancestors: any[] = []\n return function (key: any, value: any) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n // @ts-ignore\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === undefined || m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf((info) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() || ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const spaces = info.metadata?.pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string' ? info.message : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const format = info.metadata?.format\n const message = format ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n})\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string) {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n return logger\n}\n\nconst exportsObject = {}\nif (process.env['NODE_ENV'] === 'test') {\n // @ts-ignore\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment | undefined {\n return deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = !options.chain || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = !options.network || options.network === deployment.network\n const hasMatchingSource = !options.source || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) =>\n networkToEndpointId(deployment.network, v)\n )\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!contractCache[key]) {\n const Contract = new ethers.ContractFactory(deployment.abi!, deployment.bytecode!)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string) {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match || []\n const dirname = basePath || path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity) {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines && lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string) {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n"]}
package/dist/index.d.mts CHANGED
@@ -12,6 +12,7 @@ interface AccountMnemonic {
12
12
  }
13
13
  declare function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string;
14
14
  declare function getEvmAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
15
+ declare function getTronAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
15
16
  declare function getAptosAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
16
17
  declare function getSolanaAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
17
18
  declare function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic;
@@ -69,7 +70,7 @@ declare function pkgroot(packageName: string, relativeToPath?: string): string;
69
70
  declare function sleep(timeout: number): Promise<void>;
70
71
  declare function getProjectPackageManager(cwd?: string): "yarn" | "npm" | "pnpm";
71
72
  declare function getProjectRootDir(cwd?: string): string;
72
- declare function isHttpServiceReachable(host: string, port: number, timeout: number): Promise<boolean>;
73
+ declare function isHttpServiceReachable(host: string, port: number, timeout: number, path?: string): Promise<boolean>;
73
74
  declare function extractUrlInfo(url: string): {
74
75
  schema: 'http' | 'https';
75
76
  host: string;
@@ -85,4 +86,4 @@ declare class CmdExecutor {
85
86
  interrupt(killDescendents?: boolean): Promise<void>;
86
87
  }
87
88
 
88
- export { type AccountMnemonic, CmdExecutor, type Deployment, createLogger, deploymentToEvmContract, dirname, extractUrlInfo, findDeployment, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, initLogger, isHttpServiceReachable, pkgroot, sleep };
89
+ export { type AccountMnemonic, CmdExecutor, type Deployment, createLogger, deploymentToEvmContract, dirname, extractUrlInfo, findDeployment, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, getTronAccountFromMnemonic, initLogger, isHttpServiceReachable, pkgroot, sleep };
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ interface AccountMnemonic {
12
12
  }
13
13
  declare function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string;
14
14
  declare function getEvmAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
15
+ declare function getTronAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
15
16
  declare function getAptosAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
16
17
  declare function getSolanaAccountFromMnemonic(mnemonic: string, path?: string): AccountMnemonic;
17
18
  declare function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic;
@@ -69,7 +70,7 @@ declare function pkgroot(packageName: string, relativeToPath?: string): string;
69
70
  declare function sleep(timeout: number): Promise<void>;
70
71
  declare function getProjectPackageManager(cwd?: string): "yarn" | "npm" | "pnpm";
71
72
  declare function getProjectRootDir(cwd?: string): string;
72
- declare function isHttpServiceReachable(host: string, port: number, timeout: number): Promise<boolean>;
73
+ declare function isHttpServiceReachable(host: string, port: number, timeout: number, path?: string): Promise<boolean>;
73
74
  declare function extractUrlInfo(url: string): {
74
75
  schema: 'http' | 'https';
75
76
  host: string;
@@ -85,4 +86,4 @@ declare class CmdExecutor {
85
86
  interrupt(killDescendents?: boolean): Promise<void>;
86
87
  }
87
88
 
88
- export { type AccountMnemonic, CmdExecutor, type Deployment, createLogger, deploymentToEvmContract, dirname, extractUrlInfo, findDeployment, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, initLogger, isHttpServiceReachable, pkgroot, sleep };
89
+ export { type AccountMnemonic, CmdExecutor, type Deployment, createLogger, deploymentToEvmContract, dirname, extractUrlInfo, findDeployment, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, getTronAccountFromMnemonic, initLogger, isHttpServiceReachable, pkgroot, sleep };
package/dist/index.mjs CHANGED
@@ -37,6 +37,15 @@ function getEvmAccountFromMnemonic(mnemonic, path2 = "m/44'/60'/0'/0/0") {
37
37
  address: wallet.address
38
38
  };
39
39
  }
40
+ function getTronAccountFromMnemonic(mnemonic, path2 = "m/44'/195'/0'/0/0") {
41
+ const wallet = ethers.Wallet.fromMnemonic(mnemonic, path2);
42
+ return {
43
+ mnemonic,
44
+ path: path2,
45
+ privateKey: wallet.privateKey,
46
+ address: wallet.address
47
+ };
48
+ }
40
49
  function getAptosAccountFromMnemonic(mnemonic, path2 = "m/44'/637'/0'/0'/0'") {
41
50
  if (!aptos.AptosAccount.isValidPath(path2)) {
42
51
  throw new Error(`Invalid derivation path: ${path2}`);
@@ -253,12 +262,13 @@ function getProjectRootDir(cwd) {
253
262
  return path.dirname(pnpm);
254
263
  throw new Error("Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml");
255
264
  }
256
- function isHttpServiceReachable(host, port, timeout) {
265
+ function isHttpServiceReachable(host, port, timeout, path2) {
257
266
  return new Promise((resolve, reject) => {
258
267
  const options = {
259
268
  host,
260
269
  port,
261
270
  timeout,
271
+ path: path2,
262
272
  method: "HEAD"
263
273
  };
264
274
  const request = http.request(options, (response) => {
@@ -344,6 +354,6 @@ var CmdExecutor = class {
344
354
  }
345
355
  };
346
356
 
347
- export { CmdExecutor, createLogger2 as createLogger, deploymentToEvmContract, dirname, extractUrlInfo, findDeployment, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, initLogger, isHttpServiceReachable, pkgroot, sleep };
357
+ export { CmdExecutor, createLogger2 as createLogger, deploymentToEvmContract, dirname, extractUrlInfo, findDeployment, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, getTronAccountFromMnemonic, initLogger, isHttpServiceReachable, pkgroot, sleep };
348
358
  //# sourceMappingURL=out.js.map
349
359
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace"],"mappings":"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","sourcesContent":["import { ChildProcess, SpawnOptions, spawn } from 'child_process'\nimport http from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\nimport { sync as findUpSync } from 'find-up'\nimport kill from 'tree-kill'\nimport { Logger } from 'winston'\n\nexport async function sleep(timeout: number) {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport function isHttpServiceReachable(host: string, port: number, timeout: number): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const options = {\n host,\n port,\n timeout,\n method: 'HEAD',\n }\n\n const request = http.request(options, (response) => {\n resolve(true)\n })\n\n request.on('error', (err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (!m || !m.groups || !m.groups.host || !m.groups.schema || !m.groups.port) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n\nexport class CmdExecutor {\n private currentProcess: ChildProcess | null = null\n\n private onFinish: Promise<void> | null = null\n\n public executeCmd(\n command: string,\n args: string[],\n options: SpawnOptions,\n verbose = false,\n runningCheck?: { key: string; runningNotify: (running: boolean) => void },\n logger?: Logger\n ): Promise<void> {\n if (logger) {\n logger.info(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n } else {\n console.log(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n }\n return new Promise<void>((resolve, reject) => {\n let notified = false\n this.currentProcess = spawn(command, args, options)\n if (!this.currentProcess) {\n throw new Error(`Failed to spawn command: ${command} ${args?.join(' ') ?? ''}`)\n }\n\n // Listen for standard output from the child process and print it to the console\n this.currentProcess.stdout?.on('data', (data) => {\n if (runningCheck && !notified && data.toString().includes(runningCheck.key)) {\n runningCheck.runningNotify(true)\n notified = true\n }\n if (verbose && logger) {\n logger.info(data.toString())\n } else if (verbose) {\n process.stdout.write(data)\n }\n })\n\n // Listen for errors from the child process and print them to the console\n this.currentProcess.stderr?.on('data', (data) => {\n if (logger) {\n logger.error(data.toString())\n } else {\n console.error(data.toString())\n }\n })\n\n // Listen for the exit event of the child process and resolve the promise\n // if the child process exits normally (with code 0)\n this.currentProcess.on('exit', (code) => {\n if (code && code !== 0) {\n if (logger) {\n logger.info(`Command ${command} exited with code ${code}.`)\n } else {\n console.info(`Command ${command} exited with code ${code}.`)\n }\n reject({ command: `${command} ${args.join(' ')}` })\n return\n }\n resolve()\n })\n })\n }\n\n public async interrupt(killDescendents = true) {\n if (this.currentProcess) {\n console.log('Killing process:', this.currentProcess.pid)\n if (killDescendents) {\n kill(this.currentProcess.pid!)\n // the implementation of tree-kill is using spawn, which is async. So we need to wait for a while\n await sleep(2000)\n } else {\n this.currentProcess.kill()\n }\n this.currentProcess = null\n }\n }\n}\n","import { bytesToHex } from '@noble/hashes/utils'\nimport { Keypair } from '@solana/web3.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, bytesToHex(bip39.mnemonicToSeedSync(normalizeMnemonics)))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger\n\nexport { Logger }\n\nfunction getStackTrace() {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer() {\n const ancestors: any[] = []\n return function (key: any, value: any) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n // @ts-ignore\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === undefined || m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf((info) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() || ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const spaces = info.metadata?.pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string' ? info.message : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const format = info.metadata?.format\n const message = format ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n})\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string) {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n return logger\n}\n\nconst exportsObject = {}\nif (process.env['NODE_ENV'] === 'test') {\n // @ts-ignore\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment | undefined {\n return deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = !options.chain || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = !options.network || options.network === deployment.network\n const hasMatchingSource = !options.source || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) =>\n networkToEndpointId(deployment.network, v)\n )\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!contractCache[key]) {\n const Contract = new ethers.ContractFactory(deployment.abi!, deployment.bytecode!)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string) {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match || []\n const dirname = basePath || path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity) {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines && lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string) {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace"],"mappings":"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","sourcesContent":["import { ChildProcess, SpawnOptions, spawn } from 'child_process'\nimport http, { RequestOptions } from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\n\nimport { sync as findUpSync } from 'find-up'\nimport kill from 'tree-kill'\nimport { Logger } from 'winston'\n\nexport async function sleep(timeout: number) {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string) {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport function isHttpServiceReachable(host: string, port: number, timeout: number, path?: string): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const options: RequestOptions = {\n host,\n port,\n timeout,\n path,\n method: 'HEAD',\n }\n\n const request = http.request(options, (response) => {\n resolve(true)\n })\n\n request.on('error', (err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (!m || !m.groups || !m.groups.host || !m.groups.schema || !m.groups.port) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n\nexport class CmdExecutor {\n private currentProcess: ChildProcess | null = null\n\n private onFinish: Promise<void> | null = null\n\n public executeCmd(\n command: string,\n args: string[],\n options: SpawnOptions,\n verbose = false,\n runningCheck?: { key: string; runningNotify: (running: boolean) => void },\n logger?: Logger\n ): Promise<void> {\n if (logger) {\n logger.info(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n } else {\n console.log(`Running command: ${command} ${args?.join(' ') ?? ''}`)\n }\n return new Promise<void>((resolve, reject) => {\n let notified = false\n this.currentProcess = spawn(command, args, options)\n if (!this.currentProcess) {\n throw new Error(`Failed to spawn command: ${command} ${args?.join(' ') ?? ''}`)\n }\n\n // Listen for standard output from the child process and print it to the console\n this.currentProcess.stdout?.on('data', (data) => {\n if (runningCheck && !notified && data.toString().includes(runningCheck.key)) {\n runningCheck.runningNotify(true)\n notified = true\n }\n if (verbose && logger) {\n logger.info(data.toString())\n } else if (verbose) {\n process.stdout.write(data)\n }\n })\n\n // Listen for errors from the child process and print them to the console\n this.currentProcess.stderr?.on('data', (data) => {\n if (logger) {\n logger.error(data.toString())\n } else {\n console.error(data.toString())\n }\n })\n\n // Listen for the exit event of the child process and resolve the promise\n // if the child process exits normally (with code 0)\n this.currentProcess.on('exit', (code) => {\n if (code && code !== 0) {\n if (logger) {\n logger.info(`Command ${command} exited with code ${code}.`)\n } else {\n console.info(`Command ${command} exited with code ${code}.`)\n }\n reject({ command: `${command} ${args.join(' ')}` })\n return\n }\n resolve()\n })\n })\n }\n\n public async interrupt(killDescendents = true) {\n if (this.currentProcess) {\n console.log('Killing process:', this.currentProcess.pid)\n if (killDescendents) {\n kill(this.currentProcess.pid!)\n // the implementation of tree-kill is using spawn, which is async. So we need to wait for a while\n await sleep(2000)\n } else {\n this.currentProcess.kill()\n }\n this.currentProcess = null\n }\n }\n}\n","import { bytesToHex } from '@noble/hashes/utils'\nimport { Keypair } from '@solana/web3.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getTronAccountFromMnemonic(mnemonic: string, path = \"m/44'/195'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, bytesToHex(bip39.mnemonicToSeedSync(normalizeMnemonics)))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger\n\nexport { Logger }\n\nfunction getStackTrace() {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer() {\n const ancestors: any[] = []\n return function (key: any, value: any) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n // @ts-ignore\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === undefined || m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf((info) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() || ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const spaces = info.metadata?.pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string' ? info.message : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const format = info.metadata?.format\n const message = format ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n})\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string) {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n return logger\n}\n\nconst exportsObject = {}\nif (process.env['NODE_ENV'] === 'test') {\n // @ts-ignore\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment | undefined {\n return deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = !options.chain || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = !options.network || options.network === deployment.network\n const hasMatchingSource = !options.source || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) =>\n networkToEndpointId(deployment.network, v)\n )\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!contractCache[key]) {\n const Contract = new ethers.ContractFactory(deployment.abi!, deployment.bytecode!)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string) {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match || []\n const dirname = basePath || path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity) {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines && lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string) {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-utilities",
3
- "version": "2.0.8",
3
+ "version": "2.0.10-tron",
4
4
  "license": "BUSL-1.1",
5
5
  "exports": {
6
6
  "types": "./dist/index.d.ts",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@ethersproject/providers": "^5.7.0",
22
- "@layerzerolabs/lz-definitions": "^2.0.8",
22
+ "@layerzerolabs/lz-definitions": "^2.0.10-tron",
23
23
  "@noble/hashes": "^1.3.2",
24
24
  "@solana/web3.js": "^1.87.6",
25
25
  "aptos": "^1.20.0",
@@ -33,9 +33,8 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@jest/globals": "^29.7.0",
36
- "@layerzerolabs/eslint-config-next": "^2.0.8",
37
- "@layerzerolabs/tsup-config-next": "^2.0.8",
38
- "@layerzerolabs/typescript-config-next": "^2.0.8",
36
+ "@layerzerolabs/tsup-config-next": "^2.0.10-tron",
37
+ "@layerzerolabs/typescript-config-next": "^2.0.10-tron",
39
38
  "@types/glob": "^8.1.0",
40
39
  "@types/jest": "^29.5.10",
41
40
  "@types/node": "^20.10.5",
@@ -47,5 +46,6 @@
47
46
  },
48
47
  "publishConfig": {
49
48
  "access": "public"
50
- }
49
+ },
50
+ "stableVersion": "2.0.10"
51
51
  }