From 90ab406bdb2f965e5c531fa3483fb54c1e4e1e5e Mon Sep 17 00:00:00 2001 From: Danny Delott Date: Thu, 10 Oct 2024 09:27:42 -0700 Subject: [PATCH 1/2] Add docs to appconfig readme --- packages/hyperdrive-appconfig/README.md | 153 +++++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-) diff --git a/packages/hyperdrive-appconfig/README.md b/packages/hyperdrive-appconfig/README.md index bf072cec8..bf219f4be 100644 --- a/packages/hyperdrive-appconfig/README.md +++ b/packages/hyperdrive-appconfig/README.md @@ -5,10 +5,37 @@ Pre-generated metadata for applications that use Hyperdrive. Note: The data schema in this package may change at any time, and semantic versioning is not strictly enforced. +# Table of Contents + +- [@delvtech/hyperdrive-appconfig](#delvtechhyperdrive-appconfig) +- [Table of Contents](#table-of-contents) +- [Installation](#installation) +- [Example Usage](#example-usage) +- [Building the package](#building-the-package) +- [Selector Functions](#selector-functions) + - [`findBaseToken`](#findbasetoken) + - [`findHyperdriveConfig`](#findhyperdriveconfig) + - [`findToken`](#findtoken) +- [Utility Functions](#utility-functions) + - [`isMainnetChain`](#ismainnetchain) + +# Installation + +```shell +# npm +npm install @delvtech/hyperdrive-appconfig + +# pnpm +pnpm add @delvtech/hyperdrive-appconfig + +# Yarn +yarn add @delvtech/hyperdrive-appconfig +``` + # Example Usage ```ts -import { appConfig } from "@delvtech/hyperdrive-appconfig"; +import { appConfig, findBaseToken } from "@delvtech/hyperdrive-appconfig"; // 1. Grab the first hyperdrive in the app config const firstHyperdrive = appConfig.hyperdrives[0]; @@ -36,3 +63,127 @@ for. Once generated, build the package to make it available to other projects in the monorepo. + +# Selector Functions + +This package exports several selector functions to help you find specific +configurations within the app config. Here's a breakdown of each function: + +## `findBaseToken` + +Finds the base token configuration for a given Hyperdrive instance. + +**Inputs:** + +- `hyperdriveChainId`: The chain ID of the Hyperdrive instance +- `hyperdriveAddress`: The address of the Hyperdrive instance +- `appConfig`: The entire app configuration object + +**Output:** The TokenConfig object for the base token. + +**Errors:** This will throw an error if the base token cannot be found. + +**Example:** + +```ts +import { appConfig, findBaseToken } from "@delvtech/hyperdrive-appconfig"; + +const firstHyperdrive = appConfig.hyperdrives[0]; + +const baseToken = findBaseToken({ + hyperdriveChainId: firstHyperdrive.chainId, + hyperdriveAddress: firstHyperdrive.address, + appConfig, +}); + +const { name, symbol, decimals, iconUrl, ... } = baseToken; +``` + +## `findHyperdriveConfig` + +Finds the Hyperdrive configuration for a given chain ID and address. + +**Inputs:** + +- `hyperdriveChainId`: The chain ID of the Hyperdrive instance +- `hyperdriveAddress`: The address of the Hyperdrive instance +- `hyperdrives`: The hyperdrives list on the appConfig object + +**Output:** The HyperdriveConfig object for the specified Hyperdrive instance. + +**Example:** + +```ts +import { + appConfig, + findHyperdriveConfig, +} from "@delvtech/hyperdrive-appconfig"; + +const hyperdriveConfig = findHyperdriveConfig({ + hyperdriveChainId: 1, + hyperdriveAddress: "0x...", + hyperdrives: appConfig.hyperdrives, +}); + +const { name, poolConfig, initializationBlock, withdrawOptions, ... } = + hyperdriveConfig; +``` + +## `findToken` + +Finds the token configuration for a given chain ID and token address. + +Note: When retrieving the base token for a Hyperdrive, it's recommended to use +`findBaseToken` instead of `findToken`. `findBaseToken` is specifically designed +for Hyperdrive configurations and provides more comprehensive functionality. It +not only attempts to resolve the base token directly but also handles cases +where a fallback base token is specified. This ensures you always get the +correct token configuration for the Hyperdrive, even in complex scenarios. + +**Inputs:** + +- `chainId`: The chain ID of the token +- `tokenAddress`: The address of the token +- `tokens`: The tokens list on the appConfig object + +**Output:** The TokenConfig object for the specified token, or `undefined` if not found. + +**Example:** + +```ts +import { appConfig, findToken } from "@delvtech/hyperdrive-appconfig"; + +const token = findToken({ + chainId: 1, + tokenAddress: "0x...", + tokens: appConfig.tokens, +}); + +const { name, symbol, decimals, iconUrl, ... } = token; +``` + +# Utility Functions + +## `isMainnetChain` + +Determines if a given chain ID corresponds to a mainnet chain. This includes any +mainnet chain, such as Ethereum Mainnet, Linea, Base, etc. + +**Input:** + +- `chainId`: The chain ID to check + +**Output:** A boolean indicating whether the chain is a mainnet chain + +**Example:** + +```ts +import { appConfig, isMainnetChain } from "@delvtech/hyperdrive-appconfig"; + +const firstHyperdrive = appConfig.hyperdrives[0]; + +const isMainnetHyperdrive = isMainnetChain(firstHyperdrive.chainId); + +const firstToken = appConfig.tokens[0]; +const isMainnetToken = isMainnetChain(firstToken.chainId); +``` From ccbb1790a4904672bbf151f233b187f40365e8d2 Mon Sep 17 00:00:00 2001 From: Danny Delott Date: Thu, 10 Oct 2024 09:31:13 -0700 Subject: [PATCH 2/2] Add changeset --- .changeset/slimy-crabs-stare.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/slimy-crabs-stare.md diff --git a/.changeset/slimy-crabs-stare.md b/.changeset/slimy-crabs-stare.md new file mode 100644 index 000000000..d98432f59 --- /dev/null +++ b/.changeset/slimy-crabs-stare.md @@ -0,0 +1,5 @@ +--- +"@delvtech/hyperdrive-appconfig": patch +--- + +Add documentation entries for appconfig