forked from bitcoinbook/bitcoinbook
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
179 changed files
with
6,072 additions
and
5,459 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
*.html | ||
*.txt | ||
dump.asciidoc | ||
code/python-env | ||
*.csv |
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,133 +1,211 @@ | ||
[[sx_cmds]] | ||
== Appendix: Available commands with sx tools | ||
|
||
---- | ||
The sx commands are: | ||
DEPRECATED | ||
ELECTRUM STYLE DETERMINISTIC KEYS AND ADDRESSES | ||
genaddr Generate a Bitcoin address deterministically from a wallet | ||
seed or master public key. | ||
genpriv Generate a private key deterministically from a seed. | ||
genpub Generate a public key deterministically from a wallet | ||
seed or master public key. | ||
mpk Extract a master public key from a deterministic wallet seed. | ||
newseed Create a new deterministic wallet seed. | ||
EXPERIMENTAL | ||
APPS | ||
wallet Experimental command line wallet. | ||
OFFLINE BLOCKCHAIN | ||
HEADERS | ||
showblkhead Show the details of a block header. | ||
OFFLINE KEYS AND ADDRESSES | ||
BASIC | ||
addr See Bitcoin address of a public or private key. | ||
embed-addr Generate an address used for embedding record of data into the blockchain | ||
get-pubkey Get the pubkey of an address if available | ||
newkey Create a new private key. | ||
pubkey See the public part of a private key. | ||
validaddr Validate an address. | ||
BRAIN STORAGE | ||
brainwallet Make 256 bit bitcoin private key from an arbitrary passphrase. | ||
mnemonic Make 12 word mnemonic out of 128 bit electrum or bip32 seed. | ||
HD / BIP32 | ||
hd-priv Create an private HD key from another HD private key. | ||
hd-pub Create an HD public key from another HD private or public key. | ||
hd-seed Create a random new HD key. | ||
hd-to-address Convert an HD public or private key to a Bitcoin address. | ||
hd-to-wif Convert an HD private key to a WIF private key. | ||
MULTISIG ADDRESSES | ||
scripthash Create BIP 16 script hash address from raw script hex. | ||
STEALTH | ||
stealth-addr See a stealth address from given input. | ||
stealth-initiate Initiate a new stealth payment. | ||
stealth-newkey Generate new stealth keys and an address. | ||
stealth-show-addr Show details for a stealth address. | ||
stealth-uncover Uncover a stealth address. | ||
stealth-uncover-secret Uncover a stealth secret. | ||
OFFLINE TRANSACTIONS | ||
SCRIPTING | ||
mktx Create an unsigned tx. | ||
rawscript Create the raw hex representation from a script. | ||
set-input Set a transaction input. | ||
showscript Show the details of a raw script. | ||
showtx Show the details of a transaction. | ||
sign-input Sign a transaction input. | ||
unwrap Validates checksum and recovers version byte and original data from hexstring. | ||
validsig Validate a transaction input's signature. | ||
wrap Adds version byte and checksum to hexstring. | ||
ONLINE (BITCOIN P2P) | ||
BLOCKCHAIN UPDATES | ||
sendtx-node Send transaction to a single node. | ||
sendtx-p2p Send tx to bitcoin network. | ||
ONLINE (BLOCKCHAIN.INFO) | ||
BLOCKCHAIN QUERIES (blockchain.info) | ||
bci-fetch-last-height Fetch the last block height using blockchain.info. | ||
bci-history Get list of output points, values, and their spends | ||
from blockchain.info | ||
BLOCKCHAIN UPDATES | ||
sendtx-bci Send tx to blockchain.info/pushtx. | ||
ONLINE (BLOCKEXPLORER.COM) | ||
BLOCKCHAIN QUERIES (blockexplorer.com) | ||
blke-fetch-transaction Fetches a transaction from blockexplorer.com | ||
ONLINE (OBELISK) | ||
BLOCKCHAIN QUERIES | ||
balance Show balance of a Bitcoin address in satoshis. | ||
fetch-block-header Fetch raw block header. | ||
fetch-last-height Fetch the last block height. | ||
fetch-stealth Fetch a stealth information using a network connection to | ||
make requests against the obelisk load balancer backend. | ||
fetch-transaction Fetch a raw transaction using a network connection to | ||
make requests against the obelisk load balancer backend. | ||
fetch-transaction-index | ||
Fetch block height and index in block of transaction. | ||
get-utxo Get enough unspent transaction outputs from a given set of | ||
addresses to pay a given number of satoshis | ||
history Get list of output points, values, and their spends for an | ||
address. grep can filter for just unspent outputs which can | ||
be fed into mktx. | ||
validtx Validate a transaction. | ||
BLOCKCHAIN UPDATES | ||
sendtx-obelisk Send tx to obelisk server. | ||
BLOCKCHAIN WATCHING | ||
monitor Monitor an address. | ||
watchtx Watch transactions from the network searching for a certain hash. | ||
OBELISK ADMIN | ||
initchain Initialize a new blockchain. | ||
UTILITY | ||
EC MATH | ||
ec-add-modp Calculate the result of INTEGER + INTEGER. | ||
ec-multiply Multiply an integer and a point together. | ||
ec-tweak-add Calculate the result of POINT + INTEGER * G. | ||
FORMAT (BASE 58) | ||
base58-decode Convert from base58 to hex | ||
base58-encode Convert from hex to base58 | ||
FORMAT (BASE58CHECK) | ||
base58check-decode Convert from base58check to hex | ||
base58check-encode Convert from hex to base58check | ||
decode-addr Decode a address from base58check form to internal RIPEMD representation | ||
encode-addr Encode an address from internal RIPEMD representation to base58check form | ||
FORMAT (WIF) | ||
secret-to-wif Convert a secret exponent value to Wallet Import Format | ||
wif-to-secret Convert a Wallet Import Format to secret exponent value. | ||
HASHES | ||
ripemd-hash RIPEMD hash data from STDIN. | ||
sha256 Perform SHA256 hash of data. | ||
MISC | ||
qrcode Generate Bitcoin QR codes offline. | ||
SATOSHI MATH | ||
btc Convert Satoshis into Bitcoins. | ||
satoshi Convert Bitcoins into Satoshis. | ||
See 'sx help COMMAND' for more information on a specific command. | ||
---- | ||
[[appdx_sx]] | ||
[appendix] | ||
|
||
== Available Commands with sx Tools | ||
|
||
((("sx tools","commands in", id="ix_appdx-sx-asciidoc0", range="startofrange"))) | ||
|
||
---- | ||
The sx commands are: | ||
DEPRECATED | ||
ELECTRUM STYLE DETERMINISTIC KEYS AND ADDRESSES | ||
genaddr Generate a Bitcoin address deterministically from a wallet | ||
seed or master public key. | ||
genpriv Generate a private key deterministically from a seed. | ||
genpub Generate a public key deterministically from a wallet | ||
seed or master public key. | ||
mpk Extract a master public key from a deterministic wallet seed. | ||
newseed Create a new deterministic wallet seed. | ||
EXPERIMENTAL | ||
APPS | ||
wallet Experimental command-line wallet. | ||
OFFLINE BLOCKCHAIN | ||
HEADERS | ||
showblkhead Show the details of a block header. | ||
OFFLINE KEYS AND ADDRESSES | ||
BASIC | ||
addr See Bitcoin address of a public or private key. | ||
embed-addr Generate an address used for embedding record of data into the | ||
blockchain | ||
get-pubkey Get the pubkey of an address if available. | ||
newkey Create a new private key. | ||
pubkey See the public part of a private key. | ||
validaddr Validate an address. | ||
BRAIN STORAGE | ||
brainwallet Make 256 bit bitcoin private key from an arbitrary passphrase. | ||
mnemonic Make 12 word mnemonic out of 128 bit electrum or bip32 seed. | ||
HD / BIP32 | ||
hd-priv Create a private HD key from another HD private key. | ||
hd-pub Create an HD public key from another HD private or public key. | ||
hd-seed Create a random new HD key. | ||
hd-to-address Convert an HD public or private key to a Bitcoin address. | ||
hd-to-wif Convert an HD private key to a WIF private key. | ||
MULTISIG ADDRESSES | ||
scripthash Create BIP 16 script hash address from raw script hex. | ||
STEALTH | ||
stealth-addr See a stealth address from given input. | ||
stealth-initiate Initiate a new stealth payment. | ||
stealth-newkey Generate new stealth keys and an address. | ||
stealth-show-addr Show details for a stealth address. | ||
stealth-uncover Uncover a stealth address. | ||
stealth-uncover-secret Uncover a stealth secret. | ||
OFFLINE TRANSACTIONS | ||
SCRIPTING | ||
mktx Create an unsigned tx. | ||
rawscript Create the raw hex representation from a script. | ||
set-input Set a transaction input. | ||
showscript Show the details of a raw script. | ||
showtx Show the details of a transaction. | ||
sign-input Sign a transaction input. | ||
unwrap Validates checksum and recovers version byte and original data | ||
from hexstring. | ||
validsig Validate a transaction input's signature. | ||
wrap Adds version byte and checksum to hexstring. | ||
ONLINE (BITCOIN P2P) | ||
BLOCKCHAIN UPDATES | ||
sendtx-node Send transaction to a single node. | ||
sendtx-p2p Send tx to bitcoin network. | ||
ONLINE (BLOCKCHAIN.INFO) | ||
BLOCKCHAIN QUERIES (blockchain.info) | ||
bci-fetch-last-height Fetch the last block height using blockchain.info. | ||
bci-history Get list of output points, values, and their spends | ||
from blockchain.info | ||
BLOCKCHAIN UPDATES | ||
sendtx-bci Send tx to blockchain.info/pushtx. | ||
ONLINE (BLOCKEXPLORER.COM) | ||
BLOCKCHAIN QUERIES (blockexplorer.com) | ||
blke-fetch-transaction Fetches a transaction from blockexplorer.com | ||
ONLINE (OBELISK) | ||
BLOCKCHAIN QUERIES | ||
balance Show balance of a Bitcoin address in satoshis. | ||
fetch-block-header Fetch raw block header. | ||
fetch-last-height Fetch the last block height. | ||
fetch-stealth Fetch a stealth information using a network connection | ||
to make requests against the obelisk load balancer backend. | ||
fetch-transaction Fetch a raw transaction using a network connection to | ||
make requests against the obelisk load balancer | ||
backend. | ||
fetch-transaction-index | ||
Fetch block height and index in block of transaction. | ||
get-utxo Get enough unspent transaction outputs from a given set | ||
of addresses to pay a given number of satoshis. | ||
history Get list of output points, values, and their spends for | ||
an address. grep can filter for just unspent outputs which can | ||
be fed into mktx. | ||
validtx Validate a transaction. | ||
BLOCKCHAIN UPDATES | ||
sendtx-obelisk Send tx to obelisk server. | ||
BLOCKCHAIN WATCHING | ||
monitor Monitor an address. | ||
watchtx Watch transactions from the network searching for a certain | ||
hash. | ||
OBELISK ADMIN | ||
initchain Initialize a new blockchain. | ||
UTILITY | ||
EC MATH | ||
ec-add-modp Calculate the result of INTEGER + INTEGER. | ||
ec-multiply Multiply an integer and a point together. | ||
ec-tweak-add Calculate the result of POINT + INTEGER * G. | ||
FORMAT (BASE 58) | ||
base58-decode Convert from base58 to hex. | ||
base58-encode Convert from hex to base58. | ||
FORMAT (BASE58CHECK) | ||
base58check-decode Convert from base58check to hex. | ||
base58check-encode Convert from hex to base58check. | ||
decode-addr Decode a address from base58check form to internal RIPEMD | ||
representation. | ||
encode-addr Encode an address from internal RIPEMD representation to | ||
base58check form. | ||
FORMAT (WIF) | ||
secret-to-wif Convert a secret exponent value to Wallet Import Format. | ||
wif-to-secret Convert a Wallet Import Format to secret exponent value. | ||
HASHES | ||
ripemd-hash RIPEMD hash data from STDIN. | ||
sha256 Perform SHA256 hash of data. | ||
MISC | ||
qrcode Generate Bitcoin QR codes offline. | ||
SATOSHI MATH | ||
btc Convert Satoshis into Bitcoins. | ||
satoshi Convert Bitcoins into Satoshis. | ||
See 'sx help COMMAND' for more information on a specific command. | ||
---- | ||
|
||
Next, we look at some examples of using sx tools to experiment with keys and addresses. | ||
|
||
Generate a new private key with the operating system's random number generator by using the +newkey+ command. We save the standard output into the file _private_key_: | ||
|
||
---- | ||
$ sx newkey > private_key | ||
$ cat private_key | ||
5Jgx3UAaXw8AcCQCi1j7uaTaqpz2fqNR9K3r4apxdYn6rTzR1PL | ||
---- | ||
|
||
Now, generate the public key from that private key using the +pubkey+ command. Pass the _private_key_ file into the standard input and save the standard output of the command into a new file _public_key_: | ||
|
||
---- | ||
$ sx pubkey < private_key > public_key | ||
$ cat public_key | ||
02fca46a6006a62dfdd2dbb2149359d0d97a04f430f12a7626dd409256c12be500 | ||
---- | ||
|
||
We can reformat the +public_key+ as an address using the +addr+ command. We pass the +public_key+ into standard input: | ||
|
||
---- | ||
$ sx addr < public_key | ||
17re1S4Q8ZHyCP8Kw7xQad1Lr6XUzWUnkG | ||
---- | ||
|
||
The keys generated are so called type-0 nondeterministic keys. That means that each one is generated from a random number generator. The sx tools also support type-2 deterministic keys, where a "master" key is created and then extended to produce a chain or tree of subkeys. | ||
|
||
First, we generate a "seed" that will be used as the basis to derive a chain of keys, compatible with the Electrum wallet and other similar implementations. We use the +newseed+ command to produce a seed value: | ||
|
||
---- | ||
$ sx newseed > seed | ||
$ cat seed | ||
eb68ee9f3df6bd4441a9feadec179ff1 | ||
---- | ||
|
||
The seed value can also be exported as a word mnemonic that is human readable and easier to store and type than a hexadecimal string | ||
using the +mnemonic+ command: | ||
|
||
---- | ||
$ sx mnemonic < seed > words | ||
$ cat words | ||
adore repeat vision worst especially veil inch woman cast recall dwell appreciate | ||
---- | ||
|
||
The mnemonic words can be used to reproduce the seed using the +mnemonic+ command again: | ||
|
||
---- | ||
$ sx mnemonic < words | ||
eb68ee9f3df6bd4441a9feadec179ff1 | ||
---- | ||
|
||
With the seed, we can now generate a sequence of private and public keys, a key chain. We use the +genpriv+ command to generate a sequence of private keys from a seed and the +addr+ command to generate the corresponding public key: | ||
|
||
[source,bash] | ||
---- | ||
$ sx genpriv 0 < seed | ||
5JzY2cPZGViPGgXZ4Syb9Y4eUGjJpVt6sR8noxrpEcqgyj7LK7i | ||
$ sx genpriv 0 < seed | sx addr | ||
1esVQV2vR9JZPhFeRaeWkAhzmWq7Fi7t7 | ||
$ sx genpriv 1 < seed | ||
5JdtL7ckAn3iFBFyVG1Bs3A5TqziFTaB9f8NeyNo8crnE2Sw5Mz | ||
$ sx genpriv 1 < seed | sx addr | ||
1G1oTeXitk76c2fvQWny4pryTdH1RTqSPW | ||
---- | ||
|
||
With deterministic keys we can generate and regenerate thousands of keys, all derived from a single seed in a deterministic chain. This technique is used in many wallet applications to generate keys that can be backed up and restored with a simple multiword mnemonic. This is easier than having to back up the wallet with all its randomly generated keys every time a new key is created.(((range="endofrange", startref="ix_appdx-sx-asciidoc0"))) |
Oops, something went wrong.