Skip to content

Commit

Permalink
docs: update docs and readme
Browse files Browse the repository at this point in the history
  • Loading branch information
0xnigir1 committed Aug 30, 2024
1 parent bbdd571 commit e11deb9
Show file tree
Hide file tree
Showing 7 changed files with 408 additions and 10 deletions.
16 changes: 6 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ This repository is a monorepo consisting of 4 packages and 1 app:
- [`@zkchainhub/shared`](./packages/shared): A library for shared configurations, constants, types, etc.
- [`@zkchainhub/chain-providers`](./packages/chain-providers): A library that provides abstracted services over Viem providers to query blockchain data
- [`@zkchainhub/pricing`](./packages/pricing): An extensible library that provides Pricing services to fetch token prices. Currently, only Coingecko provider is developed
- [`@zkchainhub/metadata`](./packages/metadata): A library that exposes different providers for fetching chains and tokens metadata.
- [`@zkchainhub/metrics`](./packages/metrics): A library that provides different aggregated metrics from the ZKsync ecosystem and ZK chains.
- [`@zkchainhub/api`](./apps/api): An Express server that exposes an API where you can fetch information about ZKsync ecosystem and their chains, using the before mentioned libraries

Expand Down Expand Up @@ -48,16 +49,7 @@ $ pnpm build

## ⚙️ Setting up env variables

- Inside `apps/api` folder, create `.env` file and copy paste `.env.example` content in there.

```
$ cd apps/api && cp .env.example .env
```

