• 附录7、比特币浏览器命令

    附录7、比特币浏览器命令

    Bitcoin Explorer(bx)是一个命令行工具,提供了各种用于密钥管理和交易构建的命令。 它是libbitcoin比特币库的一部分。

    1. Usage: bx COMMAND [--help]
    2. Info: The bx commands are:
    3. address-decode
    4. address-embed
    5. address-encode
    6. address-validate
    7. base16-decode
    8. base16-encode
    9. base58-decode
    10. base58-encode
    11. base58check-decode
    12. base58check-encode
    13. base64-decode
    14. base64-encode
    15. bitcoin160
    16. bitcoin256
    17. btc-to-satoshi
    18. ec-add
    19. ec-add-secrets
    20. ec-multiply
    21. ec-multiply-secrets
    22. ec-new
    23. ec-to-address
    24. ec-to-public
    25. ec-to-wif
    26. fetch-balance
    27. fetch-header
    28. fetch-height
    29. fetch-history
    30. fetch-stealth
    31. fetch-tx
    32. fetch-tx-index
    33. hd-new
    34. hd-private
    35. hd-public
    36. hd-to-address
    37. hd-to-ec
    38. hd-to-public
    39. hd-to-wif
    40. help
    41. input-set
    42. input-sign
    43. input-validate
    44. message-sign
    45. message-validate
    46. mnemonic-decode
    47. mnemonic-encode
    48. ripemd160
    49. satoshi-to-btc
    50. script-decode
    51. script-encode
    52. script-to-address
    53. seed
    54. send-tx
    55. send-tx-node
    56. send-tx-p2p
    57. settings
    58. sha160
    59. sha256
    60. sha512
    61. stealth-decode
    62. stealth-encode
    63. stealth-public
    64. stealth-secret
    65. stealth-shared
    66. tx-decode
    67. tx-encode
    68. uri-decode
    69. uri-encode
    70. validate-tx
    71. watch-address
    72. wif-to-ec
    73. wif-to-public
    74. wrap-decode
    75. wrap-encode

    更多信息参见Bitcoin Explorer homepage 和 Bitcoin Explorer user documentation

    bx命令使用示例

    我们来看一些使用Bitcoin Explorer命令来测试密钥和地址的例子。

    使用种子命令生成随机“种子”值,该种子命令使用操作系统的随机数生成器。 将种子传递到ec-new命令以生成新的私钥。 我们将标准输出保存到文件private_key中:

    1. $ bx seed | bx ec-new > private_key
    2. $ cat private_key
    3. 73096ed11ab9f1db6135857958ece7d73ea7c30862145bcc4bbc7649075de474

    现在,使用ec-to-public命令从私钥生成公钥。 我们将private_key文件传递到标准输入并将命令的标准输出保存到新文件public_key中:

    1. $ bx ec-to-public < private_key > public_key
    2. $ cat public_key
    3. 02fca46a6006a62dfdd2dbb2149359d0d97a04f430f12a7626dd409256c12be500

    我们可以使用ec-to-address命令将public_key重新格式化为一个地址。 我们将public_key传递给标准输入:

    1. $ bx ec-to-address < public_key
    2. 17re1S4Q8ZHyCP8Kw7xQad1Lr6XUzWUnkG

    以这种方式产生的密钥产生零型非确定性钱包。 这意味着每个密钥都是由一个独立的种子生成的。 Bitcoin Explorer命令也可以根据BIP-32确定性地生成密钥。 在这种情况下,从种子创建“主”键,然后确定性地扩展以产生一个子项的树,从而产生一个2类确定性钱包。

    首先,我们使用seed和hd-new命令生成一个主密钥,该密钥将被用作导出密钥层次结构的基础:

    1. $ bx seed > seed
    2. $ cat seed
    3. eb68ee9f3df6bd4441a9feadec179ff1
    4. $ bx hd-new < seed > master
    5. $ cat master
    6. xprv9s21ZrQH143K2BEhMYpNQoUvAgiEjArAVaZaCTgsaGe6LsAnwubeiTcDzd23mAoyizm9cApe51gNfLMkBqkYoWWMCRwzfuJk8RwF1SVEpAQ

    我们现在使用hd-private命令在帐户中生成一个强化的“帐户”键和两个私钥序列:

    1. $ bx hd-private --hard < master > account
    2. $ cat account
    3. xprv9vkDLt81dTKjwHB8fsVB5QK8cGnzveChzSrtCfvu3aMWvQaThp59ueufuyQ8Qi3qpjk4aKsbmbfxwcgS8PYbgoR2NWHeLyvg4DhoEE68A1n
    4. $ bx hd-private --index 0 < account
    5. xprv9xHfb6w1vX9xgZyPNXVgAhPxSsEkeRcPHEUV5iJcVEsuUEACvR3NRY3fpGhcnBiDbvG4LgndirDsia1e9F3DWPkX7Tp1V1u97HKG1FJwUpU
    6. $ bx hd-private --index 1 < account
    7. xprv9xHfb6w1vX9xjc8XbN4GN86jzNAZ6xHEqYxzbLB4fzHFd6VqCLPGRZFsdjsuMVERadbgDbziCRJru9n6tzEWrASVpEdrZrFidt1RDfn4yA3

    接下来,我们使用hd-public命令来生成两个公钥的相应序列:

    1. $ bx hd-public --index 0 < account
    2. xpub6BH1zcTuktiFu43rUZ2gXqLgzu5F3tLEeTQ5t6iE3aQtM2VMTxMcyLN9fYHiGhGpQe9QQYmqL2eYPFJ3vezHz5wzaSW4FiGrseNDR4LKqTy
    3. $ bx hd-public --index 1 < account
    4. xpub6BH1zcTuktiFx6CzhPbGjG3UYQ13WR16CmtbPiagEKpEVtpyjshWyMaMV1cn7nUPUkgQHPVXJVqsrA8xWbGQDhohEcDFTEYMvYzwRD7Juf8

    公钥也可以使用hd-to-public命令从其相应的私钥派生:

    1. $ bx hd-private --index 0 < account | bx hd-to-public
    2. xpub6BH1zcTuktiFu43rUZ2gXqLgzu5F3tLEeTQ5t6iE3aQtM2VMTxMcyLN9fYHiGhGpQe9QQYmqL2eYPFJ3vezHz5wzaSW4FiGrseNDR4LKqTy
    3. $ bx hd-private --index 1 < account | bx hd-to-public
    4. xpub6BH1zcTuktiFx6CzhPbGjG3UYQ13WR16CmtbPiagEKpEVtpyjshWyMaMV1cn7nUPUkgQHPVXJVqsrA8xWbGQDhohEcDFTEYMvYzwRD7Juf8

    我们可以在确定性链中产生几乎无限数量的密钥,全部来源于单个种子。 这种技术用于许多钱包应用程序中以生成可以使用单个种子值进行备份和恢复的密钥。 每次创建一个新的密钥时,这比将其所有随机生成的密钥备份在一起更容易。

    可以使用助记符编码命令对种子进行编码:

    1. $ bx hd-mnemonic < seed > words
    2. adore repeat vision worst especially veil inch woman cast recall dwell appreciate

    然后可以使用mnemonic-decode命令对种子进行解码:

    1. $ bx mnemonic-decode < words
    2. eb68ee9f3df6bd4441a9feadec179ff1

    助记符编码可以使种子更容易记录甚至记住。