{"id":20272322,"url":"https://github.com/steemit/offline_signing","last_synced_at":"2026-05-22T16:37:41.536Z","repository":{"id":51626834,"uuid":"236770225","full_name":"steemit/offline_signing","owner":"steemit","description":"Offline transaction signing tool","archived":false,"fork":false,"pushed_at":"2021-05-11T01:52:00.000Z","size":5123,"stargazers_count":0,"open_issues_count":1,"forks_count":4,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-11T00:49:58.701Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steemit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-28T15:36:17.000Z","updated_at":"2020-01-29T19:49:33.000Z","dependencies_parsed_at":"2022-08-22T15:40:50.436Z","dependency_job_id":null,"html_url":"https://github.com/steemit/offline_signing","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/steemit/offline_signing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Foffline_signing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Foffline_signing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Foffline_signing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Foffline_signing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steemit","download_url":"https://codeload.github.com/steemit/offline_signing/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Foffline_signing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33354040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T12:23:38.849Z","status":"online","status_checked_at":"2026-05-22T02:00:06.671Z","response_time":265,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-11-14T12:42:51.626Z","updated_at":"2026-05-22T16:37:41.518Z","avatar_url":"https://github.com/steemit.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# offline_signing\n\n## Simple offline transfer transaction signing tool\n\nBecause Steem uses TaPoS and transaction expiration times that are built into the transactions, you must first get a recent block number and block prefix with a computer that is online and can connect to the network. Once you obtain these from a separate online computer they will be good for use for the next 64k blocks (or roughly 2.2 days).\n\nThe transaction generated must be broadcast within 1 hour after being created or it will expire.\n\n## Building:\n\n`\ndocker build -t=\"steemit/offline_signing:latest\" .\n`\n\n(alternatively, you can just pull in a pre-built image with `docker pull steemit/offline_signing:latest`)\n\n## Running:\n\n1. On a computer that is online, to collect the necessary recent reference block number and prefix, run:\n\n- `docker run -it steemit/offline_signing:latest`\n\n- Collect the two numbers and save them for the next step.\n\n2. From an offline computer that already has the docker image built and available, run:\n\n- `docker run -it steemit/offline_signing:latest /bin/bash sign_offline_transfer.sh \u003cref block num\u003e \u003cprefix\u003e \u003cfrom account\u003e \u003cto account\u003e \u003camount\u003e`\n\n- The software will ask for your private key WIF. This can be either your active or owner key private key for a transfer operation.\n\n- Note: the \u003camount\u003e must have a precision of 3 - example: 10 STEEM would be 10.000\n\n- Example of a correct command:\n\n`docker run -it steemit/offline_signing:latest /bin/bash sign_offline_transfer.sh 28468 851006437 alice bob 10.000`\n\n3. Take the generated signed transaction and broadcast it from an online computer. You have 1 hour to complete this before the transaction is expired and is no longer valid. It can be brodcasted simply using `curl`\n\n- Insert the transaction in this command where it says INSERT_TRANSACTION_HERE, leave the brackets around it:\n\n`curl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_transaction\", \"params\":[INSERT_TRANSACTION_HERE], \"id\":1}' https://api.steemit.com`\n\n- Example of fully filled in command:\n\n`curl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_transaction\", \"params\":[{\"ref_block_num\":28468,\"ref_block_prefix\":851006437,\"expiration\":\"2020-01-28T21:45:21\",\"operations\":[[\"transfer\",{\"from\":\"alice\",\"to\":\"bob\",\"amount\":\"10.000 STEEM\",\"memo\":\"\"}]],\"extensions\":[],\"signatures\":[\"1f422e9f579951b9bf8333a9d419ad05dbdd9ac990b8aef5f9ac739ab698a7eef805143d9cdc43df620f15f4de0a06bc90cef3dd5ac07f77050a1c292b719d01f8\"]}], \"id\":1}' https://api.steemit.com`\n\n- A successful submission will return an empty json result, like this: `{\"jsonrpc\":\"2.0\",\"result\":{},\"id\":1}`. If there is an error (such as exceeding the expiration time), you will instead receive that from the node.\n\n4. Verify that the transaction was successful using either a block explorer (like steemd.com/@accountname), or on the Steemit Wallet site (steemitwallet.com/@accountname). \n\n## Alternative method without docker\n\nIf you don't have or want to use docker, you can also run this repo on any system that has Node 8.7+ and NPM installed.\n\nTo setup, run: `npm install`\n\nCommands to run:\n\n`node get_block_prefix.js`\n\n`node sign_offline_transfer.js \u003cref block num\u003e \u003cprefix\u003e \u003cfrom account\u003e \u003cto account\u003e \u003camount\u003e`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteemit%2Foffline_signing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteemit%2Foffline_signing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteemit%2Foffline_signing/lists"}