{"id":27062099,"url":"https://github.com/SovaNetwork/sova-reth","last_synced_at":"2025-04-05T15:01:38.754Z","repository":{"id":272500284,"uuid":"845617132","full_name":"SovaNetwork/sova-reth","owner":"SovaNetwork","description":"Extension of reth configured to interact with Bitcoin","archived":false,"fork":false,"pushed_at":"2025-04-01T13:44:56.000Z","size":4290,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-01T14:38:34.857Z","etag":null,"topics":["bitcoin","blockchain","evm","reth"],"latest_commit_sha":null,"homepage":"https://www.sova.io/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SovaNetwork.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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-08-21T15:36:24.000Z","updated_at":"2025-03-27T13:19:28.000Z","dependencies_parsed_at":"2025-02-28T16:44:37.763Z","dependency_job_id":"92aeaa7c-3e43-4ea3-b563-604c357ae9e5","html_url":"https://github.com/SovaNetwork/sova-reth","commit_stats":null,"previous_names":["sovanetwork/sova-reth"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SovaNetwork%2Fsova-reth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SovaNetwork%2Fsova-reth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SovaNetwork%2Fsova-reth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SovaNetwork%2Fsova-reth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SovaNetwork","download_url":"https://codeload.github.com/SovaNetwork/sova-reth/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247353720,"owners_count":20925328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bitcoin","blockchain","evm","reth"],"created_at":"2025-04-05T15:01:20.449Z","updated_at":"2025-04-05T15:01:38.736Z","avatar_url":"https://github.com/SovaNetwork.png","language":"Rust","funding_links":[],"categories":["Layer 2 ##"],"sub_categories":[],"readme":"\u003ch1 align=\"left\"\u003e\n    sova-reth\n\u003c/h1\u003e\n\n[![GitHub Release][gh-release]][gh-release]\n[![MIT License][mit-badge]][mit-url]\n[![Apache-2.0 License][apache-badge]][apache-url]\n[![CI Status][actions-badge]][actions-url]\n\n\u003ch3 align=\"left\"\u003e\n    Native Bitcoin interations, using Reth\n\u003c/h3\u003e\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"#overview\"\u003eOverview\u003c/a\u003e •\n  \u003ca href=\"./docs/README.md\"\u003eDocumentation\u003c/a\u003e •\n  \u003ca href=\"https://github.com/SovaNetwork/running-sova\"\u003eRun Dev Node\u003c/a\u003e •\n  \u003ca href=\"https://docs.sova.io/documentation/network-info#sova-testnet\"\u003eUse on Testnet\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\n    \u003cimg src=\"./assets/sova-reth-prod.png\" alt=\"sova-reth\" width=\"100%\" align=\"center\"\u003e\n\u003c/h1\u003e\n\n## Overview\n\nA Sova node is an extension of the EVM execution client [Reth](https://github.com/paradigmxyz/reth). This extension of reth enables a new subset of Bitcoin precompiles. The precompiles are used to directly interface with a Bitcoin node during EVM transaction execution.\n\n## Building and Running\n\nA Makefile is used as a command runner to execute run and build commands.\n\n```bash\n# view all make commands\nmake help\n\n# build the sova-reth binary\nmake build\n\n# run in devnet mode using Bitcoin regtest\nmake run-sova-regtest\n```\n\n## Testing\n\nFor testing sova-reth in a devnet environment, it is recommended to use [running-sova](https://github.com/SovaNetwork/running-sova). This will orchestrate the deployment of all the auxiliary services need for local develeopment.\n\n## Precompiles\n\nThe new precompile is found at address 0x999 and accepts a bytes payload of data and a 4 bytes method identifier. The method identifier specifies the bitcoin rpc call that should be called with the payload data.\n\n| Precompile Name | Address | Method Identifier (bytes) | Gas Cost | Gas Limit | Description |\n|-----------------|-----|---------------------------|----------|-----------|-------------|\n| sendrawtransaction | 0x999 | 0x00000001 | 21,000 | N/A | Broadcast a raw Bitcoin transaction. |\n| decoderawtransaction | 0x999 | 0x00000002 | 4,000 + 3 * input.len() | 150,000 | Decode a raw Bitcoin transaction. |\n| verifysignature | 0x999 | 0x00000003 | 6,000 + 3 * input.len() | 100,000 | Verifies the unlocking scripts in a signed transaction are able to spend the specified inputs. |\n| convertaddress | 0x999 |  0x00000004 | 3,000 | N/A | Converts a Sova address to the corresponding BTC address using the network master key. |\n| createandsignrawtransaction | 0x999 |  0x00000005 | 25,000 | N/A | Using the Sova network keys, create and sign a BTC transaction for a specific amount. The caller of this precompile specifies the recipient BTC address and amount to send in sats. |\n\nThe next section provides examples for interacting with each precompile and the data that needs to be provided.\n\n### sendrawtransaction\n\u003e Note: `--data` is prefixed with 0x00000001. After the prefix is the raw signed btc transaction.\n```sh\ncast call 0x0000000000000000000000000000000000000999 \\\n--data 0x0000000102000000000101b161898f2ef6bd36e1cee4b9d68c5a1937a5001306e81a0fc30e99b44e8f835a00000000000000000001c0aff629010000001600148267b14c9fc90545c5828cbb9d26e12a9ecb8c160247304402205709263844829d625759b202ecf8d85fc6a2c07f958555d5b32c98e9c8b33c8a02200a6132106329e8dcc9c54bc7444075a90f505909bffb63b65f93257cbe23c9040121025912be1b355b604d151f36348c91976c4cda0c3c9c7fcb4469cdf0213fa216e900000000 \\\n--rpc-url http://localhost:8545\n```\n\n### decoderawsignature\n\u003e Note: `--data` is prefixed with 0x00000002. After the prefix is the raw signed btc transaction to decode.\n```sh\ncast call 0x0000000000000000000000000000000000000999 \\\n--data 0x0000000202000000000101b161898f2ef6bd36e1cee4b9d68c5a1937a5001306e81a0fc30e99b44e8f835a00000000000000000001c0aff629010000001600148267b14c9fc90545c5828cbb9d26e12a9ecb8c160247304402205709263844829d625759b202ecf8d85fc6a2c07f958555d5b32c98e9c8b33c8a02200a6132106329e8dcc9c54bc7444075a90f505909bffb63b65f93257cbe23c9040121025912be1b355b604d151f36348c91976c4cda0c3c9c7fcb4469cdf0213fa216e900000000 \\\n--rpc-url http://localhost:8545\n```\n\n### verifysignature\n\u003e Note: `--data` is prefixed with 0x00000003. After the prefix is the raw signed btc transaction to verify.\n```sh\ncast call 0x0000000000000000000000000000000000000999 \\\n--data 0x0000000302000000000101b161898f2ef6bd36e1cee4b9d68c5a1937a5001306e81a0fc30e99b44e8f835a00000000000000000001c0aff629010000001600148267b14c9fc90545c5828cbb9d26e12a9ecb8c160247304402205709263844829d625759b202ecf8d85fc6a2c07f958555d5b32c98e9c8b33c8a02200a6132106329e8dcc9c54bc7444075a90f505909bffb63b65f93257cbe23c9040121025912be1b355b604d151f36348c91976c4cda0c3c9c7fcb4469cdf0213fa216e900000000 \\\n--rpc-url http://localhost:8545\n```\n\n### convertaddress\n\u003e Note: `--data` is prefixed with 0x00000004. After the prefix is the sova address to be converted.\n```sh\ncast call 0x0000000000000000000000000000000000000999 \\\n--data 0x000000042CB44b8970d0e62296015c1fA12E72671448Fd86 \\\n--rpc-url http://localhost:8545\n```\n\n### createandsignrawtransaction\n\u003e Note: `--data` is prefixed with 0x00000005. After the prefix is the sova address of signer, the bitcoin address of the receiver, and the amount to send.\n```sh\ncast call 0x0000000000000000000000000000000000000999 \\\n--data 0x00000005 \\\n--rpc-url http://localhost:8545\n```\n\n## License\n\nLicensed under either of Apache License, Version 2.0 or MIT license at your option.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in these crates by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n\n[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg\n[apache-badge]: https://img.shields.io/badge/license-Apache--2.0-blue.svg\n[mit-url]: LICENSE-MIT\n[apache-url]: LICENSE-APACHE\n[actions-badge]: https://github.com/ithacaxyz/odyssey/workflows/unit/badge.svg\n[actions-url]: https://github.com/SovaNetwork/sova-reth/actions?query=workflow%3ACI+branch%3Amain\n[gh-release]: https://img.shields.io/github/v/release/SovaNetwork/sova-reth","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSovaNetwork%2Fsova-reth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSovaNetwork%2Fsova-reth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSovaNetwork%2Fsova-reth/lists"}