> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Context: Gateway, Storage, Secrets

> Доступ к блокчейну через Node RPC, сохранение и получение данных из Storage и хранение конфиденциальной информации, такой как ключи API, в Secrets.

Это руководство даёт обзор объекта `context` и того, как использовать его для доступа к утилитам Gateway, Storage и Secrets внутри Web3 Actions.

Вы также узнаете, как обращаться к [Node RPC](/node-rpc/overview) через `context`, как управлять и получать доступ к приватным данным, таким как ключи API, с помощью Secrets, как сохранять данные в Storage и как получать эти данные из вашего приложения.

### Context

`context` — это объект, дающий вам доступ к Storage и Secrets из вашего кода. Context — это первый параметр, который нужно указать в ваших функциях, обеспечивая доступ к контексту выполнения, когда Tenderly запускает ваш код.

```typescript title="example.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
export const actionFun: ActionFn = async (context: Context, event: Event) => {
  // ...
  await context.storage.putJson(key, storedValue);
};
```

<Note>
  Storage и Secrets являются общими для всех actions в рамках проекта в Tenderly.
</Note>

#### Gateways

Утилита Gateways (`context.gateways`) даёт вам доступ к [Node RPC](/node-rpc/overview), позволяя отправлять транзакции или читать on-chain данные с помощью Web3 Actions.

Свойство `gateways` даёт доступ к методу `getGateway()`, который требует один аргумент — сеть, к которой вы хотите обратиться. Например, чтобы обратиться к Mainnet, аргумент нужно передавать в формате `Network.MAINNET`.

Пример завершённого выражения, сохранённого в переменной, выглядит так:

```jsx title="example.jsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const defaultGatewayURL = context.gateways.getGateway(Network.MAINNET);
```

Вот список аргументов для метода `getGateway()` для каждой поддерживаемой сети в Node RPC:

* `Network.MAINNET`
* `Network.GOERLI`
* `Network.SEPOLIA`
* `Network.POLYGON`
* `Network.MUMBAI`
* `Network.BOBA_ETHEREUM`

Для получения дополнительной информации о том, как работает `context.gateways`, и примеров кода, помогающих понять его использование, прочитайте страницу документации [**Доступ к Node RPC в Web3 Actions**](/node-rpc/overview).

### Storage

Вы можете использовать утилиту Storage, чтобы сделать ваши Web3 Actions stateful (с состоянием). Storage Web3 Actions — это хранилище на основе ключей и значений. Вы можете сохранять данные в Storage как из своего пользовательского кода (функций), так и из Tenderly Dashboard.

Ниже приведён фрагмент кода, показывающий, как сохранять JSON-объекты в Storage.

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
await context.storage.putJson(key, valueStored);
```

<Note>
  Все функции, взаимодействующие с Storage, являются асинхронными, поэтому вам нужно использовать оператор `await`,
  чтобы избежать нежелательного поведения.
</Note>

#### Сохранение и получение данных из Storage

Для сохранения данных в Storage используйте следующие функции, которые сохраняют значения соответствующих типов:

* `putBigInt`
* `putStr`
* `putNumber`
* `putJson`

Для получения данных из Storage используйте следующие функции, чтобы получить конкретный тип данных:

* `getBigInt`
* `getStr`
* `getNumber`
* `getJson`

Ниже приведён пример того, как сохранить и получить JSON-объект из Storage.

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
await context.storage.putJson('BAR_BAZ', { bar: 'baz' });
//....
const barBaz = await context.storage.getJson('BAR_BAZ');
```

#### Лимиты Storage

| Лимит                                    | Значение |
| ---------------------------------------- | -------- |
| Максимальное количество ключей на проект | 1 000    |
| Максимальный размер ключа                | 1 КБ     |
| Максимальный размер значения             | 100 КБ   |

Если лимиты превышены, клиент выдаст ошибку `400 Bad Request` с сообщением, указывающим, какой именно лимит был превышен.

Storage работает на уровне проекта — все actions в проекте разделяют общий пул ключей.

<Warning>
  Storage — это не база данных, он предназначен для небольших stateful-данных, таких как параметры конфигурации или счётчики. Для больших наборов данных или высокочастотных операций используйте внешнюю базу данных и сохраняйте учётные данные в [**Secrets**](/monitoring/web3-actions/references/context#secrets).
</Warning>

#### Доступ к Storage через Tenderly Dashboard

Чтобы просмотреть данные, сохранённые в Storage, через **Tenderly Dashboard**, перейдите в **Actions** в меню слева и выберите **Storage** в меню страницы.

<Frame caption="Доступ к данным Web3 Action, сохранённым в Storage">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/web3-actions/context-storage-and-secrets-1.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=aaa31ee245f276bef3671e2cee6f4c23" alt="Accessing Web3 Action data saved to Storage" width="2100" height="1112" data-path="images/web3-actions/context-storage-and-secrets-1.webp" />
</Frame>

### Secrets

Secrets используются для хранения конфиденциальной информации, такой как приватные ключи API для сервисов, которые ваш Web3 Action может вызывать во время выполнения. Secrets хранятся в виде пар ключ-значение и состоят из имени и секретного значения.

#### Создание и хранение Secrets

Единственный способ создать секреты — через **Tenderly Dashboard**. Перейдите в **Actions** в меню слева и выберите **Secrets** в меню страницы.

Добавьте Secrets, нажав кнопку **Add Secret**, и укажите имя ключа и значение.

<Frame caption="Создание Secrets для Web3 Actions">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/web3-actions/context-storage-and-secrets-2.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=994f4277fd0079e7d69e75839adeff04" alt="Creating Secrets for Web3 Actions" width="3364" height="2262" data-path="images/web3-actions/context-storage-and-secrets-2.webp" />
</Frame>

#### Получение данных Secrets из вашего кода

Вы можете получить данные Secrets из вашего кода, используя объект `context` с методом `get()`. В качестве аргумента используйте точное имя ключа, указанное в Tenderly Dashboard.

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const fooApiKey = await context.secrets.get('FOO_API_KEY');
```