- Set up `L1_RPC_URLS` as CSV list of RPC URLs. For example, `https://eth.llamarpc.com,https://rpc.flashbots.net/fast`. You can check [Chainlist](https://chainlist.org/) for a list of public RPCs
- Set up `L2_RPC_URLS` as CSV list of RPC URLs. For example, `https://mainnet.era.zksync.io`. You can check [Chainlist](https://chainlist.org/) for a list of public RPCs
- Set `COINGECKO_API_KEY`, `COINGECKO_BASE_URL` and `COINGECKO_API_KEY` depending on your API plan. You can get an API Key creating an account on [Coingecko's site](https://www.coingecko.com/en/api)
- (Optionally) Set `PORT` on which API is made available. By default is port 3000
- Follow the instructions for `apps/api` on [API's README](./apps/api/README.md)

## Running the app

Expand Down Expand Up @@ -116,3 +108,7 @@ ZKchainHub was built with ❤️ by [Wonderland](https://defi.sucks).
Wonderland is a team of top Web3 researchers, developers, and operators who believe that the future needs to be open-source, permissionless, and decentralized.

[DeFi sucks](https://defi.sucks), but Wonderland is here to make it better.

## License

This project is licensed under the MIT License. See the [`LICENSE`](./LICENSE) file for details.
82 changes: 82 additions & 0 deletions apps/api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# ZKchainHub API

## Overview

The `@zkchainhub/api` app is an Express server that exposes an API where you can fetch information about ZKsync ecosystem and their chains.

## 📋 Prerequisites

- Ensure you have `node >= 20.0.0` and `pnpm >= 9.5.0` installed.

## Installation

```bash
$ pnpm install
```

## Building

To build the monorepo packages, run:

```bash
$ pnpm build
```

## ⚙️ Setting up env variables

- Create `.env` file and copy paste `.env.example` content in there.

```
$ cp .env.example .env
```

Available options:

- (optional) `PORT` on which API is made available. By default is port 3000
- (optional) `ENVIRONMENT` which environment we are using ( 'mainnet' | 'testnet' | 'local'). By default is 'mainnet'
- `BRIDGE_HUB_ADDRESS`
- `SHARED_BRIDGE_ADDRESS`
- `STATE_MANAGER_ADDRESSES` CSV list of State managers addresses
- `L1_RPC_URLS` as CSV list of RPC URLs. For example, `https://eth.llamarpc.com,https://rpc.flashbots.net/fast`. You can check [Chainlist](https://chainlist.org/) for a list of public RPCs
- (optional) `PRICING_SOURCE` which pricing source to use ('dummy' | 'coingecko'). By default is dummy
- (optional) `DUMMY_PRICE` for dummy pricing source. Default is undefined
- (required if 'coingecko' is selected)`COINGECKO_API_KEY`, `COINGECKO_BASE_URL` and `COINGECKO_API_KEY` depending on your API plan. You can get an API Key creating an account on [Coingecko's site](https://www.coingecko.com/en/api)
- `METADATA_SOURCE` which metadata source to use ('github' | 'local' | 'static')
- (required if METADATA_SOURCE is 'github') `METADATA_TOKEN_URL` Metadata tokens URL
- (required if METADATA_SOURCE is 'github') `METADATA_CHAIN_URL` Metadata chains URL
- (required if METADATA_SOURCE is 'local') `METADATA_TOKEN_JSON_PATH` Metadata tokens JSON file path (see examples on `packages/metadata`)
- (required if METADATA_SOURCE is 'local') `METADATA_CHAIN_JSON_PATH` Metadata chain JSON file path (see examples on `packages/metadata`)

## Running the app

```bash
# development watch mode
$ pnpm run dev

# production mode
$ pnpm run start

```

Verify that ZKchainHub API is running on http://localhost:3000 (or the port specified)

## Test

```bash
# unit tests
$ pnpm run test

# test coverage
$ pnpm run test:cov
```

## API

### Metrics routes

- `GET /metrics/ecosystem`: Retrieves overall ecosystem metrics
- `GET /metrics/zkchain/:chainId`: Retrieves chain specific metrics

## Docs

Locally Swagger docs are available at http://localhost:3000/docs
90 changes: 90 additions & 0 deletions packages/chain-providers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# ZKchainHub Chain Providers package

## Overview

The `@zkchainhub/chain-providers` package provides wrappers of the `Viem` library to interact with EVM-based blockchains and ZK chains of the ZKsync ecosystem.

## 📋 Prerequisites

- Ensure you have `node >= 20.0.0` and `pnpm >= 9.5.0` installed.

## Installation

```bash
$ pnpm install
```

## Building

To build the monorepo packages, run:

```bash
$ pnpm build
```

## Test

```bash
# unit tests
$ pnpm run test

# test coverage
$ pnpm run test:cov
```

## Usage

### Importing the Package

You can import the package in your TypeScript or JavaScript files as follows:

```typescript
import { EvmProvider } from "@zkchainhub/chain-providers";
```

### Example

```typescript
// EVM-provider
const rpcUrls = [...]; //non-empty
const chain = mainnet; // from viem/chains

const evmProvider = new EvmProvider(rpcUrls, chain, logger);

const gasPrice = await evmProvider.getGasPrice();

const result = await evmProvider.readContract(address, abi, "myfunction", [arg1, arg2]);

// ZK-chain provider
const zkChainProvider = new ZKChainProvider(rpcUrls, chain, logger);

const l2Tps = await zkChainProvider.tps();
```

## API

### [EvmProvider](./src/providers/evmProvider.service.ts)

Available methods

- `getMulticall3Address()`
- `getBalance(address: Address)`
- `getBlockNumber()`
- `getBlockByNumber(blockNumber: number)`
- `getGasPrice()`
- `estimateGas(args: EstimateGasParameters<typeof this.chain>)`
- `getStorageAt(address: Address, slot: number | Hex)`
- `readContract(contractAddress: Address, abi: TAbi functionName: TFunctionName, args?: TArgs)`
- `batchRequest(abi: AbiWithConstructor,bytecode: Hex, args: ContractConstructorArgs<typeof abi>, constructorReturnParams: ReturnType)`
- `multicall(args: MulticallParameters<contracts, allowFailure>)`

### [ZKChainProvider](./src/providers/zkChainProvider.service.ts)

Available methods

- `getL1BatchDetails(batchNumber: number)`
- `getL1BatchNumber()`
- `avgBlockTime(range: number = 1000)`
- `tps()`

For more details on both providers, refer to their implementations.
37 changes: 37 additions & 0 deletions packages/metadata/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,43 @@ $ pnpm run test
$ pnpm run test:cov
```

## Usage

### Importing the Package

You can import the package in your TypeScript or JavaScript files as follows:

```typescript
import { MetadataProviderFactory } from "@zkchainhub/metadata";
```

### Example

You can manually instantiate any of the available providers or use the factory

```typescript
// manual
const metadataProvider = new LocalFileMetadataProvider(tokenJson, chainsJson, logger);

// factory
const metadataFromFactory = MetadataProviderFactory.create(providerOptions, additionalDependencies);

const chainsMap = await metadataProvider.getChainsMetadata();
const tokensArray = await metadataProvider.getTokensMetadata();
```

## API

### IMetadataProvider

#### `getChainsMetadata(): Promise<ZKChainMetadata>`

Retrieves the metadata for ZK chains of the ecosystem

#### `getTokensMetadata(): Promise<Token<TokenType>[]>`

Retrieves metadata for tokens of the ecosystem

## Contributing

To create a new provider, create it inside [`providers`](./src/providers/) folder and implement the [`IMetadataProvider`](./src/interfaces/metadata.interface.ts) interface.
Expand Down
84 changes: 84 additions & 0 deletions packages/metrics/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# ZKchainHub Metrics package

## Overview

The `@zkchainhub/metrics` package exposes services with different aggregated metrics from the ZKsync ecosystem and ZK chains.

## 📋 Prerequisites

- Ensure you have `node >= 20.0.0` and `pnpm >= 9.5.0` installed.

## Installation

```bash
$ pnpm install
```

## Building

To build the monorepo packages, run:

```bash
$ pnpm build
```

## Test

```bash
# unit tests
$ pnpm run test

# test coverage
$ pnpm run test:cov
```

## Usage

### Importing the Package

You can import the package in your TypeScript or JavaScript files as follows:

```typescript
import { L1MetricsService } from "@zkchainhub/metrics";
```

### Example

This packages requires that user injects instances of:

- EvmProvider
- IPricingProvider
- IMetadataProvider

```typescript
// ... define needed dependencies

const l1MetricsService = new L1MetricsService(
bridgeHubAddress,
sharedBridgeAddress,
stateTransitionManagerAddresses,
evmProvider,
pricingProvider,
metadataProvider,
logger,
);

await l1MetricsService.l1Tvl();
```

## API

### [L1MetricsService](./src/l1/l1MetricsService.ts)

Available methods

- `l1Tvl()`
- `getBatchesInfo(chainId: ChainId)`
- `tvl(chainId: ChainId)`
- `chainType(chainId: ChainId)`
- `ethGasInfo()`
- `getChainIds()`
- `getBaseTokens(chainIds: ChainId[])`
- `feeParams(chainId: ChainId)`

For more details on services, refer to their implementations.
Loading

0 comments on commit e11deb9

Please sign in to comment.