diff --git a/Dockerfile b/Dockerfile index cb6e537a46..838507fe80 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Stage 1: Build golang dependencies and binaries -FROM ubuntu:24.10 AS build +FROM ubuntu:25.04 AS build ARG VM_DEBUG @@ -20,7 +20,7 @@ RUN bash -c 'source ~/.cargo/env && VM_DEBUG=${VM_DEBUG} make juno' RUN upx-ucl /app/build/juno # Stage 2: Build Docker image -FROM ubuntu:24.10 AS runtime +FROM ubuntu:25.04 AS runtime RUN apt-get update && apt-get install -y ca-certificates curl gawk grep libjemalloc-dev libjemalloc2 diff --git a/docs/docs/_config-options.md b/docs/docs/_config-options.md index a9ff883a5d..54e1ccd2e1 100644 --- a/docs/docs/_config-options.md +++ b/docs/docs/_config-options.md @@ -11,9 +11,10 @@ | `cn-unverifiable-range` | `[]` | Custom network range of blocks to skip hash verifications (e.g. `0,100`) | | `colour` | `true` | Use `--colour=false` command to disable colourized outputs (ANSI Escape Codes) | | `config` | | The YAML configuration file | -| `db-cache-size` | `8` | Determines the amount of memory (in megabytes) allocated for caching data in the database | +| `db-cache-size` | `1024` | Determines the amount of memory (in megabytes) allocated for caching data in the database | | `db-max-handles` | `1024` | A soft limit on the number of open files that can be used by the DB | | `db-path` | `juno` | Location of the database files | +| `disable-l1-verification` | `false` | Disables L1 verification since an Ethereum node is not provided | | `eth-node` | | WebSocket endpoint of the Ethereum node. To verify the correctness of the L2 chain, Juno must connect to an Ethereum node and parse events in the Starknet contract | | `grpc` | `false` | Enable the HTTP gRPC server on the default port | | `grpc-host` | `localhost` | The interface on which the gRPC server will listen for requests | @@ -37,6 +38,7 @@ | `p2p-private-key` | | EXPERIMENTAL: Hexadecimal representation of a private key on the Ed25519 elliptic curve | | `p2p-public-addr` | | EXPERIMENTAL: Specify p2p public address as multiaddr. Example: /ip4/35.243.XXX.XXX/tcp/7777 | | `pending-poll-interval` | `5` | Sets how frequently pending block will be updated (0s will disable fetching of pending block) | +| `plugin-path` | | Path to the plugin .so file | | `pprof` | `false` | Enables the pprof endpoint on the default port | | `pprof-host` | `localhost` | The interface on which the pprof HTTP server will listen for requests | | `pprof-port` | `6062` | The port on which the pprof HTTP server will listen for requests | diff --git a/docs/docs/staking-validator.md b/docs/docs/staking-validator.md new file mode 100644 index 0000000000..92520cfbdb --- /dev/null +++ b/docs/docs/staking-validator.md @@ -0,0 +1,32 @@ +# Become a Staking Validator + +Staking on Starknet provides an opportunity to contribute to network security and earn rewards by becoming a validator. Check out the [Becoming a Validator](https://docs.starknet.io/staking/entering-staking/) guide to learn more about the validator process. + +## Prerequisites + +- **STRK Tokens**: At least 20,000 STRK is required for staking. For the latest details, check out the [Staking Protocol Details](https://docs.starknet.io/staking/overview/#protocol_details). +- **Node Setup**: The [latest version of Juno](updating) installed and running on your machine. +- **Starknet Wallet**: A compatible wallet, like [Braavos](https://braavos.app/wallet-features/ledger-on-braavos/) or [Argent](https://www.argent.xyz/blog/how-to-use-your-hardware-wallet-with-argent). +- **Access to CLI/Block Explorer**: Tools like [Voyager](https://voyager.online) for interacting with contracts. + +## 1. Set up Juno + +Juno is a reliable choice for running a Starknet node. Follow the [Running Juno](running-juno) guide to configure Juno using Docker, binaries, source builds, or Google Cloud Platform (GCP). + +## 2. Stake STRK tokens + +Register as a validator by staking STRK tokens through the Starknet staking contract. Check out the [Becoming a Validator](https://docs.starknet.io/staking/entering-staking/) guide for complete instructions. The staking process includes: + +- **Pre-approving STRK Transfer**: Allow the staking contract to lock your tokens. +- **Calling the `stake` Function**: Register operational and reward addresses, set commission rates, and enable pooling if desired. + +## 3. Finalising your validator + +Once Juno is running and your STRK tokens are staked: + +1. Monitor your validator's status via dashboards like [Voyager](https://voyager.online/). +2. Stay updated for future network requirements or configurations. + +:::info +You're now a staking validator! With your node running and tokens staked, you support Starknet's security and earn rewards. The network manages most operations, though future updates may require additional setup. +::: diff --git a/docs/sidebars.js b/docs/sidebars.js index b98fd7bacf..38e4582379 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -36,6 +36,7 @@ const sidebars = { }, ], }, + "staking-validator", "monitoring", "snapshots", "faq", diff --git a/docs/versioned_docs/version-0.12.4/_config-options.md b/docs/versioned_docs/version-0.12.4/_config-options.md new file mode 100644 index 0000000000..54e1ccd2e1 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/_config-options.md @@ -0,0 +1,52 @@ + + +| Config Option | Default Value | Description | +| - | - | - | +| `cn-core-contract-address` | | Custom network core contract address | +| `cn-feeder-url` | | Custom network feeder URL | +| `cn-gateway-url` | | Custom network gateway URL | +| `cn-l1-chain-id` | | Custom network L1 chain id | +| `cn-l2-chain-id` | | Custom network L2 chain id | +| `cn-name` | | Custom network name | +| `cn-unverifiable-range` | `[]` | Custom network range of blocks to skip hash verifications (e.g. `0,100`) | +| `colour` | `true` | Use `--colour=false` command to disable colourized outputs (ANSI Escape Codes) | +| `config` | | The YAML configuration file | +| `db-cache-size` | `1024` | Determines the amount of memory (in megabytes) allocated for caching data in the database | +| `db-max-handles` | `1024` | A soft limit on the number of open files that can be used by the DB | +| `db-path` | `juno` | Location of the database files | +| `disable-l1-verification` | `false` | Disables L1 verification since an Ethereum node is not provided | +| `eth-node` | | WebSocket endpoint of the Ethereum node. To verify the correctness of the L2 chain, Juno must connect to an Ethereum node and parse events in the Starknet contract | +| `grpc` | `false` | Enable the HTTP gRPC server on the default port | +| `grpc-host` | `localhost` | The interface on which the gRPC server will listen for requests | +| `grpc-port` | `6064` | The port on which the gRPC server will listen for requests | +| `gw-api-key` | | API key for gateway endpoints to avoid throttling | +| `gw-timeout` | `5` | Timeout for requests made to the gateway | +| `http` | `false` | Enables the HTTP RPC server on the default port and interface | +| `http-host` | `localhost` | The interface on which the HTTP RPC server will listen for requests | +| `http-port` | `6060` | The port on which the HTTP server will listen for requests | +| `log-level` | `info` | Options: trace, debug, info, warn, error | +| `max-vm-queue` | `2 * max-vms` | Maximum number for requests to queue after reaching max-vms before starting to reject incoming requests | +| `max-vms` | `3 * CPU Cores` | Maximum number for VM instances to be used for RPC calls concurrently | +| `metrics` | `false` | Enables the Prometheus metrics endpoint on the default port | +| `metrics-host` | `localhost` | The interface on which the Prometheus endpoint will listen for requests | +| `metrics-port` | `9090` | The port on which the Prometheus endpoint will listen for requests | +| `network` | `mainnet` | Options: mainnet, sepolia, sepolia-integration | +| `p2p` | `false` | EXPERIMENTAL: Enables p2p server | +| `p2p-addr` | | EXPERIMENTAL: Specify p2p listening source address as multiaddr. Example: /ip4/0.0.0.0/tcp/7777 | +| `p2p-feeder-node` | `false` | EXPERIMENTAL: Run juno as a feeder node which will only sync from feeder gateway and gossip the new blocks to the network | +| `p2p-peers` | | EXPERIMENTAL: Specify list of p2p peers split by a comma. These peers can be either Feeder or regular nodes | +| `p2p-private-key` | | EXPERIMENTAL: Hexadecimal representation of a private key on the Ed25519 elliptic curve | +| `p2p-public-addr` | | EXPERIMENTAL: Specify p2p public address as multiaddr. Example: /ip4/35.243.XXX.XXX/tcp/7777 | +| `pending-poll-interval` | `5` | Sets how frequently pending block will be updated (0s will disable fetching of pending block) | +| `plugin-path` | | Path to the plugin .so file | +| `pprof` | `false` | Enables the pprof endpoint on the default port | +| `pprof-host` | `localhost` | The interface on which the pprof HTTP server will listen for requests | +| `pprof-port` | `6062` | The port on which the pprof HTTP server will listen for requests | +| `remote-db` | | gRPC URL of a remote Juno node | +| `rpc-call-max-steps` | `4000000` | Maximum number of steps to be executed in starknet_call requests. The upper limit is 4 million steps, and any higher value will still be capped at 4 million | +| `rpc-cors-enable` | `false` | Enable CORS on RPC endpoints | +| `rpc-max-block-scan` | `18446744073709551615` | Maximum number of blocks scanned in single starknet_getEvents call | +| `versioned-constants-file` | | Use custom versioned constants from provided file | +| `ws` | `false` | Enables the WebSocket RPC server on the default port | +| `ws-host` | `localhost` | The interface on which the WebSocket RPC server will listen for requests | +| `ws-port` | `6061` | The port on which the WebSocket server will listen for requests | diff --git a/docs/versioned_docs/version-0.12.4/configuring.md b/docs/versioned_docs/version-0.12.4/configuring.md new file mode 100644 index 0000000000..f05104da4f --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/configuring.md @@ -0,0 +1,125 @@ +--- +title: Configuring Juno +--- + +# Configuring Juno :gear: + +Juno can be configured using several methods, with the following order of precedence: + +1. [Command line parameters (flags)](#command-line-params) +2. [Environment variables](#environment-variables) +3. [Configuration file](#configuration-file) + +## Command line params + +Juno can be configured directly on the command line by prefixing `--` to each option name: + +```bash +./build/juno --http --http-port 6060 --http-host 0.0.0.0 +``` + +When using Docker, append the command line parameters after the image name to configure Juno: + +```bash +docker run nethermind/juno --http --http-port 6060 --http-host 0.0.0.0 +``` + +:::tip +Command line parameters override [environment variables](#environment-variables) and [configuration file](#configuration-file). +::: + +## Environment variables + +Juno can be configured through environment variables by prefixing the variable names with `JUNO_` and using the configuration options in [SCREAMING_SNAKE_CASE](https://en.wiktionary.org/wiki/screaming_snake_case) format. + +To set the `http`, `http-port`, and `http-host` configurations, Juno should be run in this format: + +```bash +JUNO_HTTP=true JUNO_HTTP_PORT=6060 JUNO_HTTP_HOST=0.0.0.0 ./build/juno +``` + +When using Docker, start Juno using the `-e` command option: + +```bash +docker run \ + -e "JUNO_HTTP=true JUNO_HTTP_PORT=6060 JUNO_HTTP_HOST=0.0.0.0" \ + nethermind/juno +``` + +:::tip +Environment variables rank second in configuration precedence. [Command line parameters](#command-line-params) override environment variables. +::: + +## Configuration file + +Juno can be configured using a [YAML](https://en.wikipedia.org/wiki/YAML) file: + +```yaml title="Sample YAML File" showLineNumbers +log-level: info +network: mainnet +http: true +http-port: 6060 +metrics: true +metrics-port: 9090 +``` + +To run Juno with a configuration file, use the `config` option to specify the path of the configuration file: + +```bash +# Standalone binary +./build/juno --config + +# Docker container +docker run nethermind/juno --config +``` + +:::info +By default, Juno looks for the configuration file in the `$XDG_CONFIG_HOME` directory. +::: + +:::tip +Configuration file rank third in configuration precedence. [Command line parameters](#command-line-params) and [environment variables](#environment-variables) override configuration file. +::: + +## Configuration options + +To list all available command line options, you can use the `--help` parameter: + +```bash +# Standalone binary +./build/juno --help + +# Docker container +docker run nethermind/juno --help +``` + +Below is a list of all configuration options available in Juno, along with their default values and descriptions: + +```mdx-code-block +import ConfigOptions from "./_config-options.md"; + + +``` + +## Subcommands + +Juno provides several subcommands to perform specific tasks or operations. Here are the available ones: + +- `genp2pkeypair`: Generate a private key pair for p2p. +- `db`: Perform database-related operations + - `db info`: Retrieve information about the database. + - `db size`: Calculate database size information for each data type. + - `db revert`: Reverts the database to a specific block number. + +To use a subcommand, append it when running Juno: + +```bash +# Running a subcommand +./build/juno + +# Running the genp2pkeypair subcommand +./build/juno genp2pkeypair + +# Running the db info subcommand +./build/juno db info +``` diff --git a/docs/versioned_docs/version-0.12.4/faq.md b/docs/versioned_docs/version-0.12.4/faq.md new file mode 100644 index 0000000000..78828677ce --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/faq.md @@ -0,0 +1,125 @@ +--- +title: Frequently Asked Questions +--- + +# Frequently Asked Questions :question: + +
+ What is Juno? + +Juno is a Go implementation of a Starknet full-node client created by Nethermind to allow node operators to easily and reliably support the network and advance its decentralisation goals. Juno supports various node setups, from casual to production-grade indexers. + +
+ +
+ How can I run Juno? + +Check out the [Running Juno](running-juno) guide to learn the simplest and fastest ways to run a Juno node. You can also check the [Running Juno on GCP](running-on-gcp) guide to learn how to run Juno on GCP. + +
+ +
+ What are the hardware requirements for running Juno? + +We recommend running Juno with at least 4GB of RAM and 250GB of SSD storage. Check out the [Hardware Requirements](hardware-requirements) for more information. + +
+ +
+ How can I configure my Juno node? + +You can configure Juno using [command line parameters](configuring#command-line-params), [environment variables](configuring#environment-variables), and a [YAML configuration file](configuring#configuration-file). Check out the [Configuring Juno](configuring) guide to learn their usage and precedence. + +
+ +
+ How can I update my Juno node? + +Check out the [Updating Juno](updating) guide for instructions on updating your node to the latest version. + +
+ +
+ How can I interact with my Juno node? + +You can interact with a running Juno node using the [JSON-RPC](json-rpc) and [WebSocket](websocket) interfaces. + +
+ +
+ How can I monitor my Juno node? + +Juno captures metrics data using [Prometheus](https://prometheus.io), and you can visualise them using [Grafana](https://grafana.com). Check out the [Monitoring Juno](monitoring) guide to get started. + +
+ +
+ Do node operators receive any rewards, or is participation solely to support the network? + +Presently, running a node does not come with direct rewards; its primary purpose is contributing to the network's functionality and stability. However, operating a node provides valuable educational benefits and deepens your knowledge of the network's operation. + +
+ +
+ How can I view Juno logs from Docker? + +You can view logs from the Docker container using the following command: + +```bash +docker logs -f juno +``` + +
+ +
+ How can I get real-time updates of new blocks? + +The [WebSocket](websocket#subscribe-to-newly-created-blocks) interface provides a `juno_subscribeNewHeads` method that emits an event when new blocks are added to the blockchain. + +
+ +
+ Does Juno provide snapshots to sync with Starknet quickly? + +Yes, Juno provides snapshots for both the Starknet Mainnet and Sepolia networks. Check out the [Database Snapshots](snapshots) guide to get started. + +
+ +
+ How can I contribute to Juno? + +You can contribute to Juno by running a node, starring on GitHub, reporting bugs, and suggesting new features. Check out the [Contributions and Partnerships](/#contributions-and-partnerships) page for more information. + +
+ +
+ I noticed a warning in my logs saying: **Failed storing Block \{"err": "unsupported block version"\}**. How should I proceed? + +You can fix this problem by [updating to the latest version](updating) of Juno. Check for updates and install them to maintain compatibility with the latest block versions. + +
+ +
+ After updating Juno, I receive **error while migrating DB.** How should I proceed? + +This error suggests your database is corrupted, likely due to the node being interrupted during migration. This can occur if there are insufficient system resources, such as RAM, to finish the process. The only solution is to resynchronise the node from the beginning. To avoid this issue in the future, ensure your system has adequate resources and that the node remains uninterrupted during upgrades. + +
+ +
+ I receive **Error: unable to verify latest block hash; are the database and --network option compatible?** while running Juno. How should I proceed? + +To resolve this issue, ensure that the `eth-node` configuration aligns with the `network` option for the Starknet network. + +
+ +
+ I receive **process \ killed** and **./build/juno: invalid signature (code or signature have been modified)** while running the binary on macOS. How should I proceed? + +You need to re-sign the binary to resolve this issue using the following command: + +```bash +codesign --sign - ./build/juno +``` + +
diff --git a/docs/versioned_docs/version-0.12.4/hardware-requirements.md b/docs/versioned_docs/version-0.12.4/hardware-requirements.md new file mode 100644 index 0000000000..d980364051 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/hardware-requirements.md @@ -0,0 +1,23 @@ +--- +title: Hardware Requirements +--- + +# Hardware Requirements :computer: + +The following specifications outline the hardware required to run a Juno node. These specifications are categorised into minimal and recommended requirements for different usage scenarios. + +## Minimal requirements + +- **CPU**: At least 2 cores +- **RAM**: 4GB or more +- **Storage**: 250GB or more (SSD recommended; note: storage needs will grow over time) + +## Recommended requirements + +- **CPU**: High-performance CPU with 4 or more cores +- **RAM**: 8GB or more +- **Storage**: High-performance SSD with at least 250GB to accommodate future growth + +:::tip +We intend the above specifications as a guideline. The minimal requirements support basic node operations, and the recommended settings ensure optimal performance and scalability for future needs. +::: diff --git a/docs/versioned_docs/version-0.12.4/intro.md b/docs/versioned_docs/version-0.12.4/intro.md new file mode 100644 index 0000000000..e51ce1fee3 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/intro.md @@ -0,0 +1,78 @@ +--- +slug: / +title: Introduction +--- + +# Welcome to Juno :wave: + +Juno is a Go implementation of a Starknet full-node client created by Nethermind to allow node operators to easily and reliably support the network and advance its decentralisation goals. Juno supports various node setups, from casual to production-grade indexers. + +- :cd: **Small database footprint**: Approximately 182GB on mainnet. +- :zap: **Ultra-fast synchronisation**: Limited only by your hardware and the sequencer. +- :100: **Complete [JSON-RPC spec](https://github.com/starkware-libs/starknet-specs/tree/master) compliance**: Everything Starknet, accessible from a single point. +- :mag_right: **Minimal RPC response latency**: Ensuring your applications run smoothly. +- :globe_with_meridians: **Websocket interface**: For seamless real-time updates of the network. + +## Getting started + +Learn how to configure and manage your Juno node with the following resources: + +```mdx-code-block +import GuideCard from '@site/src/components/GuideCard'; + + + + + + + + +``` + +:::tip +You can access the Nethermind Starknet RPC service for free at https://data.voyager.online. +::: + +## Community and support + +Join our community for support, engaging discussions, and updates: + +- [Discord](https://discord.gg/SZkKcmmChJ): Connect in real-time with the Juno team and community. +- [X (Twitter)](https://x.com/NethermindStark): Follow for the latest news and insights from Nethermind. +- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0): Share ideas and stay informed with fellow Juno users. + +## Contributions and partnerships + +We value community contributions and are eager to support your involvement. Here’s how you can contribute: + +- :rocket: [Run a Juno node](running-juno) to strengthen the Starknet network. +- :star: Give Juno a [star on GitHub](https://github.com/NethermindEth/juno/stargazers). +- :memo: Share your thoughts on [X (Twitter)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno&via=nethermindeth&text=Juno%20is%20Awesome%2C%20they%20are%20working%20hard%20to%20bring%20decentralization%20to%20StarkNet&hashtags=StarkNet%2CJuno%2CEthereum). +- :beetle: [Report bugs](https://github.com/NethermindEth/juno/issues/new) or [suggest new features](https://github.com/NethermindEth/juno/issues/new). +- :mega: Encourage others to explore and use Juno. + +:::tip +If you're ready to make PRs but unsure where to start, join our [Discord](https://discord.gg/TcHbSZ9ATd), and we'll guide you through some beginner-friendly issues. +::: + +If you're interested in forming a partnership with the Juno team or have any suggestions or special requests, please don't hesitate to contact us via juno@nethermind.io diff --git a/docs/versioned_docs/version-0.12.4/json-rpc.md b/docs/versioned_docs/version-0.12.4/json-rpc.md new file mode 100644 index 0000000000..188c06a879 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/json-rpc.md @@ -0,0 +1,250 @@ +--- +title: JSON-RPC Interface +--- + +# JSON-RPC Interface :globe_with_meridians: + +Interacting with Juno requires sending requests to specific JSON-RPC API methods. Juno supports all of [Starknet's Node API Endpoints](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) over HTTP and [WebSocket](websocket). + +## Enable the JSON-RPC server + +To enable the JSON-RPC interface, use the following configuration options: + +- `http`: Enables the HTTP RPC server on the default port and interface (disabled by default). +- `http-host`: The interface on which the HTTP RPC server will listen for requests. If skipped, it defaults to `localhost`. +- `http-port`: The port on which the HTTP server will listen for requests. If skipped, it defaults to `6060`. + +```bash +# Docker container +docker run -d \ + --name juno \ + -p 6060:6060 \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 + +# Standalone binary +./build/juno --http --http-port 6060 --http-host 0.0.0.0 +``` + +## Making JSON-RPC requests + +You can use any of [Starknet's Node API Endpoints](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) with Juno. Check the availability of Juno with the `juno_version` method: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +} +``` + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +}' +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": "v0.11.7", + "id": 1 +} +``` + + + + +Get the most recent accepted block hash and number with the `starknet_blockHashAndNumber` method: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "starknet_blockHashAndNumber", + "params": [], + "id": 1 +} +``` + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_blockHashAndNumber", + "params": [], + "id": 1 +}' +``` + + + + +```js +const { RpcProvider } = require("starknet"); + +const provider = new RpcProvider({ + nodeUrl: "http://localhost:6060", +}); + +provider.getBlockLatestAccepted().then((blockHashAndNumber) => { + console.log(blockHashAndNumber); +}); +``` + + + + +```go +package main + +import ( + "context" + "fmt" + "log" + "github.com/NethermindEth/juno/core/felt" + "github.com/NethermindEth/starknet.go/rpc" + "github.com/NethermindEth/starknet.go/utils" +) + +func main() { + rpcUrl := "http://localhost:6060" + client, err := rpc.NewClient(rpcUrl) + if err != nil { + log.Fatal(err) + } + + provider := rpc.NewProvider(client) + result, err := provider.BlockHashAndNumber(context.Background()) + if err != nil { + log.Fatal(err) + } + fmt.Println("BlockHashAndNumber:", result) +} +``` + + + + +```rust +use starknet::providers::{ + jsonrpc::{HttpTransport, JsonRpcClient}, + Provider, Url, +}; + +#[tokio::main] +async fn main() { + let provider = JsonRpcClient::new(HttpTransport::new( + Url::parse("http://localhost:6060").unwrap(), + )); + + let result = provider.block_hash_and_number().await; + match result { + Ok(block_hash_and_number) => { + println!("{block_hash_and_number:#?}"); + } + Err(err) => { + eprintln!("Error: {err}"); + } + } +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": { + "block_hash": "0x637ae4d7468bb603c2f16ba7f9118d58c7d7c98a8210260372e83e7c9df443a", + "block_number": 640827 + }, + "id": 1 +} +``` + + + + +## Supported Starknet API versions + +Juno supports the following Starknet API versions: + +- **v0.7.0**: Accessible via endpoints `/v0_7`, `/rpc/v0_7`, or the default `/` +- **v0.6.0**: Accessible via endpoints `/v0_6` or `/rpc/v0_6` + +To use a specific API version, specify the version endpoint in your RPC calls: + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_chainId", + "params": [], + "id": 1 +}' +``` + + + + +```bash +curl --location 'http://localhost:6060/v0_7' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_chainId", + "params": [], + "id": 1 +}' +``` + + + + +```bash +curl --location 'http://localhost:6060/v0_6' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "starknet_chainId", + "params": [], + "id": 1 +}' +``` + + + diff --git a/docs/versioned_docs/version-0.12.4/monitoring.md b/docs/versioned_docs/version-0.12.4/monitoring.md new file mode 100644 index 0000000000..f0abb49b35 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/monitoring.md @@ -0,0 +1,87 @@ +--- +title: Monitoring Juno +--- + +# Monitoring Juno :bar_chart: + +Juno uses [Prometheus](https://prometheus.io/) to monitor and collect metrics data, which you can visualise with [Grafana](https://grafana.com/). You can use these insights to understand what is happening when Juno is running. + +## Enable the metrics server + +To enable the metrics server, use the following configuration options: + +- `metrics`: Enables the Prometheus metrics endpoint on the default port (disabled by default). +- `metrics-host`: The interface on which the Prometheus endpoint will listen for requests. If skipped, it defaults to `localhost`. +- `metrics-port`: The port on which the Prometheus endpoint will listen for requests. If skipped, it defaults to `9090`. + +```bash +# Docker container +docker run -d \ + --name juno \ + -p 9090:9090 \ + nethermind/juno \ + --metrics \ + --metrics-port 9090 \ + --metrics-host 0.0.0.0 + +# Standalone binary +./build/juno --metrics --metrics-port 9090 --metrics-host=0.0.0.0 +``` + +## Configure Grafana dashboard + +### 1. Set up Grafana + +- Follow the [Set up Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/) guide to install Grafana. +- Download and [configure](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#configuration-file-location) the [Grafana dashboard file](/juno_grafana.json). + +### 2. Set up Prometheus + +- Follow the [First steps with Prometheus](https://prometheus.io/docs/introduction/first_steps/) guide to install Prometheus. +- Add the Juno metrics endpoint in the `prometheus.yml` configuration file: + +```yaml title="prometheus.yml" showLineNumbers +scrape_configs: + - job_name: "juno" + static_configs: + - targets: ["localhost:9090"] +``` + +### 3. Set up Grafana Loki + +- Follow the [Get started with Grafana Loki](https://grafana.com/docs/loki/latest/get-started/) guide to install [Loki](https://grafana.com/oss/loki/). +- Configure Loki to [collect logs](https://grafana.com/docs/loki/latest/send-data/) from Juno. You might need to configure log paths or use [Promtail](https://grafana.com/docs/loki/latest/send-data/promtail/) (Loki's agent) to send logs to Loki: + +```yaml title="Sample Loki Configuration" showLineNumbers +scrape_configs: + - job_name: "juno-logs" + labels: + job: "juno" + __path__: "/path/to/juno/logs/*" +``` + +:::tip +To have Juno write logs to a file, use the command: + +```bash +./build/juno >> /path/juno.log 2>&1 +``` + +::: + +### 4. Configure the data sources + +1. Follow the [Grafana data sources](https://grafana.com/docs/grafana/latest/datasources/) guide to add data sources. +2. Choose **Prometheus** as a data source: + +- Enter the URL where Prometheus is running, e.g., `http://localhost:9090`. +- Click the **"Save & Test"** button. + +3. Choose **Loki** as a data source: + +- Enter the URL where Loki is running, e.g., `http://localhost:3100`. +- Click the **"Save & Test"** button. + +![Grafana dashboard](/img/grafana-1.png) + +![Grafana dashboard](/img/grafana-2.png) diff --git a/docs/versioned_docs/version-0.12.4/plugins.md b/docs/versioned_docs/version-0.12.4/plugins.md new file mode 100644 index 0000000000..816f028906 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/plugins.md @@ -0,0 +1,82 @@ +--- +title: Juno Plugins +--- + +Juno supports plugins that satisfy the `JunoPlugin` interface, enabling developers to extend and customize Juno's behaviour and functionality by dynamically loading external plugins during runtime. + +The `JunoPlugin` interface provides a structured way for plugins to interact with the blockchain by sending notifications when new blocks are added or reverted. This ensures state consistency, especially during blockchain reorganizations, while abstracting away the complexity of implementing block syncing and revert logic. + +## JunoPlugin Interface + +Your plugin must implement the `JunoPlugin` interface, which includes methods for initializing, shutting down, and handling new and reverted blocks. + +```go +type JunoPlugin interface { + Init() error + Shutdown() error + NewBlock(block *core.Block, stateUpdate *core.StateUpdate, newClasses map[felt.Felt]core.Class) error + RevertBlock(from, to *BlockAndStateUpdate, reverseStateDiff *core.StateDiff) error +} +``` + +**Init**: Called when the plugin is initialized. This can be used to set up database connections or any other necessary resources. + +**Shutdown**: Called when the Juno node is shut down. This can be used to clean up resources like database connections. + +**NewBlock**: Triggered when a new block is synced by the Juno client. Juno will send the block, the corresponding state update, and any new classes. Importantly, Juno waits for the plugin to finish processing this function call before continuing. This ensures that the plugin completes its task before Juno proceeds with the blockchain sync. + +**RevertBlock**: Called during a blockchain reorganization (reorg). Juno will invoke this method for each block that needs to be reverted. Similar to NewBlock, the client will wait for the plugin to finish handling the revert before moving on to the next block. + +## Example plugin + +Here is a basic example of a plugin that satisfies the `JunoPlugin` interface: + +```go +// go:generate go build -buildmode=plugin -o ../../build/plugin.so ./example.go +type examplePlugin string + +// Important: "JunoPluginInstance" needs to be exported for Juno to load the plugin correctly +var JunoPluginInstance examplePlugin + +var _ junoplugin.JunoPlugin = (*examplePlugin)(nil) + +func (p *examplePlugin) Init() error { + fmt.Println("ExamplePlugin initialized") + return nil +} + +func (p *examplePlugin) Shutdown() error { + fmt.Println("ExamplePlugin shutdown") + return nil +} + +func (p *examplePlugin) NewBlock(block *core.Block, stateUpdate *core.StateUpdate, newClasses map[felt.Felt]core.Class) error { + fmt.Println("ExamplePlugin NewBlock called") + return nil +} + +func (p *examplePlugin) RevertBlock(from, to *junoplugin.BlockAndStateUpdate, reverseStateDiff *core.StateDiff) error { + fmt.Println("ExamplePlugin RevertBlock called") + return nil +} +``` + +The `JunoPluginInstance` variable must be exported for Juno to correctly load the plugin: +`var JunoPluginInstance examplePlugin` + +We ensure the plugin implements the `JunoPlugin` interface, with the following line: +`var _ junoplugin.JunoPlugin = (*examplePlugin)(nil)` + +## Building and loading the plugin + +Once you have written your plugin, you can compile it into a shared object file (.so) using the following command: + +```shell +go build -buildmode=plugin -o ./plugin.so /path/to/your/plugin.go +``` + +This command compiles the plugin into a shared object file (`plugin.so`), which can then be loaded by the Juno client using the `--plugin-path` flag. + +## Running Juno with the plugin + +Once your plugin has been compiled into a `.so` file, you can run Juno with your plugin by providing the `--plugin-path` flag. This flag tells Juno where to find and load your plugin at runtime. diff --git a/docs/versioned_docs/version-0.12.4/running-juno.md b/docs/versioned_docs/version-0.12.4/running-juno.md new file mode 100644 index 0000000000..9646be8f36 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/running-juno.md @@ -0,0 +1,153 @@ +--- +title: Running Juno +--- + +# Running Juno :rocket: + +You can run a Juno node using several methods: + +- [Docker container](#docker-container) +- [Standalone binary](#standalone-binary) +- [Building from source](#building-from-source) +- [Google Cloud Platform (GCP)](running-on-gcp) + +:::tip +You can use a snapshot to quickly synchronise your node with the network. Check out the [Database Snapshots](snapshots) guide to get started. +::: + +## Docker container + +### 1. Get the Docker image + +Juno Docker images can be found at the [nethermind/juno](https://hub.docker.com/r/nethermind/juno) repository on Docker Hub. Download the latest image: + +```bash +docker pull nethermind/juno +``` + +You can also build the image locally: + +```bash +# Clone the Juno repository +git clone https://github.com/NethermindEth/juno +cd juno + +# Build the Docker image +docker build -t nethermind/juno:latest . +``` + +### 2. Run the Docker container + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the container +docker run -d \ + --name juno \ + -p 6060:6060 \ + -v $HOME/snapshots/juno_mainnet:/snapshots/juno_mainnet \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path /snapshots/juno_mainnet +``` + +You can view logs from the Docker container using the following command: + +```bash +docker logs -f juno +``` + +## Standalone binary + +Download standalone binaries from [Juno's GitHub Releases](https://github.com/NethermindEth/juno/releases/latest) as ZIP archives for Linux (amd64 and arm64) and macOS (amd64). For macOS (arm64) or Windows users, consider [running Juno using Docker](#docker-container). + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the binary +./juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path $HOME/snapshots/juno_mainnet +``` + +## Building from source + +You can build the Juno binary or Docker image from the source code to access the latest updates or specific versions. + +### Prerequisites + +- [Golang 1.23](https://go.dev/doc/install) or later +- [Rust](https://www.rust-lang.org/tools/install) +- C compiler: `gcc` or `clang` +- [jemalloc](https://github.com/jemalloc/jemalloc) + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```bash +sudo apt-get install -y libjemalloc-dev +``` + + + + +```bash +brew install jemalloc +``` + + + + +### 1. Clone the repository + +Clone Juno's source code from our [GitHub repository](https://github.com/NethermindEth/juno): + +```bash +git clone https://github.com/NethermindEth/juno +cd juno +``` + +:::tip +You can use `git tag -l` to view specific version tags. +::: + +### 2. Build the binary or Docker image + +```bash +# Build the binary +make juno + +# Build the Docker image +docker build -t nethermind/juno:latest . +``` + +### 3. Run the binary + +Locate the standalone binary in the `./build/` directory: + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the binary +./build/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path $HOME/snapshots/juno_mainnet +``` + +:::tip +To learn how to configure Juno, check out the [Configuring Juno](configuring) guide. +::: diff --git a/docs/versioned_docs/version-0.12.4/running-on-gcp.md b/docs/versioned_docs/version-0.12.4/running-on-gcp.md new file mode 100644 index 0000000000..a589526f34 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/running-on-gcp.md @@ -0,0 +1,76 @@ +--- +title: Running Juno on GCP +--- + +# Running Juno on GCP :cloud: + +To run Juno on the Google Cloud Platform (GCP), you can use the Starknet RPC Virtual Machine (VM) developed by Nethermind. + +## 1. Install the Starknet RPC Node + +Head to the [Google Marketplace](https://console.cloud.google.com/marketplace/browse?q=Starknet%20RPC%20Node) and search for **"Starknet RPC Node"**. Then, click the **"GET STARTED"** button to begin the deployment process. + +![Starknet RPC Node overview](/img/installing_on_gcp/overview.png) + +## 2. Configure the Juno client + +Choose the configuration settings for the Juno client and click the **"DEPLOY"** button. + +![Starknet RPC Node configuration](/img/installing_on_gcp/config.png) + +## 3. Post-configuration and testing + +![Starknet RPC Node testing](/img/installing_on_gcp/testing.png) + +## 4. Enable Juno during startup + +1. Click on the name of the newly created VM instance to view its details. +2. Click the **"Edit"** button. +3. Head to the **"Automation"** section and enter the following startup script: + ```bash + #! /bin/bash + sudo /usr/local/bin/run_juno.sh + ``` +4. Click the **"Save"** button. +5. Restart the VM. + +## 5. Interact with the Juno node + +You can interact with Juno using its [JSON-RPC Interface](json-rpc). Here's an example to check the availability of Juno: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```bash +curl --location 'http://localhost:6060' \ +--header 'Content-Type: application/json' \ +--data '{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +}' +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": "v0.11.7", + "id": 1 +} +``` + + + + +:::tip +To learn how to configure Juno, check out the [Configuring Juno](configuring) guide. +::: diff --git a/docs/versioned_docs/version-0.12.4/running-p2p.md b/docs/versioned_docs/version-0.12.4/running-p2p.md new file mode 100644 index 0000000000..e78ec3a557 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/running-p2p.md @@ -0,0 +1,11 @@ +--- +title: Running a Juno P2P Node +--- + +# Running a Juno P2P Node + +Juno can be run as a peer-to-peer node for decentralised data synchronisation and to enhance the resilience and reliability of the Starknet network. Check out the [Juno peer-to-peer launch](https://medium.com/nethermind-eth/junos-experimental-peer-to-peer-launch-3040e195550d) guide to learn how it works. + +:::caution +The P2P feature is currently under active development and is being tested on smaller Juno networks. As a result, syncing with non-Juno nodes may be unstable. +::: diff --git a/docs/versioned_docs/version-0.12.4/snapshots.md b/docs/versioned_docs/version-0.12.4/snapshots.md new file mode 100644 index 0000000000..9feb3769f7 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/snapshots.md @@ -0,0 +1,88 @@ +--- +title: Database Snapshots +--- + +# Database Snapshots :camera_flash: + +You can download a snapshot of the Juno database to reduce the network syncing time. Only the blocks created after the snapshot will be synced when you run the node. + +## Mainnet + +| Version | Download Link | +| ------- | ------------- | +| **>=v0.9.2** | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/files/mainnet/latest) | + +## Sepolia + +| Version | Download Link | +| ------- | ------------- | +| **>=v0.9.2** | [**juno_sepolia.tar**](https://juno-snapshots.nethermind.dev/files/sepolia/latest) | + +## Sepolia-Integration + +| Version | Download Link | +| ------- | ------------- | +| **>=v0.9.2** | [**juno_sepolia_integration.tar**](https://juno-snapshots.nethermind.dev/files/sepolia-integration/latest) | + +## Getting snapshot sizes + +```console +$date +Thu 1 Aug 2024 09:49:30 BST + +$curl -s -I -L https://juno-snapshots.nethermind.dev/files/mainnet/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }' +172.47 GB + +$curl -s -I -L https://juno-snapshots.nethermind.dev/files/sepolia/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }' +5.67 GB + +$curl -s -I -L https://juno-snapshots.nethermind.dev/files/sepolia-integration/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }' +2.4 GB +``` + +## Run Juno with a snapshot + +### 1. Download the snapshot + +First, download a snapshot from one of the provided URLs: + +```bash +wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/files/mainnet/latest +``` + +### 2. Prepare a directory + +Ensure you have a directory to store the snapshots. We will use the `$HOME/snapshots` directory: + +```bash +mkdir -p $HOME/snapshots +``` + +### 3. Extract the snapshot + +Extract the contents of the downloaded `.tar` file into the directory: + +```bash +tar -xvf juno_mainnet.tar -C $HOME/snapshots +``` + +### 4. Run Juno + +Run the Docker command to start Juno and provide the path to the snapshot using the `db-path` option: + +```bash +docker run -d \ + --name juno \ + -p 6060:6060 \ + -v $HOME/snapshots/juno_mainnet:/snapshots/juno_mainnet \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path /snapshots/juno_mainnet + --eth-node +``` + +:::info +Replace \ with the WebSocket endpoint of your Ethereum node. For Infura users, your address should be: `wss://mainnet.infura.io/ws/v3/your-infura-project-id`. Ensure you use the WebSocket URL (`ws`/`wss`) instead of the HTTP URL (`http`/`https`). +::: diff --git a/docs/versioned_docs/version-0.12.4/staking-validator.md b/docs/versioned_docs/version-0.12.4/staking-validator.md new file mode 100644 index 0000000000..92520cfbdb --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/staking-validator.md @@ -0,0 +1,32 @@ +# Become a Staking Validator + +Staking on Starknet provides an opportunity to contribute to network security and earn rewards by becoming a validator. Check out the [Becoming a Validator](https://docs.starknet.io/staking/entering-staking/) guide to learn more about the validator process. + +## Prerequisites + +- **STRK Tokens**: At least 20,000 STRK is required for staking. For the latest details, check out the [Staking Protocol Details](https://docs.starknet.io/staking/overview/#protocol_details). +- **Node Setup**: The [latest version of Juno](updating) installed and running on your machine. +- **Starknet Wallet**: A compatible wallet, like [Braavos](https://braavos.app/wallet-features/ledger-on-braavos/) or [Argent](https://www.argent.xyz/blog/how-to-use-your-hardware-wallet-with-argent). +- **Access to CLI/Block Explorer**: Tools like [Voyager](https://voyager.online) for interacting with contracts. + +## 1. Set up Juno + +Juno is a reliable choice for running a Starknet node. Follow the [Running Juno](running-juno) guide to configure Juno using Docker, binaries, source builds, or Google Cloud Platform (GCP). + +## 2. Stake STRK tokens + +Register as a validator by staking STRK tokens through the Starknet staking contract. Check out the [Becoming a Validator](https://docs.starknet.io/staking/entering-staking/) guide for complete instructions. The staking process includes: + +- **Pre-approving STRK Transfer**: Allow the staking contract to lock your tokens. +- **Calling the `stake` Function**: Register operational and reward addresses, set commission rates, and enable pooling if desired. + +## 3. Finalising your validator + +Once Juno is running and your STRK tokens are staked: + +1. Monitor your validator's status via dashboards like [Voyager](https://voyager.online/). +2. Stay updated for future network requirements or configurations. + +:::info +You're now a staking validator! With your node running and tokens staked, you support Starknet's security and earn rewards. The network manages most operations, though future updates may require additional setup. +::: diff --git a/docs/versioned_docs/version-0.12.4/updating.md b/docs/versioned_docs/version-0.12.4/updating.md new file mode 100644 index 0000000000..54f449e351 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/updating.md @@ -0,0 +1,88 @@ +--- +title: Updating Juno +--- + +# Updating Juno :arrows_counterclockwise: + +It is important to run the latest version of Juno as each update brings new features, security patches, and improvements over previous versions. Follow these steps to update Juno: + +- [Docker container](#docker-container) +- [Standalone binary](#standalone-binary) +- [Updating from source](#updating-from-source) + +:::info +When running an updated node, use the same `db-path` as before to avoid restarting the sync and use the already synced database. +::: + +## Docker container + +### 1. Get the latest Docker image + +Download the latest Juno Docker image from the [nethermind/juno](https://hub.docker.com/r/nethermind/juno) repository: + +```bash +docker pull nethermind/juno:latest +``` + +### 2. Stop and remove the current Juno container + +Stop the currently running Juno container. If you're unsure of the container name, use `docker ps` to view all running containers: + +```bash +docker stop juno +``` + +Remove the old container to prevent any conflicts with the new version: + +```bash +docker rm juno +``` + +### 3. Start a new container with the updated image + +Run a new container using the updated Docker image: + +```bash +# Prepare the snapshots directory +mkdir -p $HOME/snapshots + +# Run the container +docker run -d \ + --name juno \ + -p 6060:6060 \ + -v $HOME/snapshots/juno_mainnet:/snapshots/juno_mainnet \ + nethermind/juno \ + --http \ + --http-port 6060 \ + --http-host 0.0.0.0 \ + --db-path /snapshots/juno_mainnet +``` + +Verify that the node is running correctly with the updated version: + +```bash +docker logs juno +``` + +## Standalone binary + +Download the latest binary from the [Juno GitHub Releases](https://github.com/NethermindEth/juno/releases/latest) page and replace the existing one. + +## Updating from source + +```bash +# Pull the latest updates to the codebase +git pull + +# Rebuild the binary +make juno + +# OR + +# Rebuild the Docker image +docker build -t nethermind/juno:latest . +``` + +:::tip +To learn how to configure Juno, check out the [Configuring Juno](configuring) guide. +::: diff --git a/docs/versioned_docs/version-0.12.4/websocket.md b/docs/versioned_docs/version-0.12.4/websocket.md new file mode 100644 index 0000000000..ba55e24db8 --- /dev/null +++ b/docs/versioned_docs/version-0.12.4/websocket.md @@ -0,0 +1,207 @@ +--- +title: WebSocket Interface +--- + +# WebSocket Interface :globe_with_meridians: + +Juno provides a WebSocket RPC interface that supports all of [Starknet's JSON-RPC API](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) endpoints and allows you to [subscribe to newly created blocks](#subscribe-to-newly-created-blocks). + +## Enable the WebSocket server + +To enable the WebSocket RPC server, use the following configuration options: + +- `ws`: Enables the Websocket RPC server on the default port (disabled by default). +- `ws-host`: The interface on which the Websocket RPC server will listen for requests. If skipped, it defaults to `localhost`. +- `ws-port`: The port on which the WebSocket server will listen for requests. If skipped, it defaults to `6061`. + +```bash +# Docker container +docker run -d \ + --name juno \ + -p 6061:6061 \ + nethermind/juno \ + --ws \ + --ws-port 6061 \ + --ws-host 0.0.0.0 + +# Standalone binary +./build/juno --ws --ws-port 6061 --ws-host 0.0.0.0 +``` + +## Making WebSocket requests + +You can use any of [Starknet's Node API Endpoints](https://playground.open-rpc.org/?uiSchema%5BappBar%5D%5Bui:splitView%5D=false&schemaUrl=https://raw.githubusercontent.com/starkware-libs/starknet-specs/v0.7.0/api/starknet_api_openrpc.json&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:darkMode%5D=true&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false) with Juno. Check the availability of Juno with the `juno_version` method: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +``` + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_version", + "params": [], + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": "v0.11.7", + "id": 1 +} +``` + + + + +Get the most recent accepted block hash and number with the `starknet_blockHashAndNumber` method: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "starknet_blockHashAndNumber", + "params": [], + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": { + "block_hash": "0x637ae4d7468bb603c2f16ba7f9118d58c7d7c98a8210260372e83e7c9df443a", + "block_number": 640827 + }, + "id": 1 +} +``` + + + + +## Subscribe to newly created blocks + +The WebSocket server provides a `juno_subscribeNewHeads` method that emits an event when new blocks are added to the blockchain: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_subscribeNewHeads", + "params": [], + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": 16570962336122680234, + "id": 1 +} +``` + + + + +When a new block is added, you will receive a message like this: + +```json +{ + "jsonrpc": "2.0", + "method": "juno_subscribeNewHeads", + "params": { + "result": { + "block_hash": "0x840660a07a17ae6a55d39fb6d366698ecda11e02280ca3e9ca4b4f1bad741c", + "parent_hash": "0x529ca67a127e4f40f3ae637fc54c7a56c853b2e085011c64364911af74c9a5c", + "block_number": 65644, + "new_root": "0x4e88ddf34b52091611b34d72849e230d329902888eb57c8e3c1b9cc180a426c", + "timestamp": 1715451809, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "l1_gas_price": { + "price_in_fri": "0x3727bcc63f1", + "price_in_wei": "0x5f438c77" + }, + "l1_data_gas_price": { + "price_in_fri": "0x230e40e8866c6e", + "price_in_wei": "0x3c8c4a9ea51" + }, + "l1_da_mode": "BLOB", + "starknet_version": "0.13.1.1" + }, + "subscription": 16570962336122680234 + } +} +``` + +## Unsubscribe from newly created blocks + +Use the `juno_unsubscribe` method with the `result` value from the subscription response or the `subscription` field from any new block event to stop receiving updates for new blocks: + + + + +```json +{ + "jsonrpc": "2.0", + "method": "juno_unsubscribe", + "params": { + "id": 16570962336122680234 + }, + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": true, + "id": 1 +} +``` + + + + +## Testing the WebSocket connection + +You can test your WebSocket connection using tools like [wscat](https://github.com/websockets/wscat) or [websocat](https://github.com/vi/websocat): + +```bash +# wscat +$ wscat -c ws://localhost:6061 + > {"jsonrpc": "2.0", "method": "juno_version", "id": 1} + < {"jsonrpc": "2.0", "result": "v0.11.7", "id": 1} + +# websocat +$ websocat -v ws://localhost:6061 + [INFO websocat::lints] Auto-inserting the line mode + [INFO websocat::stdio_threaded_peer] get_stdio_peer (threaded) + [INFO websocat::ws_client_peer] get_ws_client_peer + [INFO websocat::ws_client_peer] Connected to ws + {"jsonrpc": "2.0", "method": "juno_version", "id": 1} + {"jsonrpc": "2.0", "result": "v0.11.7", "id": 1} +``` diff --git a/docs/versioned_docs/version-0.6.3/example_config.md b/docs/versioned_docs/version-0.6.3/example_config.md deleted file mode 100644 index 45c20163e8..0000000000 --- a/docs/versioned_docs/version-0.6.3/example_config.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -slug: /config -sidebar_position: 3 -title: Example Configuration ---- - -The Juno binary uses reasonable defaults and can be used without configuration. -For basic fine-tuning, the `--db-path` and `--http-port` options are usually sufficient. - -All available options are in the YAML file below with their default values. -Provide the config using the `--config ` option (Juno looks in `$XDG_CONFIG_HOME` by default). - -Juno can also be configured using command line params by prepending `--` to the option name (e.g., `--log-level info`). -Command line params override values in the configuration file. - -```yaml -# Enable colored logs -colour: true - -# Path to the database. -# Juno uses `$XDG_DATA_HOME/juno` by default, which is usually something like the value below on Linux. -db-path: /home//.local/share/juno - -# Websocket endpoint of the Ethereum node used to verify the L2 chain. -# If using Infura, it looks something like `wss://mainnet.infura.io/ws/v3/your-infura-project-id` -eth-node: "" - -# Enables the HTTP RPC server. -http: false -# Interface on which the HTTP RPC server will listen for requests. -http-host: localhost -# Port on which the HTTP RPC server will listen for requests. -http-port: 6060 - -# The options below are similar to the HTTP RPC options above. -ws: false # Websocket RPC server -ws-host: localhost -ws-port: 6061 -pprof: false -pprof-host: localhost -pprof-port: 6062 -metrics: false -metrics-host: localhost -metrics-port: 9090 -grpc: false -grpc-host: localhost -grpc-port: 6064 - -# Options: debug, info, warn, error -log-level: info - -# Options: mainnet, goerli, goerli2, integration -network: mainnet - -# How often to fetch the pending block when synced to the head of the chain. -# Provide a duration like 5s (five seconds) or 10m (10 minutes). -# Disabled by default. -pending-poll-interval: 0s - -# Experimental p2p options; there is currently no standardized Starknet p2p testnet. -p2p: false # Enable the p2p server -p2p-addr: "" # Source address -p2p-boot-peers: "" # Boot nodes -``` \ No newline at end of file diff --git a/docs/versioned_docs/version-0.6.3/intro.md b/docs/versioned_docs/version-0.6.3/intro.md deleted file mode 100644 index 381e96b0d2..0000000000 --- a/docs/versioned_docs/version-0.6.3/intro.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -slug: / -sidebar_position: 1 -title: Quick Start ---- - -*Juno is your fast and featureful Starknet client implementation.* - -Suitable for casual setups, production-grade indexers, and everything in between. - -- :floppy_disk: **Tiny database size**: ~71Gb on mainnet -- :zap: **Blazing fast sync**: constrained only by hardware and the sequencer -- :100: **100% [JSON-RPC spec](https://github.com/starkware-libs/starknet-specs/tree/master) compliance**: all things Starknet, in one place -- :racing_car: **Minimal RPC response latency**: to keep your applications moving -- :mag_right: **Low-level GRPC database API**: for the most demanding workloads - -# Sync Starknet in Two Commands - -```shell -# Juno's database directory. Can be any directory on the machine. -mkdir -p junodb - -# Juno's HTTP server listens on port 6060. -docker run -d --name juno -p 6060:6060 -v junodb:/var/lib/juno nethermind/juno:latest --db-path /var/lib/juno --http -``` - -For a complete list of options and their explanations, see the [Example Configuration](config) or run: - -```shell -docker run nethermind/juno --help -``` - -# Looking for a Starknet RPC Provider? - -If you are looking for a Starknet RPC provider, Nethermind will offer a Starknet RPC service before the upcoming feeder gateway deprecation. You can register your interest on [this Google Form](https://docs.google.com/forms/d/e/1FAIpQLSf2Bl4fc9-38E-fpWf0tnMWc3jSeOFkpjSPMN_j1en1WmEgKg/viewform?usp=sf_link). - -# Questions, Discussions, Community - -Find active Juno team members and users in the following places. - -- [GitHub](https://github.com/NethermindEth/juno) -- [Discord](https://discord.gg/SZkKcmmChJ) -- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0) \ No newline at end of file diff --git a/docs/versioned_docs/version-0.6.3/snapshots.md b/docs/versioned_docs/version-0.6.3/snapshots.md deleted file mode 100644 index acda6227d5..0000000000 --- a/docs/versioned_docs/version-0.6.3/snapshots.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -slug: /snapshots -sidebar_position: 4 -title: Database Snapshots ---- - -To decrease sync times, users may opt to download a Juno database snapshot. -After downloading a snapshot and starting a Juno node, only recent blocks must be synced. - -## Mainnet - -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.6.0** | **76 GB** | **247401** | [**juno_mainnet_247401.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.6.3_247401.tar) | - -## Goerli - -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.6.0** | **36 GB** | **850192** | [**juno_goerli_850192.tar**](https://juno-snapshots.nethermind.dev/goerli/juno_goerli_v0.6.0_850192.tar) | - -## Goerli2 - -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.6.0** | **4.6 GB** | **139043** | [**juno_goerli2_135973.tar**](https://juno-snapshots.nethermind.dev/goerli2/juno_goerli2_v0.6.0_139043.tar) | - -## Run Juno Using Snapshot - -1. **Download Snapshot** - - Fetch a snapshot from one of the provided URLs: - - ```bash - curl -o juno_mainnet_247401.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.6.3_247401.tar - ``` - -2. **Prepare Directory** - - Ensure you have a directory where you will store the snapshots. We will use `$HOME/snapshots`. - - ```bash - mkdir -p $HOME/snapshots - ``` - -3. **Extract Tarball** - - Extract the contents of the `.tar` file: - - ```bash - tar -xvf juno_mainnet_247401.tar -C $HOME/snapshots - ``` - -4. **Run Juno** - - Execute the Docker command to run Juno, ensuring that you're using the correct snapshot path `$HOME/snapshots/juno_mainnet`: - - ```bash - docker run -d \ - --name juno \ - -p 6060:6060 \ - -v $HOME/snapshots/juno_mainnet:/var/lib/juno \ - nethermind/juno \ - --http \ - --http-port 6060 \ - --http-host 0.0.0.0 \ - --db-path /var/lib/juno - ``` - -After following these steps, Juno should be up and running on your machine, utilizing the provided snapshot. diff --git a/docs/versioned_docs/version-0.7.0/example_config.md b/docs/versioned_docs/version-0.7.0/example_config.md deleted file mode 100644 index 45c20163e8..0000000000 --- a/docs/versioned_docs/version-0.7.0/example_config.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -slug: /config -sidebar_position: 3 -title: Example Configuration ---- - -The Juno binary uses reasonable defaults and can be used without configuration. -For basic fine-tuning, the `--db-path` and `--http-port` options are usually sufficient. - -All available options are in the YAML file below with their default values. -Provide the config using the `--config ` option (Juno looks in `$XDG_CONFIG_HOME` by default). - -Juno can also be configured using command line params by prepending `--` to the option name (e.g., `--log-level info`). -Command line params override values in the configuration file. - -```yaml -# Enable colored logs -colour: true - -# Path to the database. -# Juno uses `$XDG_DATA_HOME/juno` by default, which is usually something like the value below on Linux. -db-path: /home//.local/share/juno - -# Websocket endpoint of the Ethereum node used to verify the L2 chain. -# If using Infura, it looks something like `wss://mainnet.infura.io/ws/v3/your-infura-project-id` -eth-node: "" - -# Enables the HTTP RPC server. -http: false -# Interface on which the HTTP RPC server will listen for requests. -http-host: localhost -# Port on which the HTTP RPC server will listen for requests. -http-port: 6060 - -# The options below are similar to the HTTP RPC options above. -ws: false # Websocket RPC server -ws-host: localhost -ws-port: 6061 -pprof: false -pprof-host: localhost -pprof-port: 6062 -metrics: false -metrics-host: localhost -metrics-port: 9090 -grpc: false -grpc-host: localhost -grpc-port: 6064 - -# Options: debug, info, warn, error -log-level: info - -# Options: mainnet, goerli, goerli2, integration -network: mainnet - -# How often to fetch the pending block when synced to the head of the chain. -# Provide a duration like 5s (five seconds) or 10m (10 minutes). -# Disabled by default. -pending-poll-interval: 0s - -# Experimental p2p options; there is currently no standardized Starknet p2p testnet. -p2p: false # Enable the p2p server -p2p-addr: "" # Source address -p2p-boot-peers: "" # Boot nodes -``` \ No newline at end of file diff --git a/docs/versioned_docs/version-0.7.0/intro.md b/docs/versioned_docs/version-0.7.0/intro.md deleted file mode 100644 index d14770cf1d..0000000000 --- a/docs/versioned_docs/version-0.7.0/intro.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -slug: / -sidebar_position: 1 -title: Quick Start ---- - -*Juno is your fast and featureful Starknet client implementation.* - -Suitable for casual setups, production-grade indexers, and everything in between. - -- :floppy_disk: **Tiny database size**: ~91Gb on mainnet -- :zap: **Blazing fast sync**: constrained only by hardware and the sequencer -- :100: **100% [JSON-RPC spec](https://github.com/starkware-libs/starknet-specs/tree/master) compliance**: all things Starknet, in one place -- :racing_car: **Minimal RPC response latency**: to keep your applications moving -- :mag_right: **Low-level GRPC database API**: for the most demanding workloads - -# Sync Starknet in Two Commands - -```shell -# Juno's database directory. Can be any directory on the machine. -mkdir -p junodb - -# Juno's HTTP server listens on port 6060. -docker run -d --name juno -p 6060:6060 -v junodb:/var/lib/juno nethermind/juno:latest --db-path /var/lib/juno --http --http-host 0.0.0.0 -``` - -For a complete list of options and their explanations, see the [Example Configuration](config) or run: - -```shell -docker run nethermind/juno --help -``` - -# Juno is compatible with the following Starknet API versions: - -- **v0.5.0** (Endpoint: `/v0_5`) -- **v0.4.0** (Endpoint: `/v0_4`) - -To interact with a specific API version, you can specify the version endpoint in your RPC calls. For example: - -```shell -curl -X POST http://localhost:6060/v0_5 -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"juno_version","id":1}' -``` - -# Looking for a Starknet RPC Provider? - -Access Nethermind's Starknet RPC service for free at [data.voyager.online](https://data.voyager.online). - -# Questions, Discussions, Community - -Find active Juno team members and users in the following places. - -- [GitHub](https://github.com/NethermindEth/juno) -- [Discord](https://discord.gg/SZkKcmmChJ) -- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0) diff --git a/docs/versioned_docs/version-0.7.0/snapshots.md b/docs/versioned_docs/version-0.7.0/snapshots.md deleted file mode 100644 index ed1258fa58..0000000000 --- a/docs/versioned_docs/version-0.7.0/snapshots.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -slug: /snapshots -sidebar_position: 4 -title: Database Snapshots ---- - -To decrease sync times, users may opt to download a Juno database snapshot. -After downloading a snapshot and starting a Juno node, only recent blocks must be synced. - -## Mainnet - -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.6.0** | **92 GB** | **313975** | [**juno_mainnet_313975.tar**](https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.6.5_313975.tar) | - -## Goerli - -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.6.0** | **36 GB** | **850192** | [**juno_goerli_850192.tar**](https://juno-snapshots.nethermind.dev/goerli/juno_goerli_v0.6.0_850192.tar) | - -## Goerli2 - -| Version | Size | Block | Download Link | -| ------- | ---- | ----- | ------------- | -| **>=v0.6.0** | **4.6 GB** | **139043** | [**juno_goerli2_135973.tar**](https://juno-snapshots.nethermind.dev/goerli2/juno_goerli2_v0.6.0_139043.tar) | - -## Run Juno Using Snapshot - -1. **Download Snapshot** - - Fetch a snapshot from one of the provided URLs: - - ```bash - wget -O juno_mainnet_313975.tar https://juno-snapshots.nethermind.dev/mainnet/juno_mainnet_v0.6.5_313975.tar - ``` - -2. **Prepare Directory** - - Ensure you have a directory where you will store the snapshots. We will use `$HOME/snapshots`. - - ```bash - mkdir -p $HOME/snapshots - ``` - -3. **Extract Tarball** - - Extract the contents of the `.tar` file: - - ```bash - tar -xvf juno_mainnet_313975.tar -C $HOME/snapshots - ``` - -4. **Run Juno** - - Execute the Docker command to run Juno, ensuring that you're using the correct snapshot path `$HOME/snapshots/juno_mainnet`: - - ```bash - docker run -d \ - --name juno \ - -p 6060:6060 \ - -v $HOME/snapshots/juno_mainnet:/var/lib/juno \ - nethermind/juno \ - --http \ - --http-port 6060 \ - --http-host 0.0.0.0 \ - --db-path /var/lib/juno - ``` - -After following these steps, Juno should be up and running on your machine, utilizing the provided snapshot. diff --git a/docs/versioned_sidebars/version-0.12.4-sidebars.json b/docs/versioned_sidebars/version-0.12.4-sidebars.json new file mode 100644 index 0000000000..77abeb11f2 --- /dev/null +++ b/docs/versioned_sidebars/version-0.12.4-sidebars.json @@ -0,0 +1,39 @@ +{ + "main": [ + "intro", + { + "type": "category", + "label": "Installation and Setup", + "collapsed": false, + "items": [ + "hardware-requirements", + "running-juno", + "configuring", + "plugins", + "running-on-gcp", + "updating" + ] + }, + { + "type": "category", + "label": "Interacting with Juno", + "collapsed": false, + "items": [ + "json-rpc", + "websocket", + { + "type": "html", + "value": "Starknet Node API Endpoints " + }, + { + "type": "html", + "value": "Starknet RPC Request Builder " + } + ] + }, + "staking-validator", + "monitoring", + "snapshots", + "faq" + ] +} diff --git a/docs/versioned_sidebars/version-0.6.3-sidebars.json b/docs/versioned_sidebars/version-0.6.3-sidebars.json deleted file mode 100644 index 1c5d5e44ea..0000000000 --- a/docs/versioned_sidebars/version-0.6.3-sidebars.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "main": [ - { - "type": "autogenerated", - "dirName": "." - } - ] -} diff --git a/docs/versioned_sidebars/version-0.7.0-sidebars.json b/docs/versioned_sidebars/version-0.7.0-sidebars.json deleted file mode 100644 index 1c5d5e44ea..0000000000 --- a/docs/versioned_sidebars/version-0.7.0-sidebars.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "main": [ - { - "type": "autogenerated", - "dirName": "." - } - ] -} diff --git a/docs/versions.json b/docs/versions.json index f27ac452b6..5baeaa4f10 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1 +1 @@ -["0.11.8", "0.11.0", "0.9.3", "0.8.0", "0.7.0", "0.6.3"] +["0.12.4", "0.11.8", "0.11.0", "0.9.3", "0.8.0"] diff --git a/go.mod b/go.mod index bc1b6bc784..184289ad03 100644 --- a/go.mod +++ b/go.mod @@ -16,8 +16,8 @@ require ( github.com/fxamacker/cbor/v2 v2.7.0 github.com/go-playground/validator/v10 v10.22.1 github.com/jinzhu/copier v0.4.0 - github.com/libp2p/go-libp2p v0.36.2 - github.com/libp2p/go-libp2p-kad-dht v0.27.0 + github.com/libp2p/go-libp2p v0.37.0 + github.com/libp2p/go-libp2p-kad-dht v0.28.1 github.com/libp2p/go-libp2p-pubsub v0.12.0 github.com/mitchellh/mapstructure v1.5.0 github.com/multiformats/go-multiaddr v0.14.0 @@ -67,7 +67,7 @@ require ( github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.4 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -79,7 +79,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/gopacket v1.1.19 // indirect - github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/google/pprof v0.0.0-20241017200806-017d972448fc // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -90,7 +90,7 @@ require ( github.com/holiman/uint256 v1.3.1 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/boxo v0.22.0 // indirect + github.com/ipfs/boxo v0.24.3 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect @@ -98,7 +98,7 @@ require ( github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect - github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -106,7 +106,7 @@ require ( github.com/leodido/go-urn v1.4.0 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect - github.com/libp2p/go-flow-metrics v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect github.com/libp2p/go-libp2p-kbucket v0.6.4 // indirect github.com/libp2p/go-libp2p-record v0.2.0 // indirect @@ -128,7 +128,7 @@ require ( github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect + github.com/multiformats/go-multiaddr-dns v0.4.0 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect github.com/multiformats/go-multicodec v0.9.0 // indirect @@ -136,14 +136,14 @@ require ( github.com/multiformats/go-multistream v0.5.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/onsi/ginkgo/v2 v2.20.0 // indirect + github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/pion/datachannel v1.5.8 // indirect + github.com/pion/datachannel v1.5.9 // indirect github.com/pion/dtls/v2 v2.2.12 // indirect - github.com/pion/ice/v2 v2.3.34 // indirect - github.com/pion/interceptor v0.1.30 // indirect + github.com/pion/ice/v2 v2.3.36 // indirect + github.com/pion/interceptor v0.1.37 // indirect github.com/pion/logging v0.2.2 // indirect github.com/pion/mdns v0.0.12 // indirect github.com/pion/randutil v0.1.0 // indirect @@ -155,15 +155,15 @@ require ( github.com/pion/stun v0.6.1 // indirect github.com/pion/transport/v2 v2.2.10 // indirect github.com/pion/turn/v2 v2.1.6 // indirect - github.com/pion/webrtc/v3 v3.3.0 // indirect + github.com/pion/webrtc/v3 v3.3.4 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polydawn/refmt v0.89.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/common v0.60.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/quic-go v0.46.0 // indirect - github.com/quic-go/webtransport-go v0.8.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.48.1 // indirect + github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.2 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect @@ -178,25 +178,25 @@ require ( github.com/tklauser/go-sysconf v0.3.13 // indirect github.com/tklauser/numcpus v0.7.0 // indirect github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect - github.com/wlynxg/anet v0.0.4 // indirect + github.com/wlynxg/anet v0.0.5 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel v1.27.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect - go.opentelemetry.io/otel/trace v1.27.0 // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect go.uber.org/dig v1.18.0 // indirect - go.uber.org/fx v1.22.2 // indirect + go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.29.0 // indirect + golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.30.0 // indirect golang.org/x/sync v0.9.0 // indirect golang.org/x/sys v0.27.0 // indirect golang.org/x/text v0.20.0 // indirect - golang.org/x/tools v0.24.0 // indirect + golang.org/x/tools v0.26.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect gopkg.in/ini.v1 v1.67.0 // indirect lukechampine.com/blake3 v1.3.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect diff --git a/go.sum b/go.sum index 68d90ffc85..b31eeda6a0 100644 --- a/go.sum +++ b/go.sum @@ -128,8 +128,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I= -github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= @@ -209,8 +209,8 @@ github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20241017200806-017d972448fc h1:NGyrhhFhwvRAZg02jnYVg3GBQy0qGBKmFQJwaPmpmxs= +github.com/google/pprof v0.0.0-20241017200806-017d972448fc/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -250,8 +250,8 @@ github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/ipfs/boxo v0.22.0 h1:QTC+P5uhsBNq6HzX728nsLyFW6rYDeR/5hggf9YZX78= -github.com/ipfs/boxo v0.22.0/go.mod h1:yp1loimX0BDYOR0cyjtcXHv15muEh5V1FqO2QLlzykw= +github.com/ipfs/boxo v0.24.3 h1:gldDPOWdM3Rz0v5LkVLtZu7A7gFNvAlWcmxhCqlHR3c= +github.com/ipfs/boxo v0.24.3/go.mod h1:h0DRzOY1IBFDHp6KNvrJLMFdSXTYID0Zf+q7X05JsNg= github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs= github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= @@ -285,8 +285,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= @@ -310,14 +310,14 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= -github.com/libp2p/go-libp2p v0.36.2 h1:BbqRkDaGC3/5xfaJakLV/BrpjlAuYqSB0lRvtzL3B/U= -github.com/libp2p/go-libp2p v0.36.2/go.mod h1:XO3joasRE4Eup8yCTTP/+kX+g92mOgRaadk46LmPhHY= +github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= +github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= +github.com/libp2p/go-libp2p v0.37.0 h1:8K3mcZgwTldydMCNOiNi/ZJrOB9BY+GlI3UxYzxBi9A= +github.com/libp2p/go-libp2p v0.37.0/go.mod h1:GOKmSN99scDuYGTwaTbQPR8Nt6dxrK3ue7OjW2NGDg4= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-kad-dht v0.27.0 h1:1Ea32tVTPiAfaLpPMbaBWFJgbsi/JpMqC2YBuFdf32o= -github.com/libp2p/go-libp2p-kad-dht v0.27.0/go.mod h1:ixhjLuzaXSGtWsKsXTj7erySNuVC4UP7NO015cRrF14= +github.com/libp2p/go-libp2p-kad-dht v0.28.1 h1:DVTfzG8Ybn88g9RycIq47evWCRss5f0Wm8iWtpwyHso= +github.com/libp2p/go-libp2p-kad-dht v0.28.1/go.mod h1:0wHURlSFdAC42+wF7GEmpLoARw8JuS8do2guCtc/Y/w= github.com/libp2p/go-libp2p-kbucket v0.6.4 h1:OjfiYxU42TKQSB8t8WYd8MKhYhMJeO2If+NiuKfb6iQ= github.com/libp2p/go-libp2p-kbucket v0.6.4/go.mod h1:jp6w82sczYaBsAypt5ayACcRJi0lgsba7o4TzJKEfWA= github.com/libp2p/go-libp2p-pubsub v0.12.0 h1:PENNZjSfk8KYxANRlpipdS7+BfLmOl3L2E/6vSNjbdI= @@ -354,7 +354,6 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= @@ -384,11 +383,10 @@ github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYg github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= github.com/multiformats/go-multiaddr v0.14.0 h1:bfrHrJhrRuh/NXH5mCnemjpbGjzRw/b+tJFOD41g2tU= github.com/multiformats/go-multiaddr v0.14.0/go.mod h1:6EkVAxtznq2yC3QT5CM1UTAwG0GTP3EWAIcjHuzQ+r4= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= +github.com/multiformats/go-multiaddr-dns v0.4.0 h1:P76EJ3qzBXpUXZ3twdCDx/kvagMsNo0LMFXpyms/zgU= +github.com/multiformats/go-multiaddr-dns v0.4.0/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= @@ -400,7 +398,6 @@ github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7B github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= github.com/multiformats/go-multistream v0.5.0 h1:5htLSLl7lvJk3xx3qT/8Zm9J4K8vEOf/QGkvOGQAyiE= github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dydlEqV3l6N3/GBsX6ILA= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= @@ -409,8 +406,8 @@ github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJE github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.20.0 h1:PE84V2mHqoT1sglvHc8ZdQtPcwmvvt29WLEEO3xmdZw= -github.com/onsi/ginkgo/v2 v2.20.0/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -423,15 +420,15 @@ github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6 github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pion/datachannel v1.5.8 h1:ph1P1NsGkazkjrvyMfhRBUAWMxugJjq2HfQifaOoSNo= -github.com/pion/datachannel v1.5.8/go.mod h1:PgmdpoaNBLX9HNzNClmdki4DYW5JtI7Yibu8QzbL3tI= +github.com/pion/datachannel v1.5.9 h1:LpIWAOYPyDrXtU+BW7X0Yt/vGtYxtXQ8ql7dFfYUVZA= +github.com/pion/datachannel v1.5.9/go.mod h1:kDUuk4CU4Uxp82NH4LQZbISULkX/HtzKa4P7ldf9izE= github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= -github.com/pion/ice/v2 v2.3.34 h1:Ic1ppYCj4tUOcPAp76U6F3fVrlSw8A9JtRXLqw6BbUM= -github.com/pion/ice/v2 v2.3.34/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= -github.com/pion/interceptor v0.1.30 h1:au5rlVHsgmxNi+v/mjOPazbW1SHzfx7/hYOEYQnUcxA= -github.com/pion/interceptor v0.1.30/go.mod h1:RQuKT5HTdkP2Fi0cuOS5G5WNymTjzXaGF75J4k7z2nc= +github.com/pion/ice/v2 v2.3.36 h1:SopeXiVbbcooUg2EIR8sq4b13RQ8gzrkkldOVg+bBsc= +github.com/pion/ice/v2 v2.3.36/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= +github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= +github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= @@ -463,8 +460,8 @@ github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uP github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= -github.com/pion/webrtc/v3 v3.3.0 h1:Rf4u6n6U5t5sUxhYPQk/samzU/oDv7jk6BA5hyO2F9I= -github.com/pion/webrtc/v3 v3.3.0/go.mod h1:hVmrDJvwhEertRWObeb1xzulzHGeVUoPlWvxdGzcfU0= +github.com/pion/webrtc/v3 v3.3.4 h1:v2heQVnXTSqNRXcaFQVOhIOYkLMxOu1iJG8uy1djvkk= +github.com/pion/webrtc/v3 v3.3.4/go.mod h1:liNa+E1iwyzyXqNUwvoMRNQ10x8h8FOeJKL8RkIbamE= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -484,17 +481,17 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= +github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.46.0 h1:uuwLClEEyk1DNvchH8uCByQVjo3yKL9opKulExNDs7Y= -github.com/quic-go/quic-go v0.46.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= -github.com/quic-go/webtransport-go v0.8.0 h1:HxSrwun11U+LlmwpgM1kEqIqH90IT4N8auv/cD7QFJg= -github.com/quic-go/webtransport-go v0.8.0/go.mod h1:N99tjprW432Ut5ONql/aUhSLT0YVSlwHohQsuac9WaM= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.48.1 h1:y/8xmfWI9qmGTc+lBr4jKRUWLGSlSigv847ULJ4hYXA= +github.com/quic-go/quic-go v0.48.1/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -605,8 +602,8 @@ github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvS github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= -github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -620,19 +617,19 @@ github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= -go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= -go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= -go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= -go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= -go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.22.2 h1:iPW+OPxv0G8w75OemJ1RAnTUrF55zOJlXlo1TbJ0Buw= -go.uber.org/fx v1.22.2/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= +go.uber.org/fx v1.23.0 h1:lIr/gYWQGfTwGcSXWXu4vP5Ws6iqnNEIY+F/aFzCKTg= +go.uber.org/fx v1.23.0/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -661,8 +658,8 @@ golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1m golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= -golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -675,8 +672,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -700,8 +697,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= -golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -732,7 +729,6 @@ golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -786,8 +782,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= +golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -808,8 +804,8 @@ google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=