{"id":37123464,"url":"https://github.com/clearmatics/orbital","last_synced_at":"2026-01-14T14:15:24.940Z","repository":{"id":57693902,"uuid":"108281424","full_name":"clearmatics/orbital","owner":"clearmatics","description":"Generate off-chain data for Möbius contracts","archived":true,"fork":false,"pushed_at":"2018-09-13T16:32:34.000Z","size":5118,"stargazers_count":10,"open_issues_count":6,"forks_count":6,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-03-13T22:35:12.974Z","etag":null,"topics":["clearmatics-engineering","generator","mobius","ringsignature"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clearmatics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-25T14:26:26.000Z","updated_at":"2024-06-30T20:29:19.000Z","dependencies_parsed_at":"2022-09-13T08:00:42.199Z","dependency_job_id":null,"html_url":"https://github.com/clearmatics/orbital","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/clearmatics/orbital","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clearmatics%2Forbital","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clearmatics%2Forbital/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clearmatics%2Forbital/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clearmatics%2Forbital/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clearmatics","download_url":"https://codeload.github.com/clearmatics/orbital/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clearmatics%2Forbital/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28422442,"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":["clearmatics-engineering","generator","mobius","ringsignature"],"created_at":"2026-01-14T14:15:24.210Z","updated_at":"2026-01-14T14:15:24.926Z","avatar_url":"https://github.com/clearmatics.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orbital\n\n[![Build Status](https://travis-ci.org/clearmatics/orbital.svg?branch=master)](https://travis-ci.org/clearmatics/orbital)\n\nOrbital is a command-line tool to generate off-chain data required by [Möbius][3], a smart contract that offers trustless tumbling for transaction privacy.\n\n## Prerequisites\n\nA version of Go \u003e= 1.8 is required. The [dep][1] tool is used for dependency management. \n\n## Installation\n\n    go get github.com/clearmatics/orbital\n\n## Usage\n\nWhen deployed a Möbius contract will emit a `MixerMessage` that is an arbitrary hex encoded string. This message is signed to make withdrawals from the contract. \n\nOrbital can be used to generate all data needed to deposit and withdraw from a Möbius smart contract. Providing you have the `MixerMessage` value data can be generated as follows. In this example the hex encoded string is given as `291a6780850827fcd8621...`. A ring size of 2 is generated.\n\n    ./orbital inputs -n 2 -m 291a6780850827fcd8621d0e5471343831109bc14142ec101527b048bb3d1794\n\nThis generates JSON containing complete data required to deposit and withdraw. If you are just evaluating Möbius this is all you need to deposit into a contract and then make withdrawals once the ring is full. \n\n``` JSON\n{\n  \"alice2bob\": null,\n  \"bob2alice\": null,\n  \"message\": \"KRpngIUIJ/zYYh0OVHE0ODEQm8FBQuwQFSewSLs9F5Q=\",\n  \"ring\": [\n    {\n      \"x\": \"0x20495bff8bfbedb0e9a4a4ec87166340199540b466eb128f42f8e70030d0864\",\n      \"y\": \"0x12526493c446360fe1c8185730f2df1b2c80b3f107bf41e0c1362c636bd35bf2\"\n    },\n    {\n      \"x\": \"0xa612e73ef366816f4354c49ed161659073b1b3a8f559d2c99fecd2766e8876d\",\n      \"y\": \"0x1236505b328b0074cdd730782c34852a174c9c257d879250cd7690c4220ee1c7\"\n    }\n  ],\n  \"signatures\": [\n    {\n      \"tau\": {\n        \"x\": \"0x22604e4e03a513070439fd8f33e2f987c6e5f399251769d982c4a697aa397ee1\",\n        \"y\": \"0x104bc20e2d6922a728b65713cc9783de07969763ad87e1d63873f20ba3e87c36\"\n      },\n      \"ctlist\": [\n        \"0x2e0cc2449b13c1f42f874610de1a5bc1275fafe759a1442c3d623de7617d6c6f\",\n        \"0x179ef01a92ca56c03ce64b5c03966e881f9fc91dac228d6f4687855c58520565\",\n        \"0x21812114778a8c80381e747b2b9cbbbc437e8f24d10f8948a937a06538e19941\",\n        \"0x10ac35c6eb4c317e6ef7fcaa4676b374bba694770605fe56d7e03ac96af4eb39\"\n      ]\n    },\n    {\n      \"tau\": {\n        \"x\": \"0x2b5108123f8a315adc4c1f79cdac8b3bcbbbdf379a2281b2c14abb310a6118ee\",\n        \"y\": \"0x17a2d1d0e35fcfa79d174689c37f9a6f122205eb75e39bd6f68597d6843031c8\"\n      },\n      \"ctlist\": [\n        \"0x1052e41400969dc1a28d77aa6b323292c47f09dd664361440648873a01edaad\",\n        \"0x20f7c07495a2aa100d80b39d30266274b59908e233304b5f18092617be47e8ee\",\n        \"0x20f7c25434304a59197e32f306eb94e1c51364f4dfc7e95914677c0732cba48a\",\n        \"0xb747984ad0ac9b649790fe257b8769ecd38f18d8dd8c500a72d30f2281c4cc9\"\n      ]\n    }\n  ]\n}\n```\n\nBeyond evaluation it is likely that you will want to first generate public/private keypairs and distribute this to allow signatures to be created separately. To create a public/private keypairs for a ring size of `2` use \n    \n    orbital generate -n 2\n\nTo verify signatures pass a file with public keys and signatures to the `verify` subcommand.\n\n    orbital verify -f signatures.json -m 666f6f62617262617a\n\nExample:\n\n```\n    $ orbital generate -n 4 \u003e keys.json\n    $ orbital inputs -f keys.json -n 4 -m 50b44f86159783db5092ebe77fb4b9cc29e445e54db17f0e8d2bed4eb63126fc \u003e ringSignature.json\n    $ orbital verify -f ringSignature.json -m 50b44f86159783db5092ebe77fb4b9cc29e445e54db17f0e8d2bed4eb63126fc\n    Signatures verified\n```\n\n### Stealth Addresses\n\nIntegration of Stealth Addresses into the Möbius contract is still in-progress, however they can be generated using the `mobius stealth` utility.\n\nFirst generate a pair of key pairs:\n\n```\n$ orbital generate -n 2\n{\n  \"pubkeys\": [\n    {\n      \"x\": \"0x27e073fe3485b7ab97de5813342c3ce3dd19eba467a6b5f61b092813e67325e2\",\n      \"y\": \"0x639bbbc72ef12bc7449c08a4ac2d7d7a9ed0484e4d5d6ee4f4b6fa5844043c2\"\n    },\n    {\n      \"x\": \"0xf5165507a4f67c89fd40603a3765e53a3656bf3c247421b6a69a05e0a7fabb\",\n      \"y\": \"0x6d9e4c9c4054e9f1f5d27cfad56c034f1654bc88ae6916722424c565976ef88\"\n    }\n  ],\n  \"privkeys\": [\n    \"0x12987c779f1c76fdc01efaa3ce7fe8e730512ee4a12055018a44b8c9044fb860\",\n    \"0x282e1c333c40fb8ffcb97a66d615af2a0c4077c5dc5dd50075cf6abf3e9e9f55\"\n  ]\n}\n```\n\nThen derive a stealth address for the other party using the first secret key and the second public key, the JSON output displays the shared secret, your public key and their stealth addresses.\n\n```\n$ orbital stealth -s 0x12987c779f1c76fdc01efaa3ce7fe8e730512ee4a12055018a44b8c9044fb860 -x 0xf5165507a4f67c89fd40603a3765e53a3656bf3c247421b6a69a05e0a7fabb -y 0x6d9e4c9c4054e9f1f5d27cfad56c034f1654bc88ae6916722424c565976ef88\n\n{\n  \"myPublic\": {\n    \"x\": \"0x27e073fe3485b7ab97de5813342c3ce3dd19eba467a6b5f61b092813e67325e2\",\n    \"y\": \"0x639bbbc72ef12bc7449c08a4ac2d7d7a9ed0484e4d5d6ee4f4b6fa5844043c2\"\n  },\n  \"theirPublic\": {\n    \"x\": \"0xf5165507a4f67c89fd40603a3765e53a3656bf3c247421b6a69a05e0a7fabb\",\n    \"y\": \"0x6d9e4c9c4054e9f1f5d27cfad56c034f1654bc88ae6916722424c565976ef88\"\n  },\n  \"sharedSecret\": \"I08U3nLP/qtTwHjR5yGmle3cA5kpNiQDHhLwtzJfvl0=\",\n  \"theirStealthAddresses\": [\n    {\n      \"public\": {\n        \"x\": \"0x1f423980ffbd537b90d8581afb34a91d870d13455928737ee5c60292b7af4752\",\n        \"y\": \"0x938aab5f627113ef524ce77458e89d0c611ce1837b34c9308a93d35622759de\"\n      },\n      \"nonce\": 0\n    }\n  ],\n  \"myStealthAddresses\": [\n    {\n      \"public\": {\n        \"x\": \"0x15472269a2b1c629d136a10732f7422ac73213d7712198be6e4f0060fa48e964\",\n        \"y\": \"0x129e34473d8c37f6206a9bc0be2f8fd1bb4999902d10ea35d3d50fb775e9f5e4\"\n      },\n      \"nonce\": 0,\n      \"private\": 14674696873446288336876702922514381849233625593912482006822333717333299928756\n    }\n  ]\n}\n```\n\nThe other side can derive their stealth addresses using the following command:\n\n```\n$ orbital stealth -s 0x282e1c333c40fb8ffcb97a66d615af2a0c4077c5dc5dd50075cf6abf3e9e9f55 -x 0x27e073fe3485b7ab97de5813342c3ce3dd19eba467a6b5f61b092813e67325e2 -y 0x639bbbc72ef12bc7449c08a4ac2d7d7a9ed0484e4d5d6ee4f4b6fa5844043c2\n```\n\nNote that the public keys calculated on either side will be the same, but neither side knows the others private key.\n\n## Development\n\nDependencies are managed via [dep][1]. Dependencies are checked into this repository in the `vendor` folder. Documentation for managing dependencies is available in the [dep README][2].\n\nThe project follows standard Go conventions using `gofmt`. If you wish to contribute to the project please follow standard Go conventions. The CI server automatically runs these checks.\n\n[1]: https://github.com/golang/dep\n[2]: https://github.com/golang/dep/blob/master/README.md\n[3]: https://github.com/clearmatics/mobius\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclearmatics%2Forbital","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclearmatics%2Forbital","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclearmatics%2Forbital/lists"}