https://github.com/steemit/offline_signing
Offline transaction signing tool
https://github.com/steemit/offline_signing
Last synced: about 1 month ago
JSON representation
Offline transaction signing tool
- Host: GitHub
- URL: https://github.com/steemit/offline_signing
- Owner: steemit
- Created: 2020-01-28T15:36:17.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-05-11T01:52:00.000Z (about 5 years ago)
- Last Synced: 2025-03-11T00:49:58.701Z (over 1 year ago)
- Language: JavaScript
- Size: 4.89 MB
- Stars: 0
- Watchers: 9
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# offline_signing
## Simple offline transfer transaction signing tool
Because 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).
The transaction generated must be broadcast within 1 hour after being created or it will expire.
## Building:
`
docker build -t="steemit/offline_signing:latest" .
`
(alternatively, you can just pull in a pre-built image with `docker pull steemit/offline_signing:latest`)
## Running:
1. On a computer that is online, to collect the necessary recent reference block number and prefix, run:
- `docker run -it steemit/offline_signing:latest`
- Collect the two numbers and save them for the next step.
2. From an offline computer that already has the docker image built and available, run:
- `docker run -it steemit/offline_signing:latest /bin/bash sign_offline_transfer.sh `
- The software will ask for your private key WIF. This can be either your active or owner key private key for a transfer operation.
- Note: the must have a precision of 3 - example: 10 STEEM would be 10.000
- Example of a correct command:
`docker run -it steemit/offline_signing:latest /bin/bash sign_offline_transfer.sh 28468 851006437 alice bob 10.000`
3. 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`
- Insert the transaction in this command where it says INSERT_TRANSACTION_HERE, leave the brackets around it:
`curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.broadcast_transaction", "params":[INSERT_TRANSACTION_HERE], "id":1}' https://api.steemit.com`
- Example of fully filled in command:
`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`
- 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.
4. Verify that the transaction was successful using either a block explorer (like steemd.com/@accountname), or on the Steemit Wallet site (steemitwallet.com/@accountname).
## Alternative method without docker
If 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.
To setup, run: `npm install`
Commands to run:
`node get_block_prefix.js`
`node sign_offline_transfer.js `