{"id":13566159,"url":"https://github.com/ZenGo-X/gotham-city","last_synced_at":"2025-04-03T23:31:15.764Z","repository":{"id":40750226,"uuid":"161453032","full_name":"ZenGo-X/gotham-city","owner":"ZenGo-X","description":"Gotham city is a fully functional project to demonstrate real-life example of minimalist Bitcoin decentralized HD wallet using 2 party ECDSA","archived":false,"fork":false,"pushed_at":"2024-06-18T17:16:38.000Z","size":3146,"stargazers_count":200,"open_issues_count":15,"forks_count":51,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-01-14T10:50:56.535Z","etag":null,"topics":["bitcoin","cryptocurrency","cryptography","ecdsa","rust","wallet"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZenGo-X.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2018-12-12T08:01:11.000Z","updated_at":"2024-12-29T22:12:27.000Z","dependencies_parsed_at":"2023-11-23T13:45:47.141Z","dependency_job_id":"e609c358-68eb-412f-aeb4-b9fcf4b4fb4c","html_url":"https://github.com/ZenGo-X/gotham-city","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenGo-X%2Fgotham-city","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenGo-X%2Fgotham-city/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenGo-X%2Fgotham-city/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenGo-X%2Fgotham-city/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZenGo-X","download_url":"https://codeload.github.com/ZenGo-X/gotham-city/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247097725,"owners_count":20883125,"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","cryptocurrency","cryptography","ecdsa","rust","wallet"],"created_at":"2024-08-01T13:02:03.486Z","updated_at":"2025-04-03T23:31:12.115Z","avatar_url":"https://github.com/ZenGo-X.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/KZen-networks/gotham-city.svg?branch=master)](https://travis-ci.org/KZen-networks/gotham-city)\n\nGotham City\n=====================================\nGotham city is a fully functional client/server application for issuing two party ECDSA signatures.\n\n-------\n### Server\nGotham **server** is an ECDSA agnostic signing machine.\nList of supported Curve(s):\n\n * secp256k1\n\n### Client\nYou can see a full fledged example of a client which connects to gotham server under: [integration-tests/test_ecdsa_key_signing](https://github.com/ZenGo-X/gotham-city/blob/master/integration-tests/tests/ecdsa.rs#L109)\n\n[//]: # (List of supported Coin\u0026#40;s\u0026#41;:)\n\n[//]: # ()\n[//]: # ( * BTC)\n\n[//]: # ()\n[//]: # (**Extending the client to support more coin\u0026#40;s\u0026#41; is easy as long as the Elliptic Curve and signing scheme of the new blockchain are supported. In the case a blockchain is using secp256k1 together with ECDSA, the same keygen and signing code can be reused.**)\n\n[//]: # ()\n[//]: # (| ![Demo]\u0026#40;misc/demo.gif\u0026#41; |)\n\n[//]: # (|-----------------------------|)\n\n\n[//]: # (Elements)\n\n[//]: # (-------)\n\n[//]: # ()\n[//]: # (|                                                 | Gotham Server                                | Gotham Client                                |)\n\n[//]: # (| -------------------------------------------- | -------------------------------------------- |--------------------------------------------)\n\n[//]: # (| Description | RESTful web service exposing APIs for two party ECDSA key generation and signing | Bitcoin minimalist decentralized wallet CLI app |)\n\n[//]: # (| Instructions | [View]\u0026#40;gotham-server/README.md\u0026#41; | [View]\u0026#40;gotham-client/README.md\u0026#41; |)\n\nProject Description\n-------\n\n### Design Overview\n\n#### ECDSA Keygen and Signing\n![ECDSA](misc/ecdsa-illustration.png)\n* For details on Threshold Signatures see [Threshold Signatures: The Future of Private Keys](https://medium.com/kzen-networks/threshold-signatures-private-key-the-next-generation-f27b30793b)\n\n#### Cryptographic libraries\n* [secp256k1](https://github.com/rust-bitcoin/rust-secp256k1/): Rust language bindings for Bitcoin secp256k1 library.\n* [two-party-ecdsa](https://github.com/ZenGo-X/two-party-ecdsa): Rust implelemtation of Lindell's Crypto17 paper: [Fast Secure Two-Party ECDSA Signing](https://eprint.iacr.org/2017/552)\n\n[//]: # (### White paper overview)\n\n[//]: # (#### Abstract)\n\n[//]: # (We demonstrate a Bitcoin wallet that utilizes two party ECDSA \u0026#40;2P-ECDSA\u0026#41;.)\n\n[//]: # (Our architecture relies on a simple client-server communication)\n\n[//]: # (model. We show support for 2 party deterministic child derivation)\n\n[//]: # (\u0026#40;2P-HD\u0026#41;, secret share rotation and verifiable recovery. We discuss the)\n\n[//]: # (opportunities and challenges of using a multi-party wallet.)\n\n[//]: # ()\n[//]: # (#### Background)\n\n[//]: # (For end-users, cryptocurrencies and blockchain-based assets are hard to store and manage.)\n\n[//]: # (One of the reasons is the tradeoff between security and availability.)\n\n[//]: # (Storing private keys safely requires dedicated hardware or extreme security measures which make using the coins)\n\n[//]: # (on a daily basis difficult. Threshold cryptography provides ways to distribute the private key and digital signing.)\n\n[//]: # (This can potentially benefit security but at the same time reveal new challenges such as availability, ownership and recovery.)\n\n[//]: # (Bitcoin is utilizing ECDSA as the signing scheme. There is an active line of research for practical and efficient multi-party ECDSA schemes.)\n\n**For more information, see our [white paper](white-paper/white-paper.pdf)**.\n\n# Benchmarks\nIn a local networking setup, with a MacBook Air M2, 8GB RAM and macOS 13.5:\n* `cargo bench --bench keygen_bench` reports **762ms** \n* `cargo bench --bench sign_bench` reports **151ms** \n\n[//]: # (### Comperative Performance)\n\n[//]: # (The comparison was done on an Intel i9-8950HK \u0026#40;2.9GHz\u0026#41; using localhost for server \u0026#40;no real network\u0026#41;. The numbers are mean for 20 runs of 2P-ECDSA KeyGen and 50 runs for 2P-ECDSA Signing. Standard deviation is inconsistent but for both implementations it is order of magnitude smaller than mean value.)\n\n[//]: # ()\n[//]: # (|        Implementation         |   Gotham city \u0026#40;this repo\u0026#41;    |    [Unbound]\u0026#40;https://github.com/unbound-tech/blockchain-crypto-mpc\u0026#41;       | )\n\n[//]: # (|-------------------------------|------------------------|------------------------|)\n\n[//]: # (| 2P-ECDSA KeyGen                      |        1.05 s            |      **0.813** s           |)\n\n[//]: # (|    2P-ECDSA Signing    |      **0.153** s        |      0.206 s     |)\n\nDisclaimer\n-------\n### **USE AT YOUR OWN RISK, we are not responsible for software/hardware and/or any transactional issues that may occur while using Gotham city.The project is currently work in progress.**\n\n\n\nLicense\n-------\nSee [LICENSE](LICENSE) for more information.\n\nContact\n-------\nFor any questions, feel free to [email us](mailto:github@kzencorp.com) or join ZenGo X [Telegram](https://t.me/joinchat/ET1mddGXRoyCxZ-7).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZenGo-X%2Fgotham-city","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FZenGo-X%2Fgotham-city","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZenGo-X%2Fgotham-city/lists"}