{"id":19252097,"url":"https://github.com/optimism-java/blob-archiver-rs","last_synced_at":"2026-02-18T07:02:30.484Z","repository":{"id":235660500,"uuid":"774224690","full_name":"optimism-java/blob-archiver-rs","owner":"optimism-java","description":"This is a Rust implementation of the Beacon Chain blob archiver","archived":false,"fork":false,"pushed_at":"2025-03-06T03:27:53.000Z","size":244,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-21T13:38:23.511Z","etag":null,"topics":["blob","eip-4844","eth2-beacon-chain","ethereum","rust","rust-lang"],"latest_commit_sha":null,"homepage":"https://optimism-java.github.io/blob-archiver-rs-docs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/optimism-java.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-19T06:59:50.000Z","updated_at":"2025-03-06T03:27:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"075d9b2f-e2aa-423f-8fe7-7c81398548fd","html_url":"https://github.com/optimism-java/blob-archiver-rs","commit_stats":null,"previous_names":["optimism-java/blob-archiver-rs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/optimism-java/blob-archiver-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimism-java%2Fblob-archiver-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimism-java%2Fblob-archiver-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimism-java%2Fblob-archiver-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimism-java%2Fblob-archiver-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/optimism-java","download_url":"https://codeload.github.com/optimism-java/blob-archiver-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimism-java%2Fblob-archiver-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29571888,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T06:19:27.422Z","status":"ssl_error","status_checked_at":"2026-02-18T06:18:44.348Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blob","eip-4844","eth2-beacon-chain","ethereum","rust","rust-lang"],"created_at":"2024-11-09T18:25:28.781Z","updated_at":"2026-02-18T07:02:30.466Z","avatar_url":"https://github.com/optimism-java.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blob-archiver-rs\nThis is a Rust implementation of\nthe [Beacon Chain blob archiver](https://github.com/base/blob-archiver)\n\nThe Blob Archiver is a service to archive and allow querying of all historical blobs from the beacon chain. It consists\nof two components:\n\n* **Archiver** - Tracks the beacon chain and writes blobs to a storage backend\n* **API** - Implements the blob sidecars [API](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlobSidecars), which\n  allows clients to retrieve blobs from the storage backend\n\n### Storage\nThere are currently two supported storage options:\n\n* On-disk storage - Blobs are written to disk in a directory\n* S3 storage - Blobs are written to an S3 bucket (or compatible service)\n\nYou can control which storage backend is used by setting the `STORAGE_TYPE` to\neither `file` or `s3`.\n\nThe `s3` backend will also work with (for example) Google Cloud Storage buckets (instructions [here](https://medium.com/google-cloud/using-google-cloud-storage-with-minio-object-storage-c994fe4aab6b)).\n\n### Development\n```sh\n# Run the tests\ncargo test --workspace --all-features --all-targets --locked\n\n# Lint the project\ncargo clippy --workspace --all-targets --all-features -- -D warnings\n\n# Build the project\ncargo build --workspace --all-targets --all-features\n\n```\n\n#### Run Locally\nTo run the project locally, you should first copy `.env.template` to `.env` and then modify the environment variables\nto your beacon client and storage backend of choice. Then you can run the project with:\n\n```sh\ndocker compose up\n```\n\n#### Get blobs\nAfter successfully starting the service, you can use the following command to obtain the blob:\n\n- get blob by block id from api service:\n```shell\n# also there is support other type of block id, like: finalized,justified.\ncurl -X 'GET' 'http://localhost:8000/eth/v1/beacon/blob_sidecars/head' -H 'accept: application/json'\n```\n\n- get blob by slot number from api service:\n```shell\ncurl -X 'GET' 'http://localhost:8000/eth/v1/beacon/blob_sidecars/7111008' -H 'accept: application/json'\n```\n\n#### Storage Dashboard\nMinIO has started the dashboard, allowing you to view the status of blob storage.\nBy default, you can access it directly at:\n```http\nhttp://localhost:9999\n```\n\n##  Options\n\n### `verbose`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --verbose=\u003cVERBOSE\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --verbose=2\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `log_dir`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --log_dir=\u003cLOG_DIR\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --log_dir=/var/log/blob-archiver\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `log_rotation`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --log_rotation=\u003cLOG_ROTATION\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --log_rotation=DAILY\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `beacon_endpoint`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --beacon_endpoint=\u003cBEACON_ENDPOINT\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --beacon_endpoint=http://localhost:5052\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `beacon_client_timeout`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --beacon_client_timeout=\u003cBEACON_CLIENT_TIMEOUT\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --beacon_client_timeout=10\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `poll_interval`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --poll_interval=\u003cPOLL_INTERVAL\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --poll_interval=6\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `listen_addr`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --listen_addr=\u003cLISTEN_ADDR\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --listen_addr=0.0.0.0:8000\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `origin_block`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --origin_block=\u003cORIGIN_BLOCK\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --origin_block=\"0x0\"\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `storage_type`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --storage_type=\u003cSTORAGE_TYPE\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --storage_type=\"s3\"\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `s3_endpoint`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --s3_endpoint=\u003cS3_ENDPOINT\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --s3_endpoint=\"http://localhost:9000\"\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `s3_bucket`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --s3_bucket=\u003cS3_BUCKET\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --s3_bucket=\"blobs\"\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `s3_path`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --s3_path=\u003cS3_PATH\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --s3_path=/blobs\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `s3_compress`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --s3_compress=\u003cS3_COMPRESS\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --s3_compress=false\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e\n\n### `fs_dir`\n\n\u003cTabs\u003e\n\u003cTabItem value=\"Syntax\" label=\"Syntax\" default\u003e\n\n    ```shell\n    --fs_dir=\u003cFS_DIR\u003e\n    ```\n\n\u003c/TabItem\u003e\n\n\u003cTabItem value=\"Example\" label=\"Example\"\u003e\n\n    ```shell\n    --fs_dir=/blobs\n    ```\n\n\u003c/TabItem\u003e\n\u003c/Tabs\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foptimism-java%2Fblob-archiver-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foptimism-java%2Fblob-archiver-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foptimism-java%2Fblob-archiver-rs/lists"}