{"id":16561492,"url":"https://github.com/jcnelson/pox4-signer-tool","last_synced_at":"2026-03-09T06:32:07.007Z","repository":{"id":237512468,"uuid":"794601793","full_name":"jcnelson/pox4-signer-tool","owner":"jcnelson","description":"Signer tooling for PoX-4","archived":false,"fork":false,"pushed_at":"2024-05-01T15:08:08.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-05T04:31:48.705Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clarity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jcnelson.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2024-05-01T15:03:29.000Z","updated_at":"2024-05-01T15:08:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"41acb11e-c898-418d-a159-908f2025b131","html_url":"https://github.com/jcnelson/pox4-signer-tool","commit_stats":null,"previous_names":["jcnelson/pox4-signer-tool"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jcnelson/pox4-signer-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcnelson%2Fpox4-signer-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcnelson%2Fpox4-signer-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcnelson%2Fpox4-signer-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcnelson%2Fpox4-signer-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jcnelson","download_url":"https://codeload.github.com/jcnelson/pox4-signer-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcnelson%2Fpox4-signer-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30284774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: 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":"2024-10-11T20:33:19.905Z","updated_at":"2026-03-09T06:32:06.974Z","avatar_url":"https://github.com/jcnelson.png","language":"Clarity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# How to Use\n\n## 0. Prerequisites\n\nYou will need basic knowledge of the UNIX command line.\n\nYou will need to install Node.js, and the node packages `elliptic` and `c32check`.\nYou can do this via `npm`, for example:\n\n```\n$ sudo npm install -g c32check elliptic\n```\n\nYou will also need to install `clarity-cli`.  You can get this by building it\nfrom the Stacks blockchain repository.  You will need a recent copy of the Rust\ntoolchain, which you can get via [rustup](https://rustup.rs/).\n\n```\n$ git clone https://github.com/stacks-network/stacks-core\n$ cd stacks-core/stackslib\n$ cargo build\n$ ls ../target/debug/clarity-cli\nclarity-cli\n```\n\nMake sure `clarity-cli` is in your `$PATH`.\n\nFinally, you will need `jq` and `sed`.  These can be obtained from your package\nmanager.  It is overwhelmingly likely that `sed` is already installed, but you\nmay need to install `jq` manually.\n\n## 1. Generate a signer secret key\n\nPut this secret key into the file `signer.privkey`.  For example:\n\n```bash\n$ cat ./signer.privkey\n7bfc16242cc84551b401a4dcef596da3998be52931c227d174701071ddcae791\n```\n\nNote that it must be a 64-character hex string.  Some tools will append `01` to\nthe end of the key in order to indicate that the key will be compressed.  If\nyour key generator does this, then you need to _remove_ that trailing `01`.\n\n### Tip\n\nIf you built `clarity-cli` from source, then you will have also built\n`blockstack-cli` (which will be in `./target/debug/blockstack-cli`, along with\n`clarity-cli`).  You can use that to generate a private key as follows:\n\n```bash\n$ blockstack-cli generate-sk\n{ \n  \"secretKey\": \"1302424aab58cfe21a92320d069a51d4a68038857de33a0b591477e307b7b72d01\",\n  \"publicKey\": \"02ff9b4ad9d996ab6992ebe352feeb9fdee79163fdd11bb1f887a2ad3faa9185eb\",\n  \"stacksAddress\": \"SP22PYD7QSNQVXGY8TP81TXCBJ1MZBQ5X2J6044A4\"\n}\n```\n\nTo get the properly-formatted secret key, you can use this one-liner (this\nrequires that you have the `jq` and `sed` commands).  This will extract the\n`.secretKey` field and strip the trailing `01`.\n\n```\n$ blockstack-cli generate-sk | jq -r '.secretKey' | sed -r 's/^([0-9a-f]{64})(.+)$/\\1/g'\n1302424aab58cfe21a92320d069a51d4a68038857de33a0b591477e307b7b72d\n```\n\n## 2. Set up the script\n\nEdit the `run.sh` file and change the following variables:\n\n```bash\n# This is your PoX address.  Right now, only legacy addresses are supported.\n# Hit me up if you need segwit addresses.\npox_addr=\"12qdRgXxgNBNPnDeEChy3fYTbSHQ8nfZfD\"\n\n# This is the reward cycle in which you want to start stacking.\nreward_cycle=84\n\n# This is the number of reward cycles for which you want to stack.\n# Valid values are between 1 and 12.\nduration=12\n\n# This is the amount of uSTX (micro-STX) you want to stack.  This is\n# synonymous with the maximum amount to delegate to the signer.\n# This example value below will stack 1,234,567.000000 STX\namount=1234567000000\n\n# This is the authorization ID.  It can be any unsigned 128-bit number, but \n# it has to be unique per stacking transaction.  You can start with 1 and just\n# increment it each time you stack if you want.\nauth_id=12345\n```\n\n## 3. Run the generator\n\nIf everything works, you'll see something like this output.  The only line that\nmatter is the last one:\n\n```bash\n$ ./run.sh\nInitializing Clarity DB\nINFO [1714574704.806508] [src/chainstate/stacks/index/file.rs:275] [main] Migrate 0 blocks to external blob storage at ./db/marf.sqlite.blobs\nINFO [1714574704.806566] [src/chainstate/stacks/index/file.rs:204] [main] Preemptively vacuuming the database file to free up space after copying trie blobs to a separate file\n{\"message\":\"Database created.\",\"network\":\"mainnet\"}\nChecking signer tools\n{\"message\":\"Checks passed.\"}\nLaunching signer tools\n{\"events\":[],\"message\":\"Contract initialized!\"}\nSetup complete!\n{\"pubkey\": \"033fcef99a5a3e8df383e751dd5945389c6d1f888fce08fe028b4f287e47590df7\", \"signature\": \"bb8eaec05457ccc3d73b5b0e2b6e25883256b2f764090a7afac084596e9832c932e744e4138ba6f75b8c12d75d3808fce11e43f5adc974d391ee53e202d958a101\"}\n```\n\nThat last line with the JSON is the part you'll need.  The `pubkey` field is\nyour signer public key, which you can paste into lockedstacks.com or your\nreferred stacking wallet.  The `signature` field is your signer signature, which\nyou'd also paste into lockedstacks.com.\n\n# Limitations\n\nRight now, only legacy PoX addresses are supported.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcnelson%2Fpox4-signer-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcnelson%2Fpox4-signer-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcnelson%2Fpox4-signer-tool/lists"}