{"id":37123851,"url":"https://github.com/syscoin/rosetta-syscoin","last_synced_at":"2026-01-14T14:18:02.860Z","repository":{"id":57564368,"uuid":"317649136","full_name":"syscoin/rosetta-syscoin","owner":"syscoin","description":"Bitcoin Rosetta API Implementation","archived":false,"fork":true,"pushed_at":"2020-12-11T06:49:29.000Z","size":370,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T10:13:58.125Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"coinbase/mesh-bitcoin","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/syscoin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-01T19:41:01.000Z","updated_at":"2022-03-25T09:40:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/syscoin/rosetta-syscoin","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/syscoin/rosetta-syscoin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syscoin%2Frosetta-syscoin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syscoin%2Frosetta-syscoin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syscoin%2Frosetta-syscoin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syscoin%2Frosetta-syscoin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/syscoin","download_url":"https://codeload.github.com/syscoin/rosetta-syscoin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syscoin%2Frosetta-syscoin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28422581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2026-01-14T14:18:02.098Z","updated_at":"2026-01-14T14:18:02.852Z","avatar_url":"https://github.com/syscoin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.rosetta-api.org\"\u003e\n    \u003cimg width=\"90%\" alt=\"Rosetta\" src=\"https://www.rosetta-api.org/img/rosetta_header.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 align=\"center\"\u003e\n   Rosetta Syscoin\n\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://circleci.com/gh/syscoin/rosetta-syscoin/tree/master\"\u003e\u003cimg src=\"https://circleci.com/gh/syscoin/rosetta-syscoin/tree/master.svg?style=shield\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/syscoin/rosetta-syscoin\"\u003e\u003cimg src=\"https://coveralls.io/repos/github/syscoin/rosetta-syscoin/badge.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/syscoin/rosetta-syscoin\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/syscoin/rosetta-syscoin\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/syscoin/rosetta-syscoin/blob/master/LICENSE.txt\"\u003e\u003cimg src=\"https://img.shields.io/github/license/syscoin/rosetta-syscoin.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/syscoin/rosetta-syscoin?tab=overview\"\u003e\u003cimg src=\"https://img.shields.io/badge/go.dev-reference-007d9c?logo=go\u0026logoColor=white\u0026style=shield\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003e\nROSETTA-SYSCOIN IS CONSIDERED \u003ca href=\"https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha\"\u003eALPHA SOFTWARE\u003c/a\u003e.\nUSE AT YOUR OWN RISK! COINBASE ASSUMES NO RESPONSIBILITY NOR LIABILITY IF THERE IS A BUG IN THIS IMPLEMENTATION.\n\u003c/b\u003e\u003c/p\u003e\n\n## Overview\n`rosetta-syscoin` provides a reference implementation of the Rosetta API for\nSyscoin in Golang. If you haven't heard of the Rosetta API, you can find more\ninformation [here](https://rosetta-api.org).\n\n## Features\n* Rosetta API implementation (both Data API and Construction API)\n* UTXO cache for all accounts (accessible using `/account/balance`)\n* Stateless, offline, curve-based transaction construction from any SegWit-Bech32 Address\n\n## Usage\nAs specified in the [Rosetta API Principles](https://www.rosetta-api.org/docs/automated_deployment.html),\nall Rosetta implementations must be deployable via Docker and support running via either an\n[`online` or `offline` mode](https://www.rosetta-api.org/docs/node_deployment.html#multiple-modes).\n\n**YOU MUST INSTALL DOCKER FOR THE FOLLOWING INSTRUCTIONS TO WORK. YOU CAN DOWNLOAD\nDOCKER [HERE](https://www.docker.com/get-started).**\n\n### Install\nRunning the following commands will create a Docker image called `rosetta-syscoin:latest`.\n\n#### From GitHub\nTo download the pre-built Docker image from the latest release, run:\n```text\ncurl -sSfL https://raw.githubusercontent.com/syscoin/rosetta-syscoin/master/install.sh | sh -s\n```\n_Do not try to install rosetta-syscoin using GitHub Packages!_\n\n#### From Source\nAfter cloning this repository, run:\n```text\nmake build-local\n```\n\n### Run\nRunning the following commands will start a Docker container in\n[detached mode](https://docs.docker.com/engine/reference/run/#detached--d) with\na data directory at `\u003cworking directory\u003e/syscoin-data` and the Rosetta API accessible\nat port `8080`.\n\n#### Mainnet:Online\n```text\ndocker run -d --rm --ulimit \"nofile=100000:100000\" -v \"$(pwd)/syscoin-data:/data\" -e \"MODE=ONLINE\" -e \"NETWORK=MAINNET\" -e \"PORT=8080\" -p 8080:8080 -p 8369:8369 rosetta-syscoin:latest\n```\n_If you cloned the repository, you can run `make run-mainnet-online`._\n\n#### Mainnet:Offline\n```text\ndocker run -d --rm -e \"MODE=OFFLINE\" -e \"NETWORK=MAINNET\" -e \"PORT=8081\" -p 8081:8081 rosetta-syscoin:latest\n```\n_If you cloned the repository, you can run `make run-mainnet-offline`._\n\n#### Testnet:Online\n```text\ndocker run -d --rm --ulimit \"nofile=100000:100000\" -v \"$(pwd)/syscoin-data:/data\" -e \"MODE=ONLINE\" -e \"NETWORK=TESTNET\" -e \"PORT=8080\" -p 8080:8080 -p 18369:18369 rosetta-syscoin:latest\n```\n_If you cloned the repository, you can run `make run-testnet-online`._\n\n#### Testnet:Offline\n```text\ndocker run -d --rm -e \"MODE=OFFLINE\" -e \"NETWORK=TESTNET\" -e \"PORT=8081\" -p 8081:8081 rosetta-syscoin:latest\n```\n_If you cloned the repository, you can run `make run-testnet-offline`._\n\n## System Requirements\n`rosetta-syscoin` has been tested on an [AWS c5.2xlarge instance](https://aws.amazon.com/ec2/instance-types/c5).\nThis instance type has 8 vCPU and 16 GB of RAM.\n\n### Network Settings\nTo increase the load `rosetta-syscoin` can handle, it is recommended to tune your OS\nsettings to allow for more connections. On a linux-based OS, you can run the following\ncommands ([source](http://www.tweaked.io/guide/kernel)):\n```text\nsysctl -w net.ipv4.tcp_tw_reuse=1\nsysctl -w net.core.rmem_max=16777216\nsysctl -w net.core.wmem_max=16777216\nsysctl -w net.ipv4.tcp_max_syn_backlog=10000\nsysctl -w net.core.somaxconn=10000\nsysctl -p (when done)\n```\n_We have not tested `rosetta-syscoin` with `net.ipv4.tcp_tw_recycle` and do not recommend\nenabling it._\n\nYou should also modify your open file settings to `100000`. This can be done on a linux-based OS\nwith the command: `ulimit -n 100000`.\n\n### Memory-Mapped Files\n`rosetta-syscoin` uses [memory-mapped files](https://en.wikipedia.org/wiki/Memory-mapped_file) to\npersist data in the `indexer`. As a result, you **must** run `rosetta-syscoin` on a 64-bit\narchitecture (the virtual address space easily exceeds 100s of GBs).\n\nIf you receive a kernel OOM, you may need to increase the allocated size of swap space\non your OS. There is a great tutorial for how to do this on Linux [here](https://linuxize.com/post/create-a-linux-swap-file/).\n\n## Architecture\n`rosetta-syscoin` uses the `syncer`, `storage`, `parser`, and `server` package\nfrom [`rosetta-sdk-go`](https://github.com/coinbase/rosetta-sdk-go) instead\nof a new Syscoin-specific implementation of packages of similar functionality. Below\nyou can find a high-level overview of how everything fits together:\n```text\n                               +------------------------------------------------------------------+\n                               |                                                                  |\n                               |                 +--------------------------------------+         |\n                               |                 |                                      |         |\n                               |                 |                 indexer              |         |\n                               |                 |                                      |         |\n                               |                 | +--------+                           |         |\n                               +-------------------+ pruner \u003c----------+                |         |\n                               |                 | +--------+          |                |         |\n                         +-----v----+            |                     |                |         |\n                         | syscoind |            |              +------+--------+       |         |\n                         +-----+----+            |     +--------\u003e block_storage \u003c----+  |         |\n                               |                 |     |        +---------------+    |  |         |\n                               |                 | +---+----+                        |  |         |\n                               +-------------------\u003e syncer |                        |  |         |\n                                                 | +---+----+                        |  |         |\n                                                 |     |        +--------------+     |  |         |\n                                                 |     +--------\u003e coin_storage |     |  |         |\n                                                 |              +------^-------+     |  |         |\n                                                 |                     |             |  |         |\n                                                 +--------------------------------------+         |\n                                                                       |             |            |\n+-------------------------------------------------------------------------------------------+     |\n|                                                                      |             |      |     |\n|         +------------------------------------------------------------+             |      |     |\n|         |                                                                          |      |     |\n|         |                     +---------------------+-----------------------+------+      |     |\n|         |                     |                     |                       |             |     |\n| +-------+---------+   +-------+---------+   +-------+-------+   +-----------+----------+  |     |\n| | account_service |   | network_service |   | block_service |   | construction_service +--------+\n| +-----------------+   +-----------------+   +---------------+   +----------------------+  |\n|                                                                                           |\n|                                         server                                            |\n|                                                                                           |\n+-------------------------------------------------------------------------------------------+\n```\n\n### Optimizations\n* Automatically prune syscoind while indexing blocks\n* Reduce sync time with concurrent block indexing\n* Use [Zstandard compression](https://github.com/facebook/zstd) to reduce the size of data stored on disk\nwithout needing to write a manual byte-level encoding\n\n#### Concurrent Block Syncing\nTo speed up indexing, `rosetta-syscoin` uses concurrent block processing\nwith a \"wait free\" design (using channels instead of sleeps to signal\nwhich threads are unblocked). This allows `rosetta-syscoin` to fetch\nmultiple inputs from disk while it waits for inputs that appeared\nin recently processed blocks to save to disk.\n```text\n                                                   +----------+\n                                                   | syscoind |\n                                                   +-----+----+\n                                                         |\n                                                         |\n          +---------+ fetch block data / unpopulated txs |\n          | block 1 \u003c------------------------------------+\n          +---------+                                    |\n       +--\u003e   tx 1  |                                    |\n       |  +---------+                                    |\n       |  |   tx 2  |                                    |\n       |  +----+----+                                    |\n       |       |                                         |\n       |       |           +---------+                   |\n       |       |           | block 2 \u003c-------------------+\n       |       |           +---------+                   |\n       |       +-----------\u003e   tx 3  +--+                |\n       |                   +---------+  |                |\n       +-------------------\u003e   tx 4  |  |                |\n       |                   +---------+  |                |\n       |                                |                |\n       | retrieve previously synced     |   +---------+  |\n       | inputs needed for future       |   | block 3 \u003c--+\n       | blocks while waiting for       |   +---------+\n       | populated blocks to save to    +---\u003e   tx 5  |\n       | disk                               +---------+\n       +------------------------------------\u003e   tx 6  |\n       |                                    +---------+\n       |\n       |\n+------+--------+\n|  coin_storage |\n+---------------+\n```\n\n## Testing with rosetta-cli\nTo validate `rosetta-syscoin`, [install `rosetta-cli`](https://github.com/coinbase/rosetta-cli#install)\nand run one of the following commands:\n* `rosetta-cli check:data --configuration-file rosetta-cli-conf/testnet/config.json`\n* `rosetta-cli check:construction --configuration-file rosetta-cli-conf/testnet/config.json`\n* `rosetta-cli check:data --configuration-file rosetta-cli-conf/mainnet/config.json`\n\n## Future Work\n* Publish benchamrks for sync speed, storage usage, and load testing\n* [Rosetta API `/mempool/transaction`](https://www.rosetta-api.org/docs/MempoolApi.html#mempooltransaction) implementation\n* Add CI test using `rosetta-cli` to run on each PR (likely on a regtest network)\n* Add performance mode to use unlimited RAM (implementation currently optimized to use \u003c= 16 GB of RAM)\n* Support Multi-Sig Sends\n\n_Please reach out on our [community](https://community.rosetta-api.org) if you want to tackle anything on this list!_\n\n## Development\n* `make deps` to install dependencies\n* `make test` to run tests\n* `make lint` to lint the source code\n* `make salus` to check for security concerns\n* `make build-local` to build a Docker image from the local context\n* `make coverage-local` to generate a coverage report\n\n## License\nThis project is available open source under the terms of the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).\n\n© 2020 Coinbase\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyscoin%2Frosetta-syscoin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyscoin%2Frosetta-syscoin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyscoin%2Frosetta-syscoin/lists"}