附录6、pycoin

    pycoin库支持Python 2(2.7.x)和Python 3(3.3之后),并附带一些方便的命令行实用程序ku和tx。

    命令行实用程序ku(“密钥实用程序”)是用于操纵密钥的瑞士军刀。 它支持BIP-32键,WIF和地址(比特币和代币)。 以下是一些例子。

    使用GPG和/ dev / random的默认熵源创建一个BIP-32密钥:

    从密码短语创建一个BIP-32密钥:

    警告 这个例子中的密码很容易猜到。

    1. input : P:foo
    2. network : Bitcoin
    3. wallet key : xprv9s21ZrQH143K31AgNK5pyVvW23gHnkBq2wh5aEk6g1s496M8ZMjxncCKZKgb5j
    4. ZoY5eSJMJ2Vbyvi2hbmQnCuHBujZ2WXGTux1X2k9Krdtq
    5. public version : xpub661MyMwAqRbcFVF9ULcqLdsEa5WnCCugQAcgNd9iEMQ31tgH6u4DLQWoQayvtS
    6. VYFvXz2vPPpbXE1qpjoUFidhjFj82pVShWu9curWmb2zy
    7. tree depth : 0
    8. fingerprint : 5d353a2e
    9. parent f'print : 00000000
    10. child index : 0
    11. chain code : 5eeb1023fd6dd1ae52a005ce0e73420821e1d90e08be980a85e9111fd7646bbc
    12. private key : yes
    13. secret exponent : 65825730547097305716057160437970790220123864299761908948746835886007793998275
    14. hex : 91880b0e3017ba586b735fe7d04f1790f3c46b818a2151fb2def5f14dd2fd9c3
    15. wif : L26c3H6jEPVSqAr1usXUp9qtQJw6NHgApq6Ls4ncyqtsvcq2MwKH
    16. uncompressed : 5JvNzA5vXDoKYJdw8SwwLHxUxaWvn9mDea6k1vRPCX7KLUVWa7W
    17. public pair x : 81821982719381104061777349269130419024493616650993589394553404347774393168191
    18. public pair y : 58994218069605424278320703250689780154785099509277691723126325051200459038290
    19. x as hex : b4e599dfa44555a4ed38bcfff0071d5af676a86abf123c5b4b4e8e67a0b0b13f
    20. y as hex : 826d8b4d3010aea16ff4c1c1d3ae68541d9a04df54a2c48cc241c2983544de52
    21. y parity : even
    22. key pair as sec : 02b4e599dfa44555a4ed38bcfff0071d5af676a86abf123c5b4b4e8e67a0b0b13f
    23. uncompressed : 04b4e599dfa44555a4ed38bcfff0071d5af676a86abf123c5b4b4e8e67a0b0b13f
    24. 826d8b4d3010aea16ff4c1c1d3ae68541d9a04df54a2c48cc241c2983544de52
    25. hash160 : 5d353a2ecdb262477172852d57a3f11de0c19286
    26. uncompressed : e5bd3a7e6cb62b4c820e51200fb1c148d79e67da
    27. Bitcoin address : 19Vqc8uLTfUonmxUEZac7fz1M5c5ZZbAii
    28. uncompressed : 1MwkRkogzBRMehBntgcq2aJhXCXStJTXHT

    获取JSON信息:

    1. $ ku P:foo -P -j
    2. {
    3. "y_parity": "even",
    4. "public_pair_y_hex": "826d8b4d3010aea16ff4c1c1d3ae68541d9a04df54a2c48cc241c2983544de52",
    5. "private_key": "no",
    6. "parent_fingerprint": "00000000",
    7. "tree_depth": "0",
    8. "network": "Bitcoin",
    9. "btc_address_uncompressed": "1MwkRkogzBRMehBntgcq2aJhXCXStJTXHT",
    10. "key_pair_as_sec_uncompressed": "04b4e599dfa44555a4ed38bcfff0071d5af676a86abf123c5b4b4e8e67a0b0b13f826d8b4d3010aea16ff4c1c1d3ae68541d9a04df54a2c48cc241c2983544de52",
    11. "public_pair_x_hex": "b4e599dfa44555a4ed38bcfff0071d5af676a86abf123c5b4b4e8e67a0b0b13f",
    12. "wallet_key": "xpub661MyMwAqRbcFVF9ULcqLdsEa5WnCCugQAcgNd9iEMQ31tgH6u4DLQWoQayvtSVYFvXz2vPPpbXE1qpjoUFidhjFj82pVShWu9curWmb2zy",
    13. "chain_code": "5eeb1023fd6dd1ae52a005ce0e73420821e1d90e08be980a85e9111fd7646bbc",
    14. "child_index": "0",
    15. "hash160_uncompressed": "e5bd3a7e6cb62b4c820e51200fb1c148d79e67da",
    16. "btc_address": "19Vqc8uLTfUonmxUEZac7fz1M5c5ZZbAii",
    17. "fingerprint": "5d353a2e",
    18. "hash160": "5d353a2ecdb262477172852d57a3f11de0c19286",
    19. "input": "P:foo",
    20. "public_pair_x": "81821982719381104061777349269130419024493616650993589394553404347774393168191",
    21. "public_pair_y": "58994218069605424278320703250689780154785099509277691723126325051200459038290",
    22. "key_pair_as_sec": "02b4e599dfa44555a4ed38bcfff0071d5af676a86abf123c5b4b4e8e67a0b0b13f"
    23. }

    公共BIP32密钥:

    1. $ ku -w -P P:foo
    2. xpub661MyMwAqRbcFVF9ULcqLdsEa5WnCCugQAcgNd9iEMQ31tgH6u4DLQWoQayvtSVYFvXz2vPPpbXE1qpjoUFidhjFj82pVShWu9curWmb2zy

    生成子项:

    1. $ ku -w -s3/2 P:foo
    2. xprv9wTErTSkjVyJa1v4cUTFMFkWMe5eu8ErbQcs9xajnsUzCBT7ykHAwdrxvG3g3f6BFk7ms5hHBvmbdutNmyg6iogWKxx6mefEw4M8EroLgKj

    硬化子键:

    1. $ ku -w -s3/2H P:foo
    2. xprv9wTErTSu5AWGkDeUPmqBcbZWX1xq85ZNX9iQRQW9DXwygFp7iRGJo79dsVctcsCHsnZ3XU3DhsuaGZbDh8iDkBN45k67UKsJUXM1JfRCdn1
    1. $ ku -W P:foo
    2. L26c3H6jEPVSqAr1usXUp9qtQJw6NHgApq6Ls4ncyqtsvcq2MwKH

    地址:

    生成一堆子项:

    1. $ ku P:foo -s 0/0-5 -w
    2. xprv9xWkBDfyBXmZjBG9EiXBpy67KK72fphUp9utJokEBFtjsjiuKUUDF5V3TU8U8cDzytqYnSekc8bYuJS8G3bhXxKWB89Ggn2dzLcoJsuEdRK
    3. xprv9xWkBDfyBXmZnzKf3bAGifK593gT7WJZPnYAmvc77gUQVej5QHckc5Adtwxa28ACmANi9XhCrRvtFqQcUxt8rUgFz3souMiDdWxJDZnQxzx
    4. xprv9xWkBDfyBXmZsA85GyWj9uYPyoQv826YAadKWMaaEosNrFBKgj2TqWuiWY3zuqxYGpHfv9cnGj5P7e8EskpzKL1Y8Gk9aX6QbryA5raK73p
    5. xprv9xWkBDfyBXmZw4jEYXUHYc9fT25k9irP87n2RqfJ5bqbjKdT84Mm7Wtc2xmzFuKg7iYf7XFHKkSsaYKWKJbR54bnyAD9GzjUYbAYTtN4ruo

    生成相应的地址:

    1. $ ku P:foo -s 0/0-5 -a
    2. 1MrjE78H1R1rqdFrmkjdHnPUdLCJALbv3x
    3. 1AnYyVEcuqeoVzH96zj1eYKwoWfwte2pxu
    4. 1GXr1kZfxE1FcK6ZRD5sqqqs5YfvuzA1Lb
    5. 116AXZc4bDVQrqmcinzu4aaPdrYqvuiBEK
    6. 1Cz2rTLjRM6pMnxPNrRKp9ZSvRtj5dDUML
    7. 1WstdwPnU6HEUPme1DQayN9nm6j7nDVEM

    生成相应的WIF:

    1. $ ku P:foo -s 0/0-5 -W
    2. L5a4iE5k9gcJKGqX3FWmxzBYQc29PvZ6pgBaePLVqT5YByEnBomx
    3. Kyjgne6GZwPGB6G6kJEhoPbmyjMP7D5d3zRbHVjwcq4iQXD9QqKQ
    4. L4B3ygQxK6zH2NQGxLDee2H9v4Lvwg14cLJW7QwWPzCtKHdWMaQz
    5. L2L2PZdorybUqkPjrmhem4Ax5EJvP7ijmxbNoQKnmTDMrqemY8UF
    6. L2oD6vA4TUyqPF8QG4vhUFSgwCyuuvFZ3v8SKHYFDwkbM765Nrfd
    7. KzChTbc3kZFxUSJ3Kt54cxsogeFAD9CCM4zGB22si8nfKcThQn8C

    通过选择一个BIP32字符串(与子项0/3对应的字符串)来检查它是否工作:

    1. $ ku -W xprv9xWkBDfyBXmZsA85GyWj9uYPyoQv826YAadKWMaaEosNrFBKgj2TqWuiWY3zuqxYGpHfv9cnGj5P7e8EskpzKL1Y8Gk9aX6QbryA5raK73p
    2. L2L2PZdorybUqkPjrmhem4Ax5EJvP7ijmxbNoQKnmTDMrqemY8UF
    3. $ ku -a xprv9xWkBDfyBXmZsA85GyWj9uYPyoQv826YAadKWMaaEosNrFBKgj2TqWuiWY3zuqxYGpHfv9cnGj5P7e8EskpzKL1Y8Gk9aX6QbryA5raK73p
    4. 116AXZc4bDVQrqmcinzu4aaPdrYqvuiBEK

    是的,看起来很熟悉

    从秘密指数:

    1. $ ku 1
    2. input : 1
    3. network : Bitcoin
    4. secret exponent : 1
    5. hex : 1
    6. wif : KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn
    7. uncompressed : 5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf
    8. public pair x : 55066263022277343669578718895168534326250603453777594175500187360389116729240
    9. public pair y : 32670510020758816978083085130507043184471273380659243275938904335757337482424
    10. x as hex : 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    11. y as hex : 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    12. y parity : even
    13. key pair as sec : 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    14. uncompressed : 0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    15. 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    16. hash160 : 751e76e8199196d454941c45d1b3a323f1433bd6
    17. uncompressed : 91b24bf9f5288532960ac687abb035127b1d28a5
    18. Bitcoin address : 1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH
    19. uncompressed : 1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm

    莱特币版本:

    1. $ ku -nL 1
    2. input : 1
    3. network : Litecoin
    4. secret exponent : 1
    5. hex : 1
    6. wif : T33ydQRKp4FCW5LCLLUB7deioUMoveiwekdwUwyfRDeGZm76aUjV
    7. uncompressed : 6u823ozcyt2rjPH8Z2ErsSXJB5PPQwK7VVTwwN4mxLBFrao69XQ
    8. public pair x : 55066263022277343669578718895168534326250603453777594175500187360389116729240
    9. public pair y : 32670510020758816978083085130507043184471273380659243275938904335757337482424
    10. x as hex : 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    11. y as hex : 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    12. y parity : even
    13. key pair as sec : 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    14. uncompressed : 0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    15. 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    16. hash160 : 751e76e8199196d454941c45d1b3a323f1433bd6
    17. uncompressed : 91b24bf9f5288532960ac687abb035127b1d28a5
    18. Litecoin address : LVuDpNCSSj6pQ7t9Pv6d6sUkLKoqDEVUnJ
    19. uncompressed : LYWKqJhtPeGyBAw7WC8R3F7ovxtzAiubdM

    狗狗币WIF:

    1. $ ku -nT 55066263022277343669578718895168534326250603453777594175500187360389116729240,even
    2. input : 550662630222773436695787188951685343262506034537775941755001873603
    3. public pair x : 55066263022277343669578718895168534326250603453777594175500187360389116729240
    4. public pair y : 32670510020758816978083085130507043184471273380659243275938904335757337482424
    5. x as hex : 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    6. y as hex : 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    7. y parity : even
    8. key pair as sec : 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    9. uncompressed : 0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
    10. 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
    11. hash160 : 751e76e8199196d454941c45d1b3a323f1433bd6
    12. uncompressed : 91b24bf9f5288532960ac687abb035127b1d28a5
    13. Bitcoin testnet address : mrCDrCybB6J1vRfbwM5hemdJz73FwDBC8r
    14. uncompressed : mtoKs9V381UAhUia3d7Vb9GNak8Qvmcsme

    从hash160:

    1. $ ku 751e76e8199196d454941c45d1b3a323f1433bd6
    2. input : 751e76e8199196d454941c45d1b3a323f1433bd6
    3. network : Bitcoin
    4. hash160 : 751e76e8199196d454941c45d1b3a323f1433bd6
    5. Bitcoin address : 1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH

    作为狗狗币地址:

    1. $ ku -nD 751e76e8199196d454941c45d1b3a323f1433bd6
    2. input : 751e76e8199196d454941c45d1b3a323f1433bd6
    3. network : Dogecoin
    4. hash160 : 751e76e8199196d454941c45d1b3a323f1433bd6
    5. Dogecoin address : DFpN6QqFfUm3gKNaxN6tNcab1FArL9cZLE

    2.交易实用程序(TX)

    命令行实用程序tx将以人类可读的形式显示交易,从pycoin的交易缓存或Web服务获取基础交易(当前支持blockchain.info和biteasy.com),合并交易,添加或删除输入或输出,以及签署交易。

    以下是一些例子。

    查看着名的“皮萨”交易:

    1. $ tx 49d2adb6e476fa46d8357babf78b1b501fd39e177ac7833124b3f67b17c40c2a
    2. warning: consider setting environment variable PYCOIN_CACHE_DIR=~/.pycoin_cache to cache transactions fetched via web services
    3. warning: no service providers found for get_tx; consider setting environment variable PYCOIN_SERVICE_PROVIDERS=BLOCKR_IO:BLOCKCHAIN_INFO:BITEASY:BLOCKEXPLORER
    4. usage: tx [-h] [-t TRANSACTION_VERSION] [-l LOCK_TIME] [-n NETWORK] [-a]
    5. [-i address] [-f path-to-private-keys] [-g GPG_ARGUMENT]
    6. [--remove-tx-in tx_in_index_to_delete]
    7. [--remove-tx-out tx_out_index_to_delete] [-F transaction-fee] [-u]
    8. [-b BITCOIND_URL] [-o path-to-output-file]
    9. argument [argument ...]
    10. tx: error: can't find Tx with id 49d2adb6e476fa46d8357babf78b1b501fd39e177ac7833124b3f67b17c40c2a

    哎呀! 我们没有设置Web服务。 现在我们来做:

    1. $ PYCOIN_CACHE_DIR=~/.pycoin_cache
    2. $ PYCOIN_SERVICE_PROVIDERS=BLOCKR_IO:BLOCKCHAIN_INFO:BITEASY:BLOCKEXPLORER
    3. $ export PYCOIN_CACHE_DIR PYCOIN_SERVICE_PROVIDERS

    这不是自动完成的,所以命令行工具不会泄漏潜在的关于您对第三方网站感兴趣的交易的私人信息。 如果您不在乎,可以将这些行放入.profile。

    让我们再试一次:

    1. $ tx 49d2adb6e476fa46d8357babf78b1b501fd39e177ac7833124b3f67b17c40c2a
    2. Version: 1 tx hash 49d2adb6e476fa46d8357babf78b1b501fd39e177ac7833124b3f67b17c40c2a 159 bytes
    3. TxIn count: 1; TxOut count: 1
    4. Lock time: 0 (valid anytime)
    5. Input:
    6. 0: (unknown) from 1e133f7de73ac7d074e2746a3d6717dfc99ecaa8e9f9fade2cb8b0b20a5e0441:0
    7. Output:
    8. 0: 1CZDM6oTttND6WPdt3D6bydo7DYKzd9Qik receives 10000000.00000 mBTC
    9. Total output 10000000.00000 mBTC
    10. including unspents in hex dump since transaction not fully signed
    11. 010000000141045e0ab2b0b82cdefaf9e9a8ca9ec9df17673d6a74e274d0c73ae77d3f131e000000004a493046022100a7f26eda874931999c90f87f01ff1ffc76bcd058fe16137e0e63fdb6a35c2d78022100a61e9199238eb73f07c8f209504c84b80f03e30ed8169edd44f80ed17ddf451901ffffffff010010a5d4e80000001976a9147ec1003336542cae8bded8909cdd6b5e48ba0ab688ac00000000
    12. ** can't validate transaction as source transactions missing

    出现最后一行是为了验证交易的签名,您技术上需要源代码交易。 所以我们来添加-a来增加源信息的交易:

    1. $ fetch_unspent 12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX
    2. a3a6f902a51a2cbebede144e48a88c05e608c2cce28024041a5b9874013a1e2a/0/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/333000
    3. cea36d008badf5c7866894b191d3239de9582d89b6b452b596f1f1b76347f8cb/31/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/10000
    4. 065ef6b1463f552f675622a5d1fd2c08d6324b4402049f68e767a719e2049e8d/86/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/10000
    5. a66dddd42f9f2491d3c336ce5527d45cc5c2163aaed3158f81dc054447f447a2/0/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/10000
    6. ffd901679de65d4398de90cefe68d2c3ef073c41f7e8dbec2fb5cd75fe71dfe7/0/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/100
    7. d658ab87cc053b8dbcfd4aa2717fd23cc3edfe90ec75351fadd6a0f7993b461d/5/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/911
    8. 36ebe0ca3237002acb12e1474a3859bde0ac84b419ec4ae373e63363ebef731c/1/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/100000
    9. fd87f9adebb17f4ebb1673da76ff48ad29e64b7afa02fda0f2c14e43d220fe24/0/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/1
    10. dfdf0b375a987f17056e5e919ee6eadd87dad36c09c4016d4a03cea15e5c05e3/1/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/1337
    11. cb2679bfd0a557b2dc0d8a6116822f3fcbe281ca3f3e18d3855aa7ea378fa373/0/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/1337
    12. d6be34ccf6edddc3cf69842dce99fe503bf632ba2c2adb0f95c63f6706ae0c52/1/76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac/2000000
    13. 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098/0/410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac/5000000000