# bridge-history-api This directory contains the `bridge-history-api` service that provides REST APIs to query txs interact with Scroll official bridge contracts ## Instructions The bridge-history-api contains three distinct components ### bridgehistoryapi-db-cli Provide init, show version, rollback, and check status services of DB ``` cd ./bridge-history-api make bridgehistoryapi-db-cli ./build/bin/bridgehistoryapi-db-cli [command] ``` ### bridgehistoryapi-fetcher Fetch the transactions from both L1 and L2 ``` cd ./bridge-history-api make bridgehistoryapi-fetcher ./build/bin/bridgehistoryapi-fetcher ``` ### bridgehistoryapi-api provides REST APIs. Please refer to the API details below. ``` cd ./bridge-history-api make bridgehistoryapi-api ./build/bin/bridgehistoryapi-api ``` ## APIs provided by bridgehistoryapi-api 1. `/api/txs` ``` // @Summary get all txs under the given address // @Accept plain // @Produce plain // @Param address query string true "wallet address" // @Param page_size query int true "page size" // @Param page query int true "page" // @Success 200 // @Router /api/txs [get] ``` 2. `/api/l2/withdrawals` ``` // @Summary get all L2 withdrawals under given address // @Accept plain // @Produce plain // @Param address query string true "wallet address" // @Param page_size query int true "page size" // @Param page query int true "page" // @Success 200 // @Router /api/l2/withdrawals [get] ``` 3. `/api/l2/unclaimed/withdrawals` ``` // @Summary get all L2 unclaimed withdrawals under the given address // @Accept plain // @Produce plain // @Param address query string true "wallet address" // @Param page_size query int true "page size" // @Param page query int true "page" // @Success 200 // @Router /api/l2/unclaimed/withdrawals [get] ``` 4. `/api/txsbyhashes` ``` // @Summary get txs by given tx hashes // @Accept plain // @Produce plain // @Param hashes query string array true "array of hashes" // @Success 200 // @Router /api/txsbyhashes [post] ``` ## Running bridge-history-api locally 1. Pull the latest Redis image: ``` docker pull redis:latest ``` 2. Run the Redis container: ``` docker run --name bridgehistoryapi-redis -d -p 6379:6379 redis:latest ``` 3. Pull the latest PostgreSQL image: ``` docker pull postgres:latest ``` 4. Run the PostgreSQL container: ``` docker run --name bridgehistoryapi-history-db -p 5444:5432 -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=test -d postgres ``` 5. Run database migrations to initialize the tables: ``` make bridgehistoryapi-db-cli ./build/bin/bridgehistoryapi-db-cli migrate ``` 6. Run bridgehistoryapi-fetcher: ``` make bridgehistoryapi-fetcher ./build/bin/bridgehistoryapi-fetcher ``` 7. Run bridgehistoryapi-api: ``` make bridgehistoryapi-api ./build/bin/bridgehistoryapi-api ``` The endpoints provided in [./conf/config.json](./conf/config.json) are all public endpoints and have rate limits. For production usage: - For L1 endpoints, utilizing a service provider's free tier should suffice. - For L2 endpoints, consider [running a Scroll L2geth node](https://docs.scroll.xyz/en/developers/guides/running-a-scroll-node) and using the exposed HTTP port.