{ "info": { "author": "Paul Martin", "author_email": "paulmartinforwork@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Education", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Security :: Cryptography" ], "description": "# Pycryptotools, Python library for Crypto coins signatures and transactions\n\nThis is a fork of Vitalik Buterin's original [pybitcointools](https://github.com/vbuterin/pybitcointools) library.\n\nInstallation:\n\n```bash\npip install cryptos\n```\n\nLibrary now supports making and pushing raw transactions for:\n\n* Bitcoin mainnet\n* Bitcoin testnet \n* Bitcoin Cash mainnet (with replay protection)\n* Bitcoin Cash testnet (with replay protection)\n* Litecoin mainnet\n* Litecoin testnet\n* Dash mainnet\n* Dash testnet\n* Dogecoin mainnet\n\nTransaction broadcast has been tested for all of these.\n\nSegregrated Witness transactions also supported for:\n* Bitcoin mainnet\n* Bitcoin testnet\n* Litecoin mainnet\n* Litecoin testnet\n\nHere are the first mainnet segwit transactions made with this library:\n\nBitcoin: https://blockchain.info/tx/9f3bd4fa14e424abd5623ba98877e33cfee3e7bd6f9f71d7a39e402501458c81\n\nLitecoin: https://live.blockcypher.com/ltc/tx/b16ad0332ca3114f0dc773fda643c49e41308df4204940539bea5806cfee0989/\nhttps://live.blockcypher.com/ltc/tx/3b936180daf05adcd7e9f04b60e1ba9a4a6db486c0ad91cb795b29ca46313000/\n\nAim is to provide a simple, class-based API which makes switching between different coins and mainnet and testnet, and adding new coins, all very easy.\n\nRoadmap:\n* Correct fee detection algorithm\n* Bitcoin Gold support\n* Wallet class for private keys, electrum mnemonic and addresses(read-only)\n* Read the docs page\n* E-commerce tools (exchange rates, short-time invoices)\n* Easily gather unspents and broadcast transactions based on a mnemonic\n* Desktop GUI for easy creation, signing and broadcasting of raw transactions\n* Seed-based multi-crypto wallet\n\n### Advantages:\n\n* Methods have a simple interface, inputting and outputting in standard formats\n* Classes for different coins with a common interface\n* Many functions can be taken out and used individually\n* Supports binary, hex and base58\n* Transaction deserialization format almost compatible with BitcoinJS\n* Electrum and BIP0032 support\n* Make and publish a transaction all in a single command line instruction with full control\n* Includes non-bitcoin-specific conversion and JSON utilities\n\n### Disadvantages:\n\n* Not a full node, has no idea what blocks are\n* Relies on centralized explorers for blockchain operations\n\n### Example usage - the long way (best way to learn :) ):\n\nWARNING: While it's fun to mess around with this on the testnet, do not do the following procedure on the mainnet \nunless you really know what you are doing. Any value in the inputs not included in the ouputs will be lost.\nSo if the total inputs value is 1 BTC, and the total outputs amount to 0.5 BTC, 0.5 BTC will be given to the \nminers as a fee. The faster way, listed later in the README, ensures the difference between\ninputs and outputs is sent as change back to the sender (except for a small fee).\nIf in doubt, before broadcasting a transaction, visit https://live.blockcypher.com/btc/decodetx/ and decode the raw tx\nand make sure it looks right. If you aren't familiar with how Bitcoin transactions work, you should run through\n this procedure a few times on the testnet before developing for mainnet - same if you aren't familiar with segwit.\n\nOTHER WARNING: Default fees for Bitcoin mainnet are way too low throughout this library. \nThis can cause coins to be lost for a period of time until they are finally confirmed by a miner. Hopefully, some kind\nof \"correct fee\" detection algorithm will be implemented soon but for now it is recommended to think about and set an \nappropriate fee when making transactions. There are many different ways of making a transaction. Whichever method you\nchoose, make sure you understand how to set the correct fee.\n\n > from cryptos import *\n > c = Bitcoin(testnet=True)\n > priv = sha256('a big long brainwallet password')\n > priv\n '89d8d898b95addf569b458fbbd25620e9c9b19c9f730d5d60102abbabcb72678'\n > pub = c.privtopub(priv)\n > pub\n '041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f'\n > addr = c.pubtoaddr(pub)\n > addr\n 'mwJUQbdhamwemrsR17oy7z9upFh4JtNxm1'\n > inputs = c.unspent(addr)\n > inputs\n [{'output': '3be10a0aaff108766371fd4f4efeabc5b848c61d4aac60db6001464879f07508:0', 'value': 180000000}, {'output': '51ce9804e1a4fd3067416eb5052b9930fed7fdd9857067b47d935d69f41faa38:0', 'value': 90000000}]\n > outs = [{'value': 269845600, 'address': '2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF'}, {'value': 100000, 'address': 'mrvHv6ggk5gFMatuJtBKAzktTU1N3MYdu2'}]\n > tx = c.mktx(inputs,outs)\n > tx\n {'locktime': 0, 'version': 1, 'ins': [{'outpoint': {'hash': '3be10a0aaff108766371fd4f4efeabc5b848c61d4aac60db6001464879f07508', 'index': 0}, 'amount': 180000000, 'script': '483045022100fccd16f619c5f8b8198f5a00f557f6542afaae10b2992733963c5b9c4042544c022041521e7ab2f4b58856e8554c651664af92f6abd58328c41bc652aea460a9a6a30141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f', 'sequence': 4294967295}, {'outpoint': {'hash': '51ce9804e1a4fd3067416eb5052b9930fed7fdd9857067b47d935d69f41faa38', 'index': 0}, 'amount': 90000000, 'script': '483045022100a9f056be75da4167c2cae9f037e04f6efd20caf97e05052406c127d72e7f236c02206638c10ad6975b44c26633e7c40547405dd4e6184fa3afd0ec98260369fadb0d0141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f', 'sequence': 4294967295}], 'outs': [{'script': 'a914a9974100aeee974a20cda9a2f545704a0ab54fdc87', 'value': 269845600}, {'script': '76a9147d13547544ecc1f28eda0c0766ef4eb214de104588ac', 'value': 100000}]}\n > tx2 = c.sign(tx,0,priv)\n > tx2\n {'locktime': 0, 'version': 1, 'ins': [{'outpoint': {'hash': '3be10a0aaff108766371fd4f4efeabc5b848c61d4aac60db6001464879f07508', 'index': 0}, 'amount': 180000000, 'script': '483045022100fccd16f619c5f8b8198f5a00f557f6542afaae10b2992733963c5b9c4042544c022041521e7ab2f4b58856e8554c651664af92f6abd58328c41bc652aea460a9a6a30141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f', 'sequence': 4294967295}, {'outpoint': {'hash': '51ce9804e1a4fd3067416eb5052b9930fed7fdd9857067b47d935d69f41faa38', 'index': 0}, 'amount': 90000000, 'script': '483045022100a9f056be75da4167c2cae9f037e04f6efd20caf97e05052406c127d72e7f236c02206638c10ad6975b44c26633e7c40547405dd4e6184fa3afd0ec98260369fadb0d0141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f', 'sequence': 4294967295}], 'outs': [{'script': 'a914a9974100aeee974a20cda9a2f545704a0ab54fdc87', 'value': 269845600}, {'script': '76a9147d13547544ecc1f28eda0c0766ef4eb214de104588ac', 'value': 100000}]}\n > tx3 = c.sign(tx2,1,priv)\n > tx3\n {'locktime': 0, 'version': 1, 'ins': [{'outpoint': {'hash': '3be10a0aaff108766371fd4f4efeabc5b848c61d4aac60db6001464879f07508', 'index': 0}, 'amount': 180000000, 'script': '483045022100fccd16f619c5f8b8198f5a00f557f6542afaae10b2992733963c5b9c4042544c022041521e7ab2f4b58856e8554c651664af92f6abd58328c41bc652aea460a9a6a30141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f', 'sequence': 4294967295}, {'outpoint': {'hash': '51ce9804e1a4fd3067416eb5052b9930fed7fdd9857067b47d935d69f41faa38', 'index': 0}, 'amount': 90000000, 'script': '483045022100a9f056be75da4167c2cae9f037e04f6efd20caf97e05052406c127d72e7f236c02206638c10ad6975b44c26633e7c40547405dd4e6184fa3afd0ec98260369fadb0d0141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764f', 'sequence': 4294967295}], 'outs': [{'script': 'a914a9974100aeee974a20cda9a2f545704a0ab54fdc87', 'value': 269845600}, {'script': '76a9147d13547544ecc1f28eda0c0766ef4eb214de104588ac', 'value': 100000}]}\n > tx4 = c.serialize(tx)\n > tx4\n '01000000020875f07948460160db60ac4a1dc648b8c5abfe4e4ffd71637608f1af0a0ae13b000000008b483045022100fccd16f619c5f8b8198f5a00f557f6542afaae10b2992733963c5b9c4042544c022041521e7ab2f4b58856e8554c651664af92f6abd58328c41bc652aea460a9a6a30141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764fffffffff38aa1ff4695d937db4677085d9fdd7fe30992b05b56e416730fda4e10498ce51000000008b483045022100a9f056be75da4167c2cae9f037e04f6efd20caf97e05052406c127d72e7f236c02206638c10ad6975b44c26633e7c40547405dd4e6184fa3afd0ec98260369fadb0d0141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764fffffffff02608415100000000017a914a9974100aeee974a20cda9a2f545704a0ab54fdc87a0860100000000001976a9147d13547544ecc1f28eda0c0766ef4eb214de104588ac00000000'\n > c.pushtx(tx4)\n {'status': 'success', 'data': {'network': 'BTCTEST', 'txid': '00af7b794355aa4ea5851a792713934b524b820cf7f20e2a0e01ab61910b5299'}}\n\n### Faster way\n\nTo send 12 DASH from addr belonging to privkey 89d8d898b95addf569b458fbbd25620e9c9b19c9f730d5d60102abbabcb72678 \nto address yd8Q7MwTDe9yJdeMx1YSSYS4wdxQ2HDqTg, with change returned to the sender address:\n\n > from cryptos import *\n > dash = Dash(testnet=True)\n > dash.send(\"89d8d898b95addf569b458fbbd25620e9c9b19c9f730d5d60102abbabcb72678\", \"yd8Q7MwTDe9yJdeMx1YSSYS4wdxQ2HDqTg\", 1200000000)\n {'status': 'success', 'data': {'txid': '6a510a129bf1e229e99c3eede516d3bde8bdccf859199937a98eaab2ce1cd7ab', 'network': 'DASHTEST'}}\n\nOr if you prefer to verify the tx (for example, with Blockcypher) you can break it into two steps:\n\n > from cryptos import *\n > dash = Dash()\n > tx = dash.preparesignedtx(priv, \"Xhcmzs5wKECBiWwSEsTZu8wNonguH5poaz\", 9800000-20000, fee=20000)\n > tx\n '010000000194f2f955627dfd549f213a70d65dcd5550c0b14a484d38b6ae47fe7a8896ca41000000008b483045022100b125b1f4848c145193f70b915b0074539d90fd74c2e75492169f06927acafa39022025a009711a354a7d84e19f234dfb5d20e155b64acad40941670e634c1100101a01410437b81f8f1376a87556380ad9f3a6b7f642754b3497ce42518f8dbd39bfedea24d897ae5d8d1dd41c04f55700ed6f3b7cee99df5aed74f98a54cbc576d75c0b9fffffffff01203b9500000000001976a9144c0404140e6ad8d04bdf625888bf6dfcc20fa12d88ac00000000'\n >dash.pushtx(tx)\n {'status': 'success', 'data': {'txid': '0d889f6a268340c8fd30cdc6567eb588765e911fdd1fb0aac870dc3125ffde76', 'network': 'DASH'}}\n\nAnother example with Bitcoin Cash testnet:\n\n > from cryptos import *\n > crypto = BitcoinCash(testnet=True)\n > tx = crypto.preparesignedtx(\"89d8d898b95addf569b458fbbd25620e9c9b19c9f730d5d60102abbabcb72678\", \"mgRoeWs2CeCEuqQmNfhJjnpX8YvtPACmCX\", 967916800)\n > tx\n '010000000144ea7b41df09cee54c43f817dc11fd4d88c9b721b4c13b588f6a764eab78f692000000008b4830450221008efa819db89f714dbe0a19a7eb605d03259f4755a0f12876e9dddf477e1867b8022072bc76d120e92668f4765b5d694aee4a3cafd6cd4aaa8d5ebf88c3f821c81d9c4141041f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc724ab2737afd66e4aacdc0e4f48550cd783c1a73edb3dbd0750e1bd0cb03764fffffffff02003db139000000001976a91409fed3e08e624b23dbbacc77f7b2a39998351a6888acf046df07000000001976a914ad25bdf0fdfd21ca91a82449538dce47f8dc213d88ac00000000'\n > crypto.pushtx(tx)\n {'status': 'success', 'data': {'txid': 'd8b130183824d0001d3bc669b31e798e2654868a7fda743aaf35d757d89db0eb', 'network': 'tbcc'}}\n \n### Segregated Witness - the long way\nThe same warnings about fees as the long way for regular transactions listed above applies here.\n\nTo create a segwit transaction, generate a pay to witness script hash (P2WPKH) \naddress and mark all the Segwit UTXOs with segwit=True.\n\n > from cryptos import *\n > c = Litecoin(testnet=True)\n > priv = sha256('a big long brainwallet password')\n > priv\n '89d8d898b95addf569b458fbbd25620e9c9b19c9f730d5d60102abbabcb72678'\n > addr = c.privtop2w(priv)\n > addr\n '2Mtj1R5qSfGowwJkJf7CYufFVNk5BRyAYZh'\n > inputs = c.unspent(addr)\n > inputs\n [{'output': '63189d6354b1e7d3a5a16076b0722f84b80b94d5f4958c3697191503cccbe88a:0', 'value': 100000000}]\n > inputs[0]['segwit']=True\n > inputs\n [{'output': '63189d6354b1e7d3a5a16076b0722f84b80b94d5f4958c3697191503cccbe88a:0', 'value': 100000000, 'segwit': True}]\n > outs = [{'value': 79956800, 'address': 'mxYcACPJWAMMkXu7S9SM8npicFWehpYCWx'}, {'value': 19989200, 'address': '2Mtj1R5qSfGowwJkJf7CYufFVNk5BRyAYZh'}]\n > tx = c.mktx(inputs,outs)\n > tx\n {'locktime': 0, 'version': 1, 'ins': [{'script': '', 'sequence': 4294967295, 'outpoint': {'hash': '63189d6354b1e7d3a5a16076b0722f84b80b94d5f4958c3697191503cccbe88a', 'index': 0}, 'amount': 100000000, 'segwit': True}], 'outs': [{'script': '76a914baca2979689786ba311edcfc04d9ad95d393679488ac', 'value': 79956800}, {'script': 'a9141039471d8d44f3693cd34d1b9d69fd957799cf3087', 'value': 19989200}], 'marker': 0, 'flag': 1, 'witness': []}\n > tx2 = c.sign(tx,0,priv)\n > tx2\n {'locktime': 0, 'version': 1, 'ins': [{'script': '160014804aff26594cc36c0ac89e95895ab9bdd0c540ef', 'sequence': 4294967295, 'outpoint': {'hash': '63189d6354b1e7d3a5a16076b0722f84b80b94d5f4958c3697191503cccbe88a', 'index': 0}, 'amount': 100000000, 'segwit': True}], 'outs': [{'script': '76a914baca2979689786ba311edcfc04d9ad95d393679488ac', 'value': 79956800}, {'script': 'a9141039471d8d44f3693cd34d1b9d69fd957799cf3087', 'value': 19989200}], 'marker': 0, 'flag': 1, 'witness': [{'number': 2, 'scriptCode': '47304402201632cb84a0aed4934df83fbc3cd2682f920eef37f76aa64d477702dd59633c900220198cfe15c28b26247c8e49974b4fda825ae16441112f13e754322964a9f24ec80121031f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc'}]}\n > tx3 = serialize(tx)\n > tx3\n '010000000001018ae8cbcc03151997368c95f4d5940bb8842f72b07660a1a5d3e7b154639d18630000000017160014804aff26594cc36c0ac89e95895ab9bdd0c540efffffffff02400bc404000000001976a914baca2979689786ba311edcfc04d9ad95d393679488acd00231010000000017a9141039471d8d44f3693cd34d1b9d69fd957799cf30870247304402201632cb84a0aed4934df83fbc3cd2682f920eef37f76aa64d477702dd59633c900220198cfe15c28b26247c8e49974b4fda825ae16441112f13e754322964a9f24ec80121031f763d81010db8ba3026fef4ac3dc1ad7ccc2543148041c61a29e883ee4499dc00000000'\n > c.pushtx(tx3)\n {'status': 'success', 'data': {'network': 'LTCTEST', 'txid': '51d5be05d0a35ef5a8ff5f43855ea59e8361874aff1039d6cf5d9a1f93ae1042'}}\n\n\nIt's also possible to mix segwit inputs with non-segwit inputs. Only one input needs to be marked as segwit \nto create a segwit transaction.\n\n### Segregated Witness - Faster Way:\n\nSend 0.23486583 LTC to LPZd11JyAd6fJh5ZBMcmu6qczV14CZnz55 from segwit address 3P1bEPk5v4CUhvX9VqDuxqJGnTutt9czZb, \nreturning change to LchaMS51XFYmks3fJLAyuSeYSbiyByPLUD:\n \n >from cryptos import *\n >l = Litecoin()\n l.send(\"\", \"LNM9Hpc6EFd7SsKkPU6ATLJNdXSNPnNdqs\", 23486583, fee=20000, change_addr=\"LchaMS51XFYmks3fJLAyuSeYSbiyByPLUD\", segwit=True)\n {'status': 'success', 'data': {'network': 'LTC', 'txid': '3b936180daf05adcd7e9f04b60e1ba9a4a6db486c0ad91cb795b29ca46313000'}}\n\nIt's also possible to provide the send address in addition to the private key in which case segwit will be \nauto-detected, so no need to know in advance if the address is segwit or not:\n \n >from cryptos import *\n >c = Bitcoin()\n >c.send('', '1CBFPfNotcVcWg26WdhfnoDDvZqzuBxKDb', 88036480, addr=\"3AGe5CkW5CKFAgKpQE82VSWkEjoxfDxMxQ\")\n {'status': 'success', 'data': {'network': 'LTC', 'txid': 'b16ad0332ca3114f0dc773fda643c49e41308df4204940539bea5806cfee0989'}}\n\n### 2-of-3 MultiSig Transaction example:\n > from cryptos import *\n > coin = Bitcoin(testnet=True)\n > publickeys = ['02e5c473c051dae31043c335266d0ef89c1daab2f34d885cc7706b267f3269c609', '0391ed6bf1e0842997938ea2706480a7085b8bb253268fd12ea83a68509602b6e0', '0415991434e628402bebcbaa3261864309d2c6fd10c850462b9ef0258832822d35aa26e62e629d2337e3716784ca6c727c73e9600436ded7417d957318dc7a41eb']\n > script, address = coin.mk_multsig_address(publickeys, 2)\n > script\n '522102e5c473c051dae31043c335266d0ef89c1daab2f34d885cc7706b267f3269c609210391ed6bf1e0842997938ea2706480a7085b8bb253268fd12ea83a68509602b6e0410415991434e628402bebcbaa3261864309d2c6fd10c850462b9ef0258832822d35aa26e62e629d2337e3716784ca6c727c73e9600436ded7417d957318dc7a41eb53ae'\n > address\n '2ND6ptW19yaFEmBa5LtEDzjKc2rSsYyUvqA'\n > tx = coin.preparetx(address, \"myLktRdRh3dkK3gnShNj5tZsig6J1oaaJW\", 1100000, 50000)\n > for i in range(0, len(tx['ins'])):\n sig1 = coin.multisign(tx, i, script, \"cUdNKzomacP2631fa5Q4yHv2fADc8Ueymr5Z5NUSJjVM13igcVJk\")\n sig3 = coin.multisign(tx, i, script, \"cMrziExc6iMV8vvAML8QX9hGDP8zNhcsKbdS9BqrRa1b4mhKvK6f\")\n tx = apply_multisignatures(tx, i, script, sig1, sig3)\n > tx\n '0100000001e62c0b5434108607f52856bfbcf5093363fbd4789141a661a4c6c8042769ed2001000000fd1d0100483045022100dfc75916f6bb5c5b72a45dea44dbc45b47ba90912efb84680a373acadb3b1212022022dbbd66e4871624609d875bdb592d11335eb4ec49c7b87bb0b8bc76f72f80f30147304402204c38cab196ec0e82a9f65ecba70a0dbf73f49e5886e1000b9bc52894e28fa5c9022007bff3f90bcece19036625806d4d1951a03c256627163f1ac4e76a6ee8eae072014c89522102e5c473c051dae31043c335266d0ef89c1daab2f34d885cc7706b267f3269c609210391ed6bf1e0842997938ea2706480a7085b8bb253268fd12ea83a68509602b6e0410415991434e628402bebcbaa3261864309d2c6fd10c850462b9ef0258832822d35aa26e62e629d2337e3716784ca6c727c73e9600436ded7417d957318dc7a41eb53aeffffffff02e0c81000000000001976a914c384950342cb6f8df55175b48586838b03130fad88ac301224030000000017a914d9cbe7c2c507c306f4872cf965cbb4fe51b621998700000000'\n > coin.pushtx(tx)\n {'status': 'success', 'data': {'txid': 'b64e19311e3aa197063e03657679e2974e04c02c5b651c4e8d55f428490ab75f', 'network': 'BTCTEST'}}\n\n\n### Supported coins\n\n > from cryptos import *\n > priv = sha256('a big long brainwallet password')\n > b = Bitcoin()\n > b.privtoaddr(priv)\n '1GnX7YYimkWPzkPoHYqbJ4waxG6MN2cdSg'\n > b = Bitcoin(testnet=True)\n > b.privtoaddr(priv)\n 'mwJUQbdhamwemrsR17oy7z9upFh4JtNxm1'\n > l = Litecoin()\n > l.privtoaddr(priv)\n 'Lb1UNkrYrQkTFZ5xTgpta61MAUTdUq7iJ1'\n > l = Litecoin(testnet=True)\n > l.privtoaddr(priv)\n 'mwJUQbdhamwemrsR17oy7z9upFh4JtNxm1'\n > c = BitcoinCash()\n > c.privtoaddr(priv)\n '1GnX7YYimkWPzkPoHYqbJ4waxG6MN2cdSg'\n > c = BitcoinCash(testnet=True)\n > c.privtoaddr(priv)\n 'mwJUQbdhamwemrsR17oy7z9upFh4JtNxm1'\n > d = Dash()\n > d.privtoaddr(priv)\n 'XrUMwoCcjTiz9gzP9S9p9bdNnbg3MvAB1F'\n > d = Dash(testnet=True)\n > d.privtoaddr(priv)\n 'yc6xxkH4B1P4VRuviHUDBd3j4tAQpy4fzn'\n d = Doge()\n d.privtoaddr(priv)\n 'DLvceoVN5AQgXkaQ28q9qq7BqPpefFRp4E'\n\n### Load an Electrum words list wallet:\n > import os\n > from cryptos import *\n > words = entropy_to_words(os.urandom(16))\n > words\n 'float skirt road remind fire antique vendor select senior latin small glide'\n > seed = mnemonic_to_seed(words)\n > seed\n b'\\xb7Z\\x9b\\x9b\\x9c\\x1bq\\x81\\x1b\\xdc\\x98\\x1c\\xbc\\xb8\\xbb\\x130\\xea,\\xda\\x14\\xeb\\x9bF\\xafu\\x88\\xc2\\xf9\\xfc\\x7f\\xd0\\xb0?\\x9d\\xf3\\xa7$0Tx\\xd3\\xb7\\x82\\x87U\\xe7\\xcc\\xdd\\x16\\xddd\\xbf'T\\t_\\xdc R!x\\t'\n > electrum_privkey(seed, 0)\n '5a37812b3057e44636c6e07023e16a8669e12a4365dfabbcb376ed272081d522'\n > electrum_privkey(seed, 300, 0)\n '04cf414f200cd090239f2116d90608a74eae34ae21103ca9eef7bd9579e48bed'\n > electrum_privkey(seed, 0, 1) #Change address\n '9ca3631f813a6f81b70fbfc4384122bfe6fb159e6f7aea2811fe968c2a39d42a'\n \nIf an application only needs to receive coins and not spend, there is no need to have a copy of the words, seeds or \nprivate keys on the server, as if the server is hacked, the coins will be stolen. Instead, store the master public key and\ngenerate addresses based on that. The wallet words can be used to spend the coins on a separate cold storage machine.\n\n > import os\n > from cryptos import *\n > words = entropy_to_words(os.urandom(16))\n > words\n 'shield industry dose token network define slow under omit castle dinosaur afford'\n > seed = mnemonic_to_seed(words)\n > seed\n b'\\xe1\\xa2R\\xddV\\xd1\\xed\\x84\\xdd\\x82d\\xe7\\xd6\\xdcII\\xa4\\x7f([\\xc4\\xaem\\x0c\\x8a\\xe8F\\x1b6\\xd6\\xab\\xda}\\x02\\xa4>\\x03=\\x83\\xae&\\x14\\x908\\xcdc\\x10U\\xf9\\xe7. master_public_key = electrum_mpk(seed)\n > master_public_key\n '9ea7e2f83bbf1c3ece4b120ddc3f142117c6c9d82d1b08ad0f54a91f3f0b938c587cb3edf7d54eba1eacc205b3890296fd58ec1b155021ac4d829a1288b24ce1'\n \n # Safe to store the mpk on the web server and generate addresses on demand:\n > from cryptos import *\n > coin = Bitcoin()\n > master_public_key = '9ea7e2f83bbf1c3ece4b120ddc3f142117c6c9d82d1b08ad0f54a91f3f0b938c587cb3edf7d54eba1eacc205b3890296fd58ec1b155021ac4d829a1288b24ce1'\n > addr = coin.electrum_address(master_public_key, 0, 0)\n > addr\n '1GEHJopN3F5EgZozEbu6fyp4A6CQMAvyTZ'\n > change_addr = coin.electrum_address(master_public_key, 0, 1)\n > change_addr\n '1AF6A7YD6fJnFUHX3mcmGeHs4MN9aFjp7X'\n \n # Then to recover the coins on the cold storage machine:\n > words = 'shield industry dose token network define slow under omit castle dinosaur afford'\n > seed = mnemonic_to_seed(words)\n > priv = electrum_privkey(seed, 0, 0)\n > priv\n '1120fb42302e05fbbdd55fefb7bc3ae075ce77ae9328672ee46b1f4af1d68189'\n > change_priv = electrum_privkey(seed, 0, 1)\n > change_priv\n '29a6f2d3de33f79bb6e39753ce2a366ff7e6034f62c2809cfe501f3bb2580fe5'\n > assert privtoaddr(priv) == '1GEHJopN3F5EgZozEbu6fyp4A6CQMAvyTZ'\n > assert privtoaddr(change_priv) == '1AF6A7YD6fJnFUHX3mcmGeHs4MN9aFjp7X'\n \n\n### The cryptotool command line interface:\n\n cryptotool random_electrum_seed\n 484ccb566edb66c65dd0fd2e4d90ef65\n\n cryptotool electrum_privkey 484ccb566edb66c65dd0fd2e4d90ef65 0 0\n 593240c2205e7b7b5d7c13393b7c9553497854b75c7470b76aeca50cd4a894d7\n\n cryptotool electrum_mpk 484ccb566edb66c65dd0fd2e4d90ef65\n 484e42865b8e9a6ea8262fd1cde666b557393258ed598d842e563ad9e5e6c70a97e387eefdef123c1b8b4eb21fe210c6216ad7cc1e4186fbbba70f0e2c062c25\n\n cryptotool bip32_master_key 21456t243rhgtucyadh3wgyrcubw3grydfbng\n xprv9s21ZrQH143K2napkeoHT48gWmoJa89KCQj4nqLfdGybyWHP9Z8jvCGzuEDv4ihCyoed7RFPNbc9NxoSF7cAvH9AaNSvepUaeqbSpJZ4rbT\n\n cryptotool bip32_ckd xprv9s21ZrQH143K2napkeoHT48gWmoJa89KCQj4nqLfdGybyWHP9Z8jvCGzuEDv4ihCyoed7RFPNbc9NxoSF7cAvH9AaNSvepUaeqbSpJZ4rbT 0\n xprv9vfzYrpwo7QHFdtrcvsSCTrBESFPUf1g7NRvayy1QkEfUekpDKLfqvHjgypF5w3nAvnwPjtQUNkyywWNkLbiUS95khfHCzJXFkLEdwRepbw \n\n cryptotool bip32_privtopub xprv9s21ZrQH143K2napkeoHT48gWmoJa89KCQj4nqLfdGybyWHP9Z8jvCGzuEDv4ihCyoed7RFPNbc9NxoSF7cAvH9AaNSvepUaeqbSpJZ4rbT\n xpub661MyMwAqRbcFGfHrgLHpC5R4odnyasAZdefbDkHBcWarJcXh6SzTzbUkWuhnP142ZFdKdAJSuTSaiGDYjvm7bCLmA8DZqksYjJbYmcgrYF\n\nThe -s option lets you read arguments from the command line\n\n cryptotool sha256 'some big long brainwallet password' | pybtctool -s privtoaddr | pybtctool -s history\n [{'output': u'97f7c7d8ac85e40c255f8a763b6cd9a68f3a94d2e93e8bfa08f977b92e55465e:0', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}, {'output': u'4cc806bb04f730c445c60b3e0f4f44b54769a1c196ca37d8d4002135e4abd171:1', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}]\n cryptotool random_electrum_seed | pybtctool -s electrum_privkey 0 0\n 593240c2205e7b7b5d7c13393b7c9553497854b75c7470b76aeca50cd4a894d7\n\nThe -b option lets you read binary data as an argument\n\n cryptotool sha256 123 | pybtctool -s changebase 16 256 | pybtctool -b changebase 256 16\n a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae30a\n\nThe -j option lets you read json from the command line (-J to split a json list into multiple arguments)\n\n cryptotool unspent 1FxkfJQLJTXpW6QmxGT6oF43ZH959ns8Cq | pybtctool -j select 200000001 | pybtctool -j mksend 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P:20000 1FxkfJQLJTXpW6QmxGT6oF43ZH959ns8Cq 1000 | pybtctool -s signall 805cd74ca322633372b9bfb857f3be41db0b8de43a3c44353b238c0acff9d523\n 0100000003d5001aae8358ae98cb02c1b6f9859dc1ac3dbc1e9cc88632afeb7b7e3c510a49000000008b4830450221009e03bb6122437767e2ca785535824f4ed13d2ebbb9fa4f9becc6d6f4e1e217dc022064577353c08d8d974250143d920d3b963b463e43bbb90f3371060645c49266b90141048ef80f6bd6b073407a69299c2ba89de48adb59bb9689a5ab040befbbebcfbb15d01b006a6b825121a0d2c546c277acb60f0bd3203bd501b8d67c7dba91f27f47ffffffff1529d655dff6a0f6c9815ee835312fb3ca4df622fde21b6b9097666e9284087d010000008a473044022035dd67d18b575ebd339d05ca6ffa1d27d7549bd993aeaf430985795459fc139402201aaa162cc50181cee493870c9479b1148243a33923cb77be44a73ca554a4e5d60141048ef80f6bd6b073407a69299c2ba89de48adb59bb9689a5ab040befbbebcfbb15d01b006a6b825121a0d2c546c277acb60f0bd3203bd501b8d67c7dba91f27f47ffffffff23d5f9cf0a8c233b35443c3ae48d0bdb41bef357b8bfb972336322a34cd75c80010000008b483045022014daa5c5bbe9b3e5f2539a5cd8e22ce55bc84788f946c5b3643ecac85b4591a9022100a4062074a1df3fa0aea5ef67368d0b1f0eaac520bee6e417c682d83cd04330450141048ef80f6bd6b073407a69299c2ba89de48adb59bb9689a5ab040befbbebcfbb15d01b006a6b825121a0d2c546c277acb60f0bd3203bd501b8d67c7dba91f27f47ffffffff02204e0000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac5b3c4411000000001976a914a41d15ae657ad3bfd0846771a34d7584c37d54a288ac00000000\n\nFun stuff with json:\n\n cryptotool unspent 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P | pybtctool -j multiaccess value | pybtctool -j sum\n 625216206372\n\n cryptotool unspent 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P | pybtctool -j count\n 6198\n\nTo use the testnet you can add --testnet:\n\n cryptotool unspent 2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF --testnet\n [{\"output\": \"209e5caf8997a3caed4dce0399804ad7fa50c70f866bb7118a42c79de1b76efc:1\", \"value\": 120000000}, {\"output\": \"79f38b3e730eea0e44b5a2e645f0979\n 2d9f8732a823079ba4778110657cbe7b2:0\", \"value\": 100000000}, {\"output\": \"99d88509d5f0e298bdb6883161c64c7f54444519ce28a0ef3d5942ff4ff7a924:0\", \"value\n \": 82211600}, {\"output\": \"80acca12cf4b3b562b583f1dc7e43fff936e432a7ed4b16ac3cd10024820d027:0\", \"value\": 192470000}, {\"output\": \"3e5a3fa342c767d524b653aec51f3efe2122644c57340fbf5f79c75d1911ad35:0\", \"value\": 10000000}]\n\nOr the --coin option to use a coin other than bitcoin (bch, btc, dash, doge or ltc)\n\n cryptotool unspent LV3VLesnCi3p3zf26Y86kH2FZxfQq2RjrA --coin ltc\n [{\"output\": \"42bfe7376410696e260b2198f484f5df4aa6c744465940f9922ac9f8589670a4:0\", \"value\": 14282660}]\n\n cryptotool unspent myLktRdRh3dkK3gnShNj5tZsig6J1oaaJW --coin ltc --testnet\n [{\"output\": \"68f9c662503715a3baf29fe4b07c056b0bf6654dbdd9d5393f4d6a18225d0ff3:0\", \"value\": 16333531}, {\"output\": \"aa40041a1fcdb952d6a38594a27529f890d17d715fd54b6914cd6709fa94ca67:0\", \"value\": 100000000}, {\"output\": \"3b72bae956d27ab0ad309808ab76beaf203109f423e533fd7c40f1201672f598:1\", \"value\": 164712303}]\n\nMake and broadcast a transaction on the Bitcoin Cash testnet:\n\n cryptotool send 89d8d898b95addf569b458fbbd25620e9c9b19c9f730d5d60102abbabcb72678 mgRoeWs2CeCEuqQmNfhJjnpX8YvtPACmCX 999950000 --fee 50000 --coin bch --testnet\n {\"status\": \"success\", \"data\": {\"txid\": \"caae4c059ac07827047237560ff44f97c940600f8f0a1e3392f4bcaf91e38c5c\", \"network\": \"tbcc\"}}\n\nThe arguments are the private key of the sender, the receiver's address and the fee (default 10000). Change will be returned to the sender. \n\n### Listing of main coin-specific methods:\n\n* privtopub : (privkey) -> pubkey\n* pubtoaddr : (pubkey) -> address\n* privtoaddr : (privkey) -> address\n* sign : (txobj, i, privkey) -> create digital signature of tx with privkey and add to input i\n* signall : (txobj, privkey) -> create digital signature of tx with privkey for all inputs\n* history : (address) -> tx history and balance of an address\n* unspent : (address) -> unspent outputs for an addresses\n* pushtx : (hex or bin tx) -> push a transaction to the blockchain\n* fetchtx : (txhash) -> fetch a tx from the blockchain\n* txinputs : (txhash) -> fetch inputs from a previous transaction in a format to be re-used as unspents \n* send : (privkey, to, value, fee=10000, change_addr=None, segwit=False, addr=None) -> create and a push a simple transaction to send coins to an address and return change to the change address or sender\n* sendmultitx : (privkey, to:value pairs, fee=10000, change_addr=None, segwit=False, addr=None) -> create and a push a transaction to send coins to multiple addresses and return change to the change address or sender\n* preparetx : (frm, to, value, fee, change_addr=None, segwit=False): -> create unsigned txobj with change output\n* preparemultitx : (frm, to:value pairs, fee, change_addr=None, segwit=False): -> create unsigned txobj with multiple outputs and additional change output\n* preparesignedtx : (privkey, to, value, fee=10000, change_addr=None, segwit=False, addr=None) -> create signed txobj with change output\n* preparesignedmultitx : (privkey, *args, change_addr=None, segwit=False, addr=None) -> create signed txobj with multiple outputs and additional change output\n* mktx : (inputs, outputs) -> create unsigned txobj\n* mksend : (inputs, outputs, change_addr, fee, segwit) -> create unsigned txobj\n* mk_multisig_address : (pubkeys, M) -> Returns both M-of-N multsig script and address pubkeys\n* pubtop2w : (pub) -> pay to witness script hash (segwit address)\n* privtop2w : (priv) -> pay to witness script hash (segwit address)\n* is_address : (addr) -> true if addr is a valid address for this network\n* is_p2sh : (addr) -> true if addr is a pay to script hash for this network\n* is_segwit : (priv, addr) -> true if priv-addr pair represent a pay to witness script hash\n* current_block_height : () -> Latest block height\n* block_height : (txhash) -> Block height containing the txhash\n* inspect : (tx_hex) -> Deserialize a transaction and decode and ins and outs\n* merkle_prove : (txhash) -> Proves a transaction is valid and returns txhash, merkle siblings and block header.\n\n### Listing of main non-coin specific commands:\n\n* add : (key1, key2) -> key1 + key2 (works on privkeys or pubkeys)\n* multiply : (pubkey, privkey) -> returns pubkey * privkey\n\n* ecdsa_sign : (message, privkey) -> sig\n* ecdsa_verify : (message, sig, pubkey) -> True/False\n* ecdsa_recover : (message, sig) -> pubkey\n\n* random_key : () -> privkey\n* random_electrum_seed : () -> electrum seed\n\n* electrum_stretch : (seed) -> secret exponent\n* electrum_privkey : (seed or secret exponent, i, type) -> privkey\n* electrum_mpk : (seed or secret exponent) -> master public key\n* electrum_pubkey : (seed or secexp or mpk) -> pubkey\n\n* bip32_master_key : (seed) -> bip32 master key\n* bip32_ckd : (private or public bip32 key, i) -> child key\n* bip32_privtopub : (private bip32 key) -> public bip32 key\n* bip32_extract_key : (private or public bip32_key) -> privkey or pubkey\n\n* deserialize : (hex or bin transaction) -> JSON tx\n* serialize : (JSON tx) -> hex or bin tx\n* multisign : (txobj, i, script, privkey) -> signature\n* apply_multisignatures: (txobj, i, script, sigs) -> tx with index i signed with sigs\n* scriptaddr : (script) -> P2SH address\n* mk_multisig_script : (pubkeys, M) -> M-of-N multisig script from pubkeys\n* verify_tx_input : (tx, i, script, sig, pub) -> True/False\n* tx_hash : (hex or bin tx) -> hash\n\n* access : (json list/object, prop) -> desired property of that json object\n* multiaccess : (json list, prop) -> like access, but mapped across each list element\n* slice : (json list, start, end) -> given slice of the list\n* count : (json list) -> number of elements\n* sum : (json list) -> sum of all values\n\n* select : (unspent, value) -> returns list of unspents which are enough to cover the value\n\n### Another reminder and useful links\nAnother reminder, if you are doing something new with the library, whether a regular transaction, multisig,\nsegwit or a coin you haven't worked with before, try it out in testnet first or alternatively with small amounts\non the mainnet. The original pybitcointools had issues opened in Github where people lost money either due to \nnot understanding what they were doing or because of bugs. \n\nHere are some links to testnet faucets:\n\nhttps://testnet.manu.backend.hamburg/faucet\n\nhttps://testnet.manu.backend.hamburg/bitcoin-cash-faucet\n\nhttp://test.faucet.masternode.io/\n\nhttps://faucet.thonguyen.net/ltc\n\nhttp://testnet.litecointools.com/\n\nAnyone know a working Dogecoin testnet faucet, or willing to send testnet coins to address \nnmfnMVSjfyfiv37HtbphRbLgMPUHQE7QdP so I can test? (Dogecoin mainnet is tested).", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/primal100/pybitcointools", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "cryptos", "package_url": "https://pypi.org/project/cryptos/", "platform": "", "project_url": "https://pypi.org/project/cryptos/", "project_urls": { "Homepage": "http://github.com/primal100/pybitcointools" }, "release_url": "https://pypi.org/project/cryptos/1.36/", "requires_dist": null, "requires_python": "", "summary": "Python Crypto Coin Tools", "version": "1.36" }, "last_serial": 3482043, "releases": { "0.7": [ { "comment_text": "", "digests": { "md5": "9f09dc84c3dfba7030a0005d4d4ed5e5", "sha256": "c4de2a979ee0891919186a978b0dfce59426ae982a8996a361e3bb5685d170a1" }, "downloads": -1, "filename": "cryptos-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "9f09dc84c3dfba7030a0005d4d4ed5e5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 59889, "upload_time": "2018-01-07T00:52:10", "url": "https://files.pythonhosted.org/packages/7d/46/dc269e3269a9eed9107e1678d8305829d39f801ceb958196c748dcf8b62a/cryptos-0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9314fcffa51b1cd86637cd74fa9fed56", "sha256": "265986425b602dfa8e8c1eceb0c5967c8a361a94d111ca58c4a8c5f0291c20bf" }, "downloads": -1, "filename": "cryptos-0.7.tar.gz", "has_sig": false, "md5_digest": "9314fcffa51b1cd86637cd74fa9fed56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32676, "upload_time": "2018-01-07T00:52:08", "url": "https://files.pythonhosted.org/packages/03/b3/81d76361cf3ad5a1c31aed4c8cf57be5ab1a783785f42d4c60c439dec2ca/cryptos-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "fa217a715afda54e0f5852b1d4abfa02", "sha256": "3d3166a3f02790eb835111ebe8ceb9235b9cf04f493c163cee49eb660d9512d8" }, "downloads": -1, "filename": "cryptos-0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "fa217a715afda54e0f5852b1d4abfa02", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 52927, "upload_time": "2018-01-07T01:05:52", "url": "https://files.pythonhosted.org/packages/70/52/2edc20fb2fb79837a05d11f9fbe6bf34f3172da3f16fe02311b005097bae/cryptos-0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ac4cbb484fbe5eb7a9a29f552edc08b", "sha256": "34490ce1b6b8fd7db980d683dd53f1498503acfe57178c1db14a2cd6cced6830" }, "downloads": -1, "filename": "cryptos-0.8.tar.gz", "has_sig": false, "md5_digest": "8ac4cbb484fbe5eb7a9a29f552edc08b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40875, "upload_time": "2018-01-07T01:05:50", "url": "https://files.pythonhosted.org/packages/8e/e2/7f0990c25cd6a79d7b0ab06f9482e07c6ab99e34456a0dd80426c5b9e590/cryptos-0.8.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "05e0c649616ac20f31a9ee6cde0f32e0", "sha256": "e01d40b0a03306ed013aa00ea0845d954725570918140827d71038f817806b67" }, "downloads": -1, "filename": "cryptos-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "05e0c649616ac20f31a9ee6cde0f32e0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 52927, "upload_time": "2018-01-07T01:07:11", "url": "https://files.pythonhosted.org/packages/9e/34/a5d279136d202ab2ef094613f2c1cc572a4921ceec1454b7d39d82acff35/cryptos-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94a5b94587b77d4d08b47bcea8a3d3ab", "sha256": "96760fc28b3f2fcc50370da43cebf084bad4b3bafac01dfba0e58082153c9e1d" }, "downloads": -1, "filename": "cryptos-1.1.tar.gz", "has_sig": false, "md5_digest": "94a5b94587b77d4d08b47bcea8a3d3ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40869, "upload_time": "2018-01-07T01:07:09", "url": "https://files.pythonhosted.org/packages/63/a2/bbfa5b2d8e00e0e117fe44656b97e29be2a45ae7522286d1d9d7328577ae/cryptos-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "e7a063e8f3470ad789c59c4103c321c5", "sha256": "5324fbb8ec99da5a14b7f3b3f89b264b63cd1b7cee682d1649fe03438cd5c36a" }, "downloads": -1, "filename": "cryptos-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e7a063e8f3470ad789c59c4103c321c5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 56407, "upload_time": "2018-01-08T01:08:21", "url": "https://files.pythonhosted.org/packages/cb/a5/6f6dc410f63ce2bcb446497ec42ca4e9cc63f7b7952d204e261cab6ca8aa/cryptos-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cd13f29e356006145917c1250a2db91", "sha256": "1c199d896185a176bb254908bd0bd63c8f325cce5df2f6691390bd0954324bbe" }, "downloads": -1, "filename": "cryptos-1.2.tar.gz", "has_sig": false, "md5_digest": "0cd13f29e356006145917c1250a2db91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43080, "upload_time": "2018-01-08T01:08:19", "url": "https://files.pythonhosted.org/packages/07/5b/45d8f466ee91a453f7d273cc5b8cd428d4f65009b85af9e59692bb921342/cryptos-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "bd43c918b10332501bbb214c02490bf7", "sha256": "df24f762783932fadacdb275f366d69f063afaec9ac62e31cfc65ba091c78867" }, "downloads": -1, "filename": "cryptos-1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bd43c918b10332501bbb214c02490bf7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 56217, "upload_time": "2018-01-08T14:36:40", "url": "https://files.pythonhosted.org/packages/1d/65/6559e806b7a243d37adfb8e19508d3956305621bbc01f78872ffcbd76601/cryptos-1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d1665ce2763ed89c602317cc48fb1a4b", "sha256": "1da357173e72dcacf28550c20bd46717e187c13b69c88aa9230cab2b7431dfed" }, "downloads": -1, "filename": "cryptos-1.3.tar.gz", "has_sig": false, "md5_digest": "d1665ce2763ed89c602317cc48fb1a4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43204, "upload_time": "2018-01-08T14:36:37", "url": "https://files.pythonhosted.org/packages/8a/31/bd58482c44e0f564a1454dd45ae7c252cc7004a019b4172f857425d2f9b2/cryptos-1.3.tar.gz" } ], "1.32": [ { "comment_text": "", "digests": { "md5": "1bb97b5d94901c7b65cee2bd3a03a989", "sha256": "0931da34f8161c3ce63076697372bcd2dbe79b284e6ca203900b706d4f8e0044" }, "downloads": -1, "filename": "cryptos-1.32-py3-none-any.whl", "has_sig": false, "md5_digest": "1bb97b5d94901c7b65cee2bd3a03a989", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 59182, "upload_time": "2018-01-09T13:14:41", "url": "https://files.pythonhosted.org/packages/0d/d1/8275af96983f2b8257d957fd588cd7bd9c757d6b4e4acf4fe39d8f29289b/cryptos-1.32-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "beffde6914c0a58a18ae8592762fb380", "sha256": "fd60aef8fd8b37dde26b14e8b6ed8d7ad2d9d922fdf3bde905b904d2f6199066" }, "downloads": -1, "filename": "cryptos-1.32.tar.gz", "has_sig": false, "md5_digest": "beffde6914c0a58a18ae8592762fb380", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51319, "upload_time": "2018-01-09T13:14:39", "url": "https://files.pythonhosted.org/packages/1a/cb/15bd310177cfd2b857a0ca657522627f689d43f40d0596910c0ab9fa9298/cryptos-1.32.tar.gz" } ], "1.33": [ { "comment_text": "", "digests": { "md5": "a35c3a9c83c6a6c87b4fdcf475d7aa14", "sha256": "f008ed143179586a2b655846bae1a55d92cb0847100663041feb98fd1048cd48" }, "downloads": -1, "filename": "cryptos-1.33-py3-none-any.whl", "has_sig": false, "md5_digest": "a35c3a9c83c6a6c87b4fdcf475d7aa14", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 61867, "upload_time": "2018-01-09T18:49:48", "url": "https://files.pythonhosted.org/packages/3e/8f/0585975173f43ea49320e0f971f1216648ce65fb423f72881c481f3a8b3a/cryptos-1.33-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88cf9b2c660b8b9833253687d2bf81a9", "sha256": "3e665555ac5b7404c38a557866293a19cbe5bb7cad4c7ce6cf407642cf7b1863" }, "downloads": -1, "filename": "cryptos-1.33.tar.gz", "has_sig": false, "md5_digest": "88cf9b2c660b8b9833253687d2bf81a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54555, "upload_time": "2018-01-09T18:49:45", "url": "https://files.pythonhosted.org/packages/0a/f1/ad79daf0d247830d87213607258b7ea3472e88affebfd4b77dc57d4c3ab9/cryptos-1.33.tar.gz" } ], "1.34": [ { "comment_text": "", "digests": { "md5": "f2e24400ee649c29d4d0bc08738fc07a", "sha256": "53cf8f3190816d78659060ec0f72a69fa883615ef0a23a8453ff7dae6ce473d7" }, "downloads": -1, "filename": "cryptos-1.34-py3-none-any.whl", "has_sig": false, "md5_digest": "f2e24400ee649c29d4d0bc08738fc07a", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 63983, "upload_time": "2018-01-09T19:29:54", "url": "https://files.pythonhosted.org/packages/41/39/bed80ac0760656a4f005ebc739df5f8ba8ad208b8c1cf6c4eaf137c7e628/cryptos-1.34-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da3a91e6276c23a36ff7af654d589dc1", "sha256": "33a02e91c11899bace959afca7a29e09803d0dac48fa1ee37064210eb317ba02" }, "downloads": -1, "filename": "cryptos-1.34.tar.gz", "has_sig": false, "md5_digest": "da3a91e6276c23a36ff7af654d589dc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57084, "upload_time": "2018-01-09T19:29:51", "url": "https://files.pythonhosted.org/packages/fd/ab/e2fc6db6511f3c4714118cf0effaae151bff030904c5a210c0b9a1ad3317/cryptos-1.34.tar.gz" } ], "1.35": [ { "comment_text": "", "digests": { "md5": "757e296e495a6611503fdcbc6b2c6812", "sha256": "9f9a4d0c4510559d4f511cd38cd10ca1da511f18fcb67027fd06c77ff26391c2" }, "downloads": -1, "filename": "cryptos-1.35-py3-none-any.whl", "has_sig": false, "md5_digest": "757e296e495a6611503fdcbc6b2c6812", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 66076, "upload_time": "2018-01-10T01:20:25", "url": "https://files.pythonhosted.org/packages/b1/9a/43842aa326d2539700cda38a1426df5971e04a0332d01064119c4bfb5b05/cryptos-1.35-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24841369cb78726b255a57a219bcabee", "sha256": "bfaa4a2619347786155f86cfd079dc5dedefba82f2b0269908738c39c4ea6587" }, "downloads": -1, "filename": "cryptos-1.35.tar.gz", "has_sig": false, "md5_digest": "24841369cb78726b255a57a219bcabee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63371, "upload_time": "2018-01-10T01:20:21", "url": "https://files.pythonhosted.org/packages/b5/ed/c6c3e2f9f7b493b834041c8e1e72d86e2619321dea0784c1323795c8ce63/cryptos-1.35.tar.gz" } ], "1.36": [ { "comment_text": "", "digests": { "md5": "97667a401f69a03982f5cc6541a774c3", "sha256": "485fa0101918f00418952946fea3aa2a1f61c42ef6508cd9eb5db6f5def8d37e" }, "downloads": -1, "filename": "cryptos-1.36-py3-none-any.whl", "has_sig": false, "md5_digest": "97667a401f69a03982f5cc6541a774c3", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 69101, "upload_time": "2018-01-11T20:50:36", "url": "https://files.pythonhosted.org/packages/43/44/59489e6c6dfc446248bd2da875c2b93b54154fe6b2be214b44585ce66ce6/cryptos-1.36-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cb8ccbba5b653bf86e539c16589c93dd", "sha256": "cd316709038210fa0bde878db59e8f82716564b7679cdc5a1c34f58efa63f2df" }, "downloads": -1, "filename": "cryptos-1.36.tar.gz", "has_sig": false, "md5_digest": "cb8ccbba5b653bf86e539c16589c93dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71701, "upload_time": "2018-01-11T20:50:33", "url": "https://files.pythonhosted.org/packages/8a/fe/36a15bdfac58c6f1fc0697758d4c34bb42fa3da33eb83e8f614ec5f6670a/cryptos-1.36.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "97667a401f69a03982f5cc6541a774c3", "sha256": "485fa0101918f00418952946fea3aa2a1f61c42ef6508cd9eb5db6f5def8d37e" }, "downloads": -1, "filename": "cryptos-1.36-py3-none-any.whl", "has_sig": false, "md5_digest": "97667a401f69a03982f5cc6541a774c3", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 69101, "upload_time": "2018-01-11T20:50:36", "url": "https://files.pythonhosted.org/packages/43/44/59489e6c6dfc446248bd2da875c2b93b54154fe6b2be214b44585ce66ce6/cryptos-1.36-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cb8ccbba5b653bf86e539c16589c93dd", "sha256": "cd316709038210fa0bde878db59e8f82716564b7679cdc5a1c34f58efa63f2df" }, "downloads": -1, "filename": "cryptos-1.36.tar.gz", "has_sig": false, "md5_digest": "cb8ccbba5b653bf86e539c16589c93dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71701, "upload_time": "2018-01-11T20:50:33", "url": "https://files.pythonhosted.org/packages/8a/fe/36a15bdfac58c6f1fc0697758d4c34bb42fa3da33eb83e8f614ec5f6670a/cryptos-1.36.tar.gz" } ] }