[[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")))