citp / blocksci Goto Github PK
View Code? Open in Web Editor NEWA high-performance tool for blockchain science and exploration
Home Page: https://citp.github.io/BlockSci/
License: GNU General Public License v3.0
A high-performance tool for blockchain science and exploration
Home Page: https://citp.github.io/BlockSci/
License: GNU General Public License v3.0
Our interface for vectorized operations currently returns python lists. It would be more efficient to return numpy arrays which would avoid instantiating each returned object in python.
Currently BlockSci does not have segwit support and segfaults when attempting to process a block which includes segwit transactions.
Adding Segwit support to BlockSci involves a number of changes to both the parser and analysis library.
Adding support to the parser to handle the Segwit serialization format is trivial and has already been completed on a private branch. The more complex issue is how to internally handle Segwit scripts.
A solution which has been mapped out, but is still being implemented is to codify in the codebase a distinction between address type and script type. Output scripts can be viewed at two levels of abstraction:
Splitting up the current Address and Script modules to operate explicitly under one or the other of these two models will allow BlockSci to easily expand to handle the new Segwit addresses while maintaining clean layers of abstraction.
Hi everyone,
I just read about BlockSci on Freedom To Tinker.
The BlockSci paper primarily concerns cryptocurrencies (if I'm not mistaken) and I was wondering whether or not I could use BlockSci to analyse Hyperledger Burrow and Hyperledger Fabric chains.
I'm currently setting up both chains for use in my graduate project. Both Burrow and Fabric expose an RPC API which could possibly be parsed by BlockSci. Or, if adjusting the RPC parser would be simple, in which case I would gladly do a PR with the extended functionality.
If I misunderstood anything please correct.
Greetings, Robert.
Whenever I try to access the wrapped_script
of a P2SH input I obtain this error:
TypeError: Unable to convert function return value to a Python type! The signature was
(arg0: blocksci.blocksci_interface.PayToScriptHashScript) -> Optional[blocksci::AnyScript]
I'm not sure if I am doing something wrong or this is a bug in Blocksci's code.
For instance, this code generates the abovementioned error:
tx0 = blocksci.Tx("e5779b9e78f9650debc2893fd9636d827b26b4ddfa6a8172fe8708c924f5c39d")
for txin in tx0.ins:
print(txin.address_type)
print(txin.address.script)
print(txin.address.script.wrapped_script)
The result of executing the code is:
Pay to script hash
P2SHAddress(address=37paP4uTjmA4Pi85LG6CF9huift3Dw1kFT, wrappedAddress=NonStandardScript())
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-115-1d098e8f187e> in <module>()
5 print(txin.address.script)
----> 6 print(txin.address.script.wrapped_script)
TypeError: Unable to convert function return value to a Python type! The signature was
(arg0: blocksci.blocksci_interface.PayToScriptHashScript) -> Optional[blocksci::AnyScript]
So it correctly prints the address_type
and script
, but fails to show the wrapped script. This also happens with multisig scripts encapsulated in P2SH (not only with non standard ones).
The input of transaction e5779... is spending a P2SH output (the second output of this transaction). The redeem script used to spent the output is PUSHDATA(2)[5357]
, which is what I am trying to recover.
BTW, the tool is great to explore blockchain data, thanks for making it publicly available!
I tried
./BlockSci/release/bin/blocksci_parser --output-directory chain-data update disk --coin-directory .zcash
but it ends up showing
Starting with chain of 0 blocks
Removing 0 blocks
Adding 0 blocks
Updating hash index
...
It's like blocksci is not recognizing the zcash blockchain on my computer. I tried replacing .zcash folder with .litecoin and it works perfectly well. I read the page saying blocksci is supporting zcash, am I misunderstanding something?
Thank you
I'm interested in having a time series of transactions for each address. Something like a block by address matrix that keeps a running total of number of bitcoins each address has. However, it's very slow running a loop over all transactions within a block. Do you have any suggestions to speed this computation up?
I have been able to compile against python3 (.5) and python 3.6
Either way I get an exception after the 'ok' message:
import blocksci
print('ok')
$ python3 test.py
ok
*** Error in `python3': munmap_chunk(): invalid pointer: 0x00007fbafc6ec3b0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fbafd8657e5]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x1a8)[0x7fbafd872698]
/home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so(+0x9cfef)[0x7fbafc6ddfef]
/home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so(+0x9b792)[0x7fbafc6dc792]
/home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so(+0x9b7b1)[0x7fbafc6dc7b1]
/home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so(+0x943da)[0x7fbafc6d53da]
/home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so(+0x943f9)[0x7fbafc6d53f9]
python3[0x4ab8e9]
python3[0x4e9898]
python3[0x4e8365]
python3(PyDict_Clear+0xd6)[0x59b3b6]
python3[0x580796]
python3[0x51860d]
python3(_PyGC_CollectNoFail+0x27)[0x60a9b7]
python3(PyImport_Cleanup+0x24f)[0x523b3f]
python3(Py_Finalize+0x5e)[0x60da0e]
python3(Py_Main+0x646)[0x63fd16]
python3(main+0xe1)[0x4cfeb1]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fbafd80e830]
python3(_start+0x29)[0x5d6049]
======= Memory map: ========
00400000-007a9000 r-xp 00000000 fc:00 2355321 /usr/bin/python3.5
009a9000-009ab000 r--p 003a9000 fc:00 2355321 /usr/bin/python3.5
009ab000-00a42000 rw-p 003ab000 fc:00 2355321 /usr/bin/python3.5
00a42000-00a73000 rw-p 00000000 00:00 0
00c7e000-01bf4000 rw-p 00000000 00:00 0 [heap]
7fbadda6c000-7fbaddaac000 rw-p 00000000 00:00 0
7fbaddaac000-7fbaddaaf000 r-xp 00000000 fc:00 2373788 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_posix.cpython-35m-x86_64-linux-gnu.so
7fbaddaaf000-7fbaddcae000 ---p 00003000 fc:00 2373788 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_posix.cpython-35m-x86_64-linux-gnu.so
7fbaddcae000-7fbaddcaf000 r--p 00002000 fc:00 2373788 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_posix.cpython-35m-x86_64-linux-gnu.so
7fbaddcaf000-7fbaddcb0000 rw-p 00003000 fc:00 2373788 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_posix.cpython-35m-x86_64-linux-gnu.so
7fbaddcb0000-7fbaddcb5000 r-xp 00000000 fc:00 2373790 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_linux.cpython-35m-x86_64-linux-gnu.so
7fbaddcb5000-7fbaddeb4000 ---p 00005000 fc:00 2373790 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_linux.cpython-35m-x86_64-linux-gnu.so
7fbaddeb4000-7fbaddeb5000 r--p 00004000 fc:00 2373790 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_linux.cpython-35m-x86_64-linux-gnu.so
7fbaddeb5000-7fbaddeb6000 rw-p 00005000 fc:00 2373790 /usr/local/lib/python3.5/dist-packages/psutil/_psutil_linux.cpython-35m-x86_64-linux-gnu.so
7fbaddeb6000-7fbade0b6000 rw-p 00000000 00:00 0
7fbade0b6000-7fbade100000 r-xp 00000000 fc:00 2375585 /usr/local/lib/python3.5/dist-packages/_ruamel_yaml.cpython-35m-x86_64-linux-gnu.so
7fbade100000-7fbade2ff000 ---p 0004a000 fc:00 2375585 /usr/local/lib/python3.5/dist-packages/_ruamel_yaml.cpython-35m-x86_64-linux-gnu.so
7fbade2ff000-7fbade303000 rw-p 00049000 fc:00 2375585 /usr/local/lib/python3.5/dist-packages/_ruamel_yaml.cpython-35m-x86_64-linux-gnu.so
7fbade303000-7fbade444000 rw-p 00000000 00:00 0
7fbade444000-7fbade4ad000 r-xp 00000000 fc:00 2375697 /usr/local/lib/python3.5/dist-packages/_regex.cpython-35m-x86_64-linux-gnu.so
7fbade4ad000-7fbade6ac000 ---p 00069000 fc:00 2375697 /usr/local/lib/python3.5/dist-packages/_regex.cpython-35m-x86_64-linux-gnu.so
7fbade6ac000-7fbade6ad000 r--p 00068000 fc:00 2375697 /usr/local/lib/python3.5/dist-packages/_regex.cpython-35m-x86_64-linux-gnu.so
7fbade6ad000-7fbade6b7000 rw-p 00069000 fc:00 2375697 /usr/local/lib/python3.5/dist-packages/_regex.cpython-35m-x86_64-linux-gnu.so
7fbade6b7000-7fbade737000 rw-p 00000000 00:00 0
7fbade737000-7fbade73a000 r-xp 00000000 fc:00 529375 /usr/local/lib/python3.5/dist-packages/Crypto/Cipher/_ARC4.cpython-35m-x86_64-linux-gnu.so
7fbade73a000-7fbade939000 ---p 00003000 fc:00 529375 /usr/local/lib/python3.5/dist-packages/Crypto/Cipher/_ARC4.cpython-35m-x86_64-linux-gnu.so
7fbade939000-7fbade93a000 r--p 00002000 fc:00 529375 /usr/local/lib/python3.5/dist-packages/Crypto/Cipher/_ARC4.cpython-35m-x86_64-linux-gnu.so
7fbade93a000-7fbade93b000 rw-p 00003000 fc:00 529375 /usr/local/lib/python3.5/dist-packages/Crypto/Cipher/_ARC4.cpython-35m-x86_64-linux-gnu.so
7fbade93b000-7fbade94d000 r-xp 00000000 fc:00 529760 /usr/local/lib/python3.5/dist-packages/pandas/_libs/testing.cpython-35m-x86_64-linux-gnu.so
7fbade94d000-7fbadeb4d000 ---p 00012000 fc:00 529760 /usr/local/lib/python3.5/dist-packages/pandas/_libs/testing.cpython-35m-x86_64-linux-gnu.so
7fbadeb4d000-7fbadeb4f000 rw-p 00012000 fc:00 529760 /usr/local/lib/python3.5/dist-packages/pandas/_libs/testing.cpython-35m-x86_64-linux-gnu.so
7fbadeb4f000-7fbadeb8f000 rw-p 00000000 00:00 0
7fbadeb8f000-7fbadeb90000 r-xp 00000000 fc:00 406361 /usr/local/lib/python3.5/dist-packages/pandas/util/_move.cpython-35m-x86_64-linux-gnu.so
7fbadeb90000-7fbaded90000 ---p 00001000 fc:00 406361 /usr/local/lib/python3.5/dist-packages/pandas/util/_move.cpython-35m-x86_64-linux-gnu.so
7fbaded90000-7fbaded91000 rw-p 00001000 fc:00 406361 /usr/local/lib/python3.5/dist-packages/pandas/util/_move.cpython-35m-x86_64-linux-gnu.so
7fbaded91000-7fbadeda7000 r-xp 00000000 fc:00 530815 /usr/local/lib/python3.5/dist-packages/pandas/io/msgpack/_unpacker.cpython-35m-x86_64-linux-gnu.so
7fbadeda7000-7fbadefa7000 ---p 00016000 fc:00 530815 /usr/local/lib/python3.5/dist-packages/pandas/io/msgpack/_unpacker.cpython-35m-x86_64-linux-gnu.so
7fbadefa7000-7fbadefaa000 rw-p 00016000 fc:00 530815 /usr/local/lib/python3.5/dist-packages/pandas/io/msgpack/_unpacker.cpython-35m-x86_64-linux-gnu.so
7fbadefaa000-7fbadefbb000 r-xp 00000000 fc:00 530818 /usr/local/lib/python3.5/dist-packages/pandas/io/msgpack/_packer.cpython-35m-x86_64-linux-gnu.so
7fbadefbb000-7fbadf1ba000 ---p 00011000 fc:00 530818 /usr/local/lib/python3.5/dist-packages/pandas/io/msgpack/_packer.cpython-35m-x86_64-linux-gnu.so
7fbadf1ba000-7fbadf1bc000 rw-p 00010000 fc:00 530818 /usr/local/lib/python3.5/dist-packages/pandas/io/msgpack/_packer.cpython-35m-x86_64-linux-gnu.so
7fbadf1bc000-7fbadf2bc000 rw-p 00000000 00:00 0
7fbadf2bc000-7fbadf2d2000 r-xp 00000000 fc:00 529769 /usr/local/lib/python3.5/dist-packages/pandas/_libs/json.cpython-35m-x86_64-linux-gnu.so
7fbadf2d2000-7fbadf4d2000 ---p 00016000 fc:00 529769 /usr/local/lib/python3.5/dist-packages/pandas/_libs/json.cpython-35m-x86_64-linux-gnu.so
7fbadf4d2000-7fbadf4d3000 rw-p 00016000 fc:00 529769 /usr/local/lib/python3.5/dist-packages/pandas/_libs/json.cpython-35m-x86_64-linux-gnu.so
7fbadf4d3000-7fbadf559000 r-xp 00000000 fc:00 529756 /usr/local/lib/python3.5/dist-packages/pandas/_libs/parsers.cpython-35m-x86_64-linux-gnu.so
7fbadf559000-7fbadf758000 ---p 00086000 fc:00 529756 /usr/local/lib/python3.5/dist-packages/pandas/_libs/parsers.cpython-35m-x86_64-linux-gnu.so
7fbadf758000-7fbadf75f000 rw-p 00085000 fc:00 529756 /usr/local/lib/python3.5/dist-packages/pandas/_libs/parsers.cpython-35m-x86_64-linux-gnu.so
7fbadf75f000-7fbadf7e1000 rw-p 00000000 00:00 0
7fbadf7e1000-7fbadf7f8000 r-xp 00000000 fc:00 529763 /usr/local/lib/python3.5/dist-packages/pandas/_libs/reshape.cpython-35m-x86_64-linux-gnu.so
7fbadf7f8000-7fbadf9f8000 ---p 00017000 fc:00 529763 /usr/local/lib/python3.5/dist-packages/pandas/_libs/reshape.cpython-35m-x86_64-linux-gnu.so
7fbadf9f8000-7fbadf9fb000 rw-p 00017000 fc:00 529763 /usr/local/lib/python3.5/dist-packages/pandas/_libs/reshape.cpython-35m-x86_64-linux-gnu.so
7fbadf9fb000-7fbadfa3b000 rw-p 00000000 00:00 0
7fbadfa3b000-7fbadfad5000 r-xp 00000000 fc:00 529752 /usr/local/lib/python3.5/dist-packages/pandas/_libs/groupby.cpython-35m-x86_64-linux-gnu.so
7fbadfad5000-7fbadfcd4000 ---p 0009a000 fc:00 529752 /usr/local/lib/python3.5/dist-packages/pandas/_libs/groupby.cpython-35m-x86_64-linux-gnu.so
7fbadfcd4000-7fbadfcdb000 rw-p 00099000 fc:00 529752 /usr/local/lib/python3.5/dist-packages/pandas/_libs/groupby.cpython-35m-x86_64-linux-gnu.so
7fbadfcdb000-7fbadfd5c000 rw-p 00000000 00:00 0
7fbadfd5c000-7fbadfe03000 r-xp 00000000 fc:00 529761 /usr/local/lib/python3.5/dist-packages/pandas/_libs/window.cpython-35m-x86_64-linux-gnu.so
7fbadfe03000-7fbae0002000 ---p 000a7000 fc:00 529761 /usr/local/lib/python3.5/dist-packages/pandas/_libs/window.cpython-35m-x86_64-linux-gnu.so
7fbae0002000-7fbae000a000 rw-p 000a6000 fc:00 529761 /usr/local/lib/python3.5/dist-packages/pandas/_libs/window.cpython-35m-x86_64-linux-gnu.so
7fbae000a000-7fbae008c000 rw-p 00000000 00:00 0
7fbae008c000-7fbae0091000 r-xp 00000000 fc:00 2356601 /usr/lib/python3.5/lib-dynload/mmap.cpython-35m-x86_64-linux-gnu.so
7fbae0091000-7fbae0291000 ---p 00005000 fc:00 2356601 /usr/lib/python3.5/lib-dynload/mmap.cpython-35m-x86_64-linux-gnu.so
7fbae0291000-7fbae0292000 r--p 00005000 fc:00 2356601 /usr/lib/python3.5/lib-dynload/mmap.cpython-35m-x86_64-linux-gnu.so
7fbae0292000-7fbae0293000 rw-p 00006000 fc:00 2356601 /usr/lib/python3.5/lib-dynload/mmap.cpython-35m-x86_64-linux-gnu.so
7fbae0293000-7fbae029a000 r-xp 00000000 fc:00 2356621 /usr/lib/python3.5/lib-dynload/_csv.cpython-35m-x86_64-linux-gnu.so
7fbae029a000-7fbae049a000 ---p 00007000 fc:00 2356621 /usr/lib/python3.5/lib-dynload/_csv.cpython-35m-x86_64-linux-gnu.so
7fbae049a000-7fbae049b000 r--p 00007000 fc:00 2356621 /usr/lib/python3.5/lib-dynload/_csv.cpython-35m-x86_64-linux-gnu.so
7fbae049b000-7fbae049d000 rw-p 00008000 fc:00 2356621 /usr/lib/python3.5/lib-dynload/_csv.cpython-35m-x86_64-linux-gnu.so
7fbae049d000-7fbae04dd000 rw-p 00000000 00:00 0
7fbae04dd000-7fbae05c5000 r-xp 00000000 fc:00 529766 /usr/local/lib/python3.5/dist-packages/pandas/_libs/sparse.cpython-35m-x86_64-linux-gnu.so
7fbae05c5000-7fbae07c5000 ---p 000e8000 fc:00 529766 /usr/local/lib/python3.5/dist-packages/pandas/_libs/sparse.cpython-35m-x86_64-linux-gnu.so
7fbae07c5000-7fbae07ca000 rw-p 000e8000 fc:00 529766 /usr/local/lib/python3.5/dist-packages/pandas/_libs/sparse.cpython-35m-x86_64-linux-gnu.so
7fbae07ca000-7fbae09cc000 rw-p 00000000 00:00 0
7fbae09cc000-7fbae0a2e000 r-xp 00000000 fc:00 529753 /usr/local/lib/python3.5/dist-packages/pandas/_libs/period.cpython-35m-x86_64-linux-gnu.so
7fbae0a2e000-7fbae0c2e000 ---p 00062000 fc:00 529753 /usr/local/lib/python3.5/dist-packages/pandas/_libs/period.cpython-35m-x86_64-linux-gnu.so
7fbae0c2e000-7fbae0c35000 rw-p 00062000 fc:00 529753 /usr/local/lib/python3.5/dist-packages/pandas/_libs/period.cpython-35m-x86_64-linux-gnu.so
7fbae0c35000-7fbae0c36000 rw-p 00000000 00:00 0
7fbae0c36000-7fbae0c45000 r-xp 00000000 fc:00 529776 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/frequencies.cpython-35m-x86_64-linux-gnu.so
7fbae0c45000-7fbae0e44000 ---p 0000f000 fc:00 529776 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/frequencies.cpython-35m-x86_64-linux-gnu.so
7fbae0e44000-7fbae0e46000 rw-p 0000e000 fc:00 529776 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/frequencies.cpython-35m-x86_64-linux-gnu.so
7fbae0e46000-7fbae0e87000 rw-p 00000000 00:00 0
7fbae0e87000-7fbae0ecb000 r-xp 00000000 fc:00 529771 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/strptime.cpython-35m-x86_64-linux-gnu.so
7fbae0ecb000-7fbae10cb000 ---p 00044000 fc:00 529771 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/strptime.cpython-35m-x86_64-linux-gnu.so
7fbae10cb000-7fbae10d0000 rw-p 00044000 fc:00 529771 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/strptime.cpython-35m-x86_64-linux-gnu.so
7fbae10d0000-7fbae11d2000 rw-p 00000000 00:00 0
7fbae11d2000-7fbae13e9000 r-xp 00000000 fc:00 529754 /usr/local/lib/python3.5/dist-packages/pandas/_libs/join.cpython-35m-x86_64-linux-gnu.so
7fbae13e9000-7fbae15e9000 ---p 00217000 fc:00 529754 /usr/local/lib/python3.5/dist-packages/pandas/_libs/join.cpython-35m-x86_64-linux-gnu.so
7fbae15e9000-7fbae15f2000 rw-p 00217000 fc:00 529754 /usr/local/lib/python3.5/dist-packages/pandas/_libs/join.cpython-35m-x86_64-linux-gnu.so
7fbae15f2000-7fbae15f4000 rw-p 00000000 00:00 0
7fbae15f4000-7fbae1668000 r-xp 00000000 fc:00 529767 /usr/local/lib/python3.5/dist-packages/pandas/_libs/index.cpython-35m-x86_64-linux-gnu.so
7fbae1668000-7fbae1867000 ---p 00074000 fc:00 529767 /usr/local/lib/python3.5/dist-packages/pandas/_libs/index.cpython-35m-x86_64-linux-gnu.so
7fbae1867000-7fbae186d000 rw-p 00073000 fc:00 529767 /usr/local/lib/python3.5/dist-packages/pandas/_libs/index.cpython-35m-x86_64-linux-gnu.so
7fbae186d000-7fbae192f000 rw-p 00000000 00:00 0
7fbae192f000-7fbae193c000 r-xp 00000000 fc:00 529768 /usr/local/lib/python3.5/dist-packages/pandas/_libs/hashing.cpython-35m-x86_64-linux-gnu.so
7fbae193c000-7fbae1b3b000 ---p 0000d000 fc:00 529768 /usr/local/lib/python3.5/dist-packages/pandas/_libs/hashing.cpython-35m-x86_64-linux-gnu.so
7fbae1b3b000-7fbae1b3d000 rw-p 0000c000 fc:00 529768 /usr/local/lib/python3.5/dist-packages/pandas/_libs/hashing.cpython-35m-x86_64-linux-gnu.so
7fbae1b3d000-7fbae1b4b000 r-xp 00000000 fc:00 529758 /usr/local/lib/python3.5/dist-packages/pandas/_libs/properties.cpython-35m-x86_64-linux-gnu.so
7fbae1b4b000-7fbae1d4a000 ---p 0000e000 fc:00 529758 /usr/local/lib/python3.5/dist-packages/pandas/_libs/properties.cpython-35m-x86_64-linux-gnu.so
7fbae1d4a000-7fbae1d4c000 rw-p 0000d000 fc:00 529758 /usr/local/lib/python3.5/dist-packages/pandas/_libs/properties.cpython-35m-x86_64-linux-gnu.so
7fbae1d4c000-7fbae1dcc000 rw-p 00000000 00:00 0
7fbae1dcc000-7fbae1f23000 r-xp 00000000 fc:00 529755 /usr/local/lib/python3.5/dist-packages/pandas/_libs/algos.cpython-35m-x86_64-linux-gnu.so
7fbae1f23000-7fbae2123000 ---p 00157000 fc:00 529755 /usr/local/lib/python3.5/dist-packages/pandas/_libs/algos.cpython-35m-x86_64-linux-gnu.so
7fbae2123000-7fbae212f000 rw-p 00157000 fc:00 529755 /usr/local/lib/python3.5/dist-packages/pandas/_libs/algos.cpython-35m-x86_64-linux-gnu.so
7fbae212f000-7fbae2173000 rw-p 00000000 00:00 0
7fbae2173000-7fbae21aa000 r-xp 00000000 fc:00 2357061 /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fbae21aa000-7fbae23a9000 ---p 00037000 fc:00 2357061 /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fbae23a9000-7fbae23aa000 r--p 00036000 fc:00 2357061 /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fbae23aa000-7fbae23ab000 rw-p 00037000 fc:00 2357061 /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fbae23ab000-7fbae23cf000 r-xp 00000000 fc:00 2356636 /usr/lib/python3.5/lib-dynload/_decimal.cpython-35m-x86_64-linux-gnu.so
7fbae23cf000-7fbae25ce000 ---p 00024000 fc:00 2356636 /usr/lib/python3.5/lib-dynload/_decimal.cpython-35m-x86_64-linux-gnu.so
7fbae25ce000-7fbae25cf000 r--p 00023000 fc:00 2356636 /usr/lib/python3.5/lib-dynload/_decimal.cpython-35m-x86_64-linux-gnu.so
7fbae25cf000-7fbae25d8000 rw-p 00024000 fc:00 2356636 /usr/lib/python3.5/lib-dynload/_decimal.cpython-35m-x86_64-linux-gnu.so
7fbae25d8000-7fbae2618000 rw-p 00000000 00:00 0
7fbae2618000-7fbae27b6000 r-xp 00000000 fc:00 529764 /usr/local/lib/python3.5/dist-packages/pandas/_libs/interval.cpython-35m-x86_64-linux-gnu.so
7fbae27b6000-7fbae29b6000 ---p 0019e000 fc:00 529764 /usr/local/lib/python3.5/dist-packages/pandas/_libs/interval.cpython-35m-x86_64-linux-gnu.so
7fbae29b6000-7fbae29c3000 rw-p 0019e000 fc:00 529764 /usr/local/lib/python3.5/dist-packages/pandas/_libs/interval.cpython-35m-x86_64-linux-gnu.so
7fbae29c3000-7fbae29c5000 rw-p 00000000 00:00 0
7fbae29c5000-7fbae2ac9000 r-xp 00000000 fc:00 529757 /usr/local/lib/python3.5/dist-packages/pandas/_libs/lib.cpython-35m-x86_64-linux-gnu.so
7fbae2ac9000-7fbae2cc9000 ---p 00104000 fc:00 529757 /usr/local/lib/python3.5/dist-packages/pandas/_libs/lib.cpython-35m-x86_64-linux-gnu.so
7fbae2cc9000-7fbae2cd9000 rw-p 00104000 fc:00 529757 /usr/local/lib/python3.5/dist-packages/pandas/_libs/lib.cpython-35m-x86_64-linux-gnu.so
7fbae2cd9000-7fbae2cdd000 rw-p 00000000 00:00 0
7fbae2cdd000-7fbae2d6c000 r-xp 00000000 fc:00 529759 /usr/local/lib/python3.5/dist-packages/pandas/_libs/hashtable.cpython-35m-x86_64-linux-gnu.so
7fbae2d6c000-7fbae2f6b000 ---p 0008f000 fc:00 529759 /usr/local/lib/python3.5/dist-packages/pandas/_libs/hashtable.cpython-35m-x86_64-linux-gnu.so
7fbae2f6b000-7fbae2f73000 rw-p 0008e000 fc:00 529759 /usr/local/lib/python3.5/dist-packages/pandas/_libs/hashtable.cpython-35m-x86_64-linux-gnu.so
7fbae2f73000-7fbae2f75000 rw-p 00000000 00:00 0
7fbae2f75000-7fbae2f96000 r-xp 00000000 fc:00 529777 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/fields.cpython-35m-x86_64-linux-gnu.so
7fbae2f96000-7fbae3196000 ---p 00021000 fc:00 529777 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/fields.cpython-35m-x86_64-linux-gnu.so
7fbae3196000-7fbae3198000 rw-p 00021000 fc:00 529777 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/fields.cpython-35m-x86_64-linux-gnu.so
7fbae3198000-7fbae3199000 rw-p 00000000 00:00 0
7fbae3199000-7fbae31db000 r-xp 00000000 fc:00 529774 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/parsing.cpython-35m-x86_64-linux-gnu.so
7fbae31db000-7fbae33da000 ---p 00042000 fc:00 529774 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/parsing.cpython-35m-x86_64-linux-gnu.so
7fbae33da000-7fbae33e0000 rw-p 00041000 fc:00 529774 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/parsing.cpython-35m-x86_64-linux-gnu.so
7fbae33e0000-7fbae33e1000 rw-p 00000000 00:00 0
7fbae33e1000-7fbae33fc000 r-xp 00000000 fc:00 529772 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/timezones.cpython-35m-x86_64-linux-gnu.so
7fbae33fc000-7fbae35fb000 ---p 0001b000 fc:00 529772 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/timezones.cpython-35m-x86_64-linux-gnu.so
7fbae35fb000-7fbae35fe000 rw-p 0001a000 fc:00 529772 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/timezones.cpython-35m-x86_64-linux-gnu.so
7fbae35fe000-7fbae360e000 r-xp 00000000 fc:00 529773 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/timedeltas.cpython-35m-x86_64-linux-gnu.so
7fbae360e000-7fbae380e000 ---p 00010000 fc:00 529773 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/timedeltas.cpython-35m-x86_64-linux-gnu.so
7fbae380e000-7fbae3810000 rw-p 00010000 fc:00 529773 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslibs/timedeltas.cpython-35m-x86_64-linux-gnu.so
7fbae3810000-7fbae3850000 rw-p 00000000 00:00 0
7fbae3850000-7fbae3972000 r-xp 00000000 fc:00 529765 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslib.cpython-35m-x86_64-linux-gnu.so
7fbae3972000-7fbae3b72000 ---p 00122000 fc:00 529765 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslib.cpython-35m-x86_64-linux-gnu.so
7fbae3b72000-7fbae3b81000 rw-p 00122000 fc:00 529765 /usr/local/lib/python3.5/dist-packages/pandas/_libs/tslib.cpython-35m-x86_64-linux-gnu.so
7fbae3b81000-7fbae3bc6000 rw-p 00000000 00:00 0
7fbae3bc6000-7fbae3bc7000 r-xp 00000000 fc:00 2355290 /usr/lib/python3.5/lib-dynload/_opcode.cpython-35m-x86_64-linux-gnu.so
7fbae3bc7000-7fbae3dc6000 ---p 00001000 fc:00 2355290 /usr/lib/python3.5/lib-dynload/_opcode.cpython-35m-x86_64-linux-gnu.so
7fbae3dc6000-7fbae3dc7000 r--p 00000000 fc:00 2355290 /usr/lib/python3.5/lib-dynload/_opcode.cpython-35m-x86_64-linux-gnu.so
7fbae3dc7000-7fbae3dc8000 rw-p 00001000 fc:00 2355290 /usr/lib/python3.5/lib-dynload/_opcode.cpython-35m-x86_64-linux-gnu.so
7fbae3dc8000-7fbae3ec8000 rw-p 00000000 00:00 0
7fbae3ec8000-7fbae3f82000 r-xp 00000000 fc:00 2510570 /usr/local/lib/python3.5/dist-packages/numpy/random/mtrand.cpython-35m-x86_64-linux-gnu.so
7fbae3f82000-7fbae4181000 ---p 000ba000 fc:00 2510570 /usr/local/lib/python3.5/dist-packages/numpy/random/mtrand.cpython-35m-x86_64-linux-gnu.so
7fbae4181000-7fbae41a6000 rw-p 000b9000 fc:00 2510570 /usr/local/lib/python3.5/dist-packages/numpy/random/mtrand.cpython-35m-x86_64-linux-gnu.so
7fbae41a6000-7fbae41e8000 rw-p 00000000 00:00 0
7fbae41e8000-7fbae41f1000 r-xp 00000000 fc:00 2510531 /usr/local/lib/python3.5/dist-packages/numpy/fft/fftpack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae41f1000-7fbae43f0000 ---p 00009000 fc:00 2510531 /usr/local/lib/python3.5/dist-packages/numpy/fft/fftpack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae43f0000-7fbae43f1000 rw-p 00008000 fc:00 2510531 /usr/local/lib/python3.5/dist-packages/numpy/fft/fftpack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae43f1000-7fbae4431000 rw-p 00000000 00:00 0
7fbae4431000-7fbae445a000 r-xp 00000000 fc:00 2636449 /usr/local/lib/python3.5/dist-packages/numpy/linalg/_umath_linalg.cpython-35m-x86_64-linux-gnu.so
7fbae445a000-7fbae4659000 ---p 00029000 fc:00 2636449 /usr/local/lib/python3.5/dist-packages/numpy/linalg/_umath_linalg.cpython-35m-x86_64-linux-gnu.so
7fbae4659000-7fbae465b000 rw-p 00028000 fc:00 2636449 /usr/local/lib/python3.5/dist-packages/numpy/linalg/_umath_linalg.cpython-35m-x86_64-linux-gnu.so
7fbae465b000-7fbae465e000 rw-p 000c6000 fc:00 2636449 /usr/local/lib/python3.5/dist-packages/numpy/linalg/_umath_linalg.cpython-35m-x86_64-linux-gnu.so
7fbae465e000-7fbae4662000 r-xp 00000000 fc:00 2636445 /usr/local/lib/python3.5/dist-packages/numpy/linalg/lapack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae4662000-7fbae4862000 ---p 00004000 fc:00 2636445 /usr/local/lib/python3.5/dist-packages/numpy/linalg/lapack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae4862000-7fbae4863000 rw-p 00004000 fc:00 2636445 /usr/local/lib/python3.5/dist-packages/numpy/linalg/lapack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae4863000-7fbae4865000 rw-p 00019000 fc:00 2636445 /usr/local/lib/python3.5/dist-packages/numpy/linalg/lapack_lite.cpython-35m-x86_64-linux-gnu.so
7fbae4865000-7fbae49a5000 rw-p 00000000 00:00 0
7fbae49a5000-7fbae89a5000 rw-p 00000000 00:00 0
7fbae89a5000-7fbae8a65000 rw-p 00000000 00:00 0
7fbae8a65000-7fbaeca65000 rw-p 00000000 00:00 0
7fbaeca65000-7fbaecaa5000 rw-p 00000000 00:00 0
7fbaecaa5000-7fbaecc37000 r-xp 00000000 fc:00 2375345 /usr/local/lib/python3.5/dist-packages/numpy/core/umath.cpython-35m-x86_64-linux-gnu.so
7fbaecc37000-7fbaece36000 ---p 00192000 fc:00 2375345 /usr/local/lib/python3.5/dist-packages/numpy/core/umath.cpython-35m-x86_64-linux-gnu.so
7fbaece36000-7fbaece3c000 rw-p 00191000 fc:00 2375345 /usr/local/lib/python3.5/dist-packages/numpy/core/umath.cpython-35m-x86_64-linux-gnu.so
7fbaece3c000-7fbaece3e000 rw-p 00000000 00:00 0
7fbaece3e000-7fbaece3f000 ---p 00000000 00:00 0
7fbaece3f000-7fbaed63f000 rw-p 00000000 00:00 0
7fbaed63f000-7fbaed640000 ---p 00000000 00:00 0
7fbaed640000-7fbaede40000 rw-p 00000000 00:00 0
7fbaede40000-7fbaede41000 ---p 00000000 00:00 0
7fbaede41000-7fbaee641000 rw-p 00000000 00:00 0
7fbaee641000-7fbaf0641000 rw-p 00000000 00:00 0
7fbaf0641000-7fbaf2641000 rw-p 00000000 00:00 0
7fbaf2641000-7fbaf4641000 rw-p 00000000 00:00 0
7fbaf4641000-7fbaf4642000 ---p 00000000 00:00 0
7fbaf4642000-7fbaf4e42000 rw-p 00000000 00:00 0
7fbaf4e42000-7fbaf4e43000 ---p 00000000 00:00 0
7fbaf4e43000-7fbaf5643000 rw-p 00000000 00:00 0
7fbaf5643000-7fbaf5644000 ---p 00000000 00:00 0
7fbaf5644000-7fbaf5e44000 rw-p 00000000 00:00 0
7fbaf5e44000-7fbaf5e45000 ---p 00000000 00:00 0
7fbaf5e45000-7fbaf6645000 rw-p 00000000 00:00 0
7fbaf6645000-7fbaf6735000 r-xp 00000000 fc:00 2510622 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fbaf6735000-7fbaf6934000 ---p 000f0000 fc:00 2510622 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fbaf6934000-7fbaf6936000 rw-p 000ef000 fc:00 2510622 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fbaf6936000-7fbaf6937000 rw-p 00000000 00:00 0
7fbaf6937000-7fbaf693f000 rw-p 000f2000 fc:00 2510622 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fbaf693f000-7fbaf8c53000 r-xp 00000000 fc:00 2510621 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fbaf8c53000-7fbaf8e52000 ---p 02314000 fc:00 2510621 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fbaf8e52000-7fbaf8e71000 rw-p 02313000 fc:00 2510621 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fbaf8e71000-7fbaf8ed4000 rw-p 00000000 00:00 0
7fbaf8ed4000-7fbaf8f6a000 rw-p 02425000 fc:00 2510621 /usr/local/lib/python3.5/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fbaf8f6a000-7fbaf9138000 r-xp 00000000 fc:00 2375338 /usr/local/lib/python3.5/dist-packages/numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so
7fbaf9138000-7fbaf9338000 ---p 001ce000 fc:00 2375338 /usr/local/lib/python3.5/dist-packages/numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so
7fbaf9338000-7fbaf9347000 rw-p 001ce000 fc:00 2375338 /usr/local/lib/python3.5/dist-packages/numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so
7fbaf9347000-7fbaf935a000 rw-p 00000000 00:00 0
7fbaf935a000-7fbaf9360000 rw-p 0098a000 fc:00 2375338 /usr/local/lib/python3.5/dist-packages/numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so
7fbaf9360000-7fbaf93e0000 rw-p 00000000 00:00 0
7fbaf93e1000-7fbaf94e1000 rw-p 00000000 00:00 0
7fbaf94e1000-7fbaf94f2000 r-xp 00000000 fc:00 2356631 /usr/lib/python3.5/lib-dynload/_json.cpython-35m-x86_64-linux-gnu.so
7fbaf94f2000-7fbaf96f1000 ---p 00011000 fc:00 2356631 /usr/lib/python3.5/lib-dynload/_json.cpython-35m-x86_64-linux-gnu.so
7fbaf96f1000-7fbaf96f2000 r--p 00010000 fc:00 2356631 /usr/lib/python3.5/lib-dynload/_json.cpython-35m-x86_64-linux-gnu.so
7fbaf96f2000-7fbaf96f3000 rw-p 00011000 fc:00 2356631 /usr/lib/python3.5/lib-dynload/_json.cpython-35m-x86_64-linux-gnu.so
7fbaf96f3000-7fbaf9773000 rw-p 00000000 00:00 0
7fbaf9773000-7fbaf9777000 r-xp 00000000 fc:00 130913 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fbaf9777000-7fbaf9976000 ---p 00004000 fc:00 130913 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fbaf9976000-7fbaf9977000 r--p 00003000 fc:00 130913 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fbaf9977000-7fbaf9978000 rw-p 00004000 fc:00 130913 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fbaf9978000-7fbaf9999000 r-xp 00000000 fc:00 131351 /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7fbaf9999000-7fbaf9b98000 ---p 00021000 fc:00 131351 /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7fbaf9b98000-7fbaf9b99000 r--p 00020000 fc:00 131351 /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7fbaf9b99000-7fbaf9b9a000 rw-p 00021000 fc:00 131351 /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7fbaf9b9a000-7fbaf9ba1000 r-xp 00000000 fc:00 2356633 /usr/lib/python3.5/lib-dynload/_lzma.cpython-35m-x86_64-linux-gnu.so
7fbaf9ba1000-7fbaf9da0000 ---p 00007000 fc:00 2356633 /usr/lib/python3.5/lib-dynload/_lzma.cpython-35m-x86_64-linux-gnu.so
7fbaf9da0000-7fbaf9da1000 r--p 00006000 fc:00 2356633 /usr/lib/python3.5/lib-dynload/_lzma.cpython-35m-x86_64-linux-gnu.so
7fbaf9da1000-7fbaf9da3000 rw-p 00007000 fc:00 2356633 /usr/lib/python3.5/lib-dynload/_lzma.cpython-35m-x86_64-linux-gnu.so
7fbaf9da3000-7fbaf9de3000 rw-p 00000000 00:00 0
7fbaf9de3000-7fbaf9de7000 r-xp 00000000 fc:00 2356618 /usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
7fbaf9de7000-7fbaf9fe6000 ---p 00004000 fc:00 2356618 /usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
7fbaf9fe6000-7fbaf9fe7000 r--p 00003000 fc:00 2356618 /usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
7fbaf9fe7000-7fbaf9fe8000 rw-p 00004000 fc:00 2356618 /usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
7fbaf9fe8000-7fbafa068000 rw-p 00000000 00:00 0
7fbafa068000-7fbafa08a000 r-xp 00000000 fc:00 2356634 /usr/lib/python3.5/lib-dynload/_ctypes.cpython-35m-x86_64-linux-gnu.so
7fbafa08a000-7fbafa289000 ---p 00022000 fc:00 2356634 /usr/lib/python3.5/lib-dynload/_ctypes.cpython-35m-x86_64-linux-gnu.so
7fbafa289000-7fbafa28a000 r--p 00021000 fc:00 2356634 /usr/lib/python3.5/lib-dynload/_ctypes.cpython-35m-x86_64-linux-gnu.so
7fbafa28a000-7fbafa28e000 rw-p 00022000 fc:00 2356634 /usr/lib/python3.5/lib-dynload/_ctypes.cpython-35m-x86_64-linux-gnu.so
7fbafa28e000-7fbafa30f000 rw-p 00000000 00:00 0
7fbafa30f000-7fbafa314000 r-xp 00000000 fc:00 2355286 /usr/lib/python3.5/lib-dynload/_hashlib.cpython-35m-x86_64-linux-gnu.so
7fbafa314000-7fbafa514000 ---p 00005000 fc:00 2355286 /usr/lib/python3.5/lib-dynload/_hashlib.cpython-35m-x86_64-linux-gnu.so
7fbafa514000-7fbafa515000 r--p 00005000 fc:00 2355286 /usr/lib/python3.5/lib-dynload/_hashlib.cpython-35m-x86_64-linux-gnu.so
7fbafa515000-7fbafa516000 rw-p 00006000 fc:00 2355286 /usr/lib/python3.5/lib-dynload/_hashlib.cpython-35m-x86_64-linux-gnu.so
7fbafa516000-7fbafa596000 rw-p 00000000 00:00 0
7fbafa596000-7fbafa5f4000 r-xp 00000000 fc:00 130935 /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fbafa5f4000-7fbafa7f4000 ---p 0005e000 fc:00 130935 /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fbafa7f4000-7fbafa7f8000 r--p 0005e000 fc:00 130935 /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fbafa7f8000-7fbafa7ff000 rw-p 00062000 fc:00 130935 /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fbafa7ff000-7fbafa816000 r-xp 00000000 fc:00 2355285 /usr/lib/python3.5/lib-dynload/_ssl.cpython-35m-x86_64-linux-gnu.so
7fbafa816000-7fbafaa16000 ---p 00017000 fc:00 2355285 /usr/lib/python3.5/lib-dynload/_ssl.cpython-35m-x86_64-linux-gnu.so
7fbafaa16000-7fbafaa17000 r--p 00017000 fc:00 2355285 /usr/lib/python3.5/lib-dynload/_ssl.cpython-35m-x86_64-linux-gnu.so
7fbafaa17000-7fbafaa1c000 rw-p 00018000 fc:00 2355285 /usr/lib/python3.5/lib-dynload/_ssl.cpython-35m-x86_64-linux-gnu.so
7fbafaa1c000-7fbafaa9c000 rw-p 00000000 00:00 0
7fbafaabd000-7fbafab7d000 rw-p 00000000 00:00 0
7fbafab7d000-7fbafab8c000 r-xp 00000000 fc:00 131310 /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fbafab8c000-7fbafad8b000 ---p 0000f000 fc:00 131310 /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fbafad8b000-7fbafad8c000 r--p 0000e000 fc:00 131310 /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fbafad8c000-7fbafad8d000 rw-p 0000f000 fc:00 131310 /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fbafad8d000-7fbafafa7000 r-xp 00000000 fc:00 130936 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fbafafa7000-7fbafb1a6000 ---p 0021a000 fc:00 130936 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fbafb1a6000-7fbafb1c2000 r--p 00219000 fc:00 130936 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fbafb1c2000-7fbafb1ce000 rw-p 00235000 fc:00 130936 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fbafb1ce000-7fbafb1d1000 rw-p 00000000 00:00 0
7fbafb1d1000-7fbafb1e8000 r-xp 00000000 fc:00 2372866 /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.58.0
7fbafb1e8000-7fbafb3e8000 ---p 00017000 fc:00 2372866 /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.58.0
7fbafb3e8000-7fbafb3e9000 r--p 00017000 fc:00 2372866 /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.58.0
7fbafb3e9000-7fbafb3ea000 rw-p 00018000 fc:00 2372866 /usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.58.0
7fbafb3ea000-7fbafb401000 r-xp 00000000 fc:00 2372471 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
7fbafb401000-7fbafb600000 ---p 00017000 fc:00 2372471 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
7fbafb600000-7fbafb601000 r--p 00016000 fc:00 2372471 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
7fbafb601000-7fbafb602000 rw-p 00017000 fc:00 2372471 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
7fbafb602000-7fbafb6d1000 r-xp 00000000 fc:00 2357075 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fbafb6d1000-7fbafb8d1000 ---p 000cf000 fc:00 2357075 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fbafb8d1000-7fbafb8d4000 r--p 000cf000 fc:00 2357075 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fbafb8d4000-7fbafb8d6000 rw-p 000d2000 fc:00 2357075 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fbafb8d6000-7fbafb8d7000 rw-p 00000000 00:00 0
7fbafb8d7000-7fbafb8fa000 r-xp 00000000 fc:00 2363292 /usr/local/lib/libsecp256k1.so.0.0.0
7fbafb8fa000-7fbafbaf9000 ---p 00023000 fc:00 2363292 /usr/local/lib/libsecp256k1.so.0.0.0
7fbafbaf9000-7fbafbafa000 r--p 00022000 fc:00 2363292 /usr/local/lib/libsecp256k1.so.0.0.0
7fbafbafa000-7fbafbafb000 rw-p 00023000 fc:00 2363292 /usr/local/lib/libsecp256k1.so.0.0.0
7fbafbafb000-7fbafbb11000 r-xp 00000000 fc:00 131332 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fbafbb11000-7fbafbd10000 ---p 00016000 fc:00 131332 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fbafbd10000-7fbafbd11000 r--p 00015000 fc:00 131332 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fbafbd11000-7fbafbd12000 rw-p 00016000 fc:00 131332 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fbafbd12000-7fbafbe8c000 r-xp 00000000 fc:00 2359084 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24
7fbafbe8c000-7fbafc08b000 ---p 0017a000 fc:00 2359084 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24
7fbafc08b000-7fbafc095000 r--p 00179000 fc:00 2359084 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24
7fbafc095000-7fbafc097000 rw-p 00183000 fc:00 2359084 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24
7fbafc097000-7fbafc09a000 rw-p 00000000 00:00 0
7fbafc09a000-7fbafc09d000 r-xp 00000000 fc:00 2372450 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
7fbafc09d000-7fbafc29c000 ---p 00003000 fc:00 2372450 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
7fbafc29c000-7fbafc29d000 r--p 00002000 fc:00 2372450 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
7fbafc29d000-7fbafc29e000 rw-p 00003000 fc:00 2372450 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
7fbafc29e000-7fbafc435000 r-xp 00000000 fc:00 804106 /home/mribbons/secp256k1/BlockSci/release/src/blocksci/libblocksci.so
7fbafc435000-7fbafc634000 ---p 00197000 fc:00 804106 /home/mribbons/secp256k1/BlockSci/release/src/blocksci/libblocksci.so
7fbafc634000-7fbafc636000 r--p 00196000 fc:00 804106 /home/mribbons/secp256k1/BlockSci/release/src/blocksci/libblocksci.so
7fbafc636000-7fbafc640000 rw-p 00198000 fc:00 804106 /home/mribbons/secp256k1/BlockSci/release/src/blocksci/libblocksci.so
7fbafc640000-7fbafc641000 rw-p 00000000 00:00 0
7fbafc641000-7fbafc740000 r-xp 00000000 fc:00 796292 /home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so
7fbafc740000-7fbafc940000 ---p 000ff000 fc:00 796292 /home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so
7fbafc940000-7fbafc942000 r--p 000ff000 fc:00 796292 /home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so
7fbafc942000-7fbafc943000 rw-p 00101000 fc:00 796292 /home/user/BlockSci/blocksci_interface.cpython-35m-x86_64-linux-gnu.so
7fbafc943000-7fbafc9c3000 rw-p 00000000 00:00 0
7fbafc9c3000-7fbafcc9b000 r--p 00000000 fc:00 2356281 /usr/lib/locale/locale-archive
7fbafcc9b000-7fbafcda3000 r-xp 00000000 fc:00 136047 /lib/x86_64-linux-gnu/libm-2.23.so
7fbafcda3000-7fbafcfa2000 ---p 00108000 fc:00 136047 /lib/x86_64-linux-gnu/libm-2.23.so
7fbafcfa2000-7fbafcfa3000 r--p 00107000 fc:00 136047 /lib/x86_64-linux-gnu/libm-2.23.so
7fbafcfa3000-7fbafcfa4000 rw-p 00108000 fc:00 136047 /lib/x86_64-linux-gnu/libm-2.23.so
7fbafcfa4000-7fbafcfbd000 r-xp 00000000 fc:00 131288 /lib/x86_64-linux-gnu/libz.so.1.2.8
7fbafcfbd000-7fbafd1bc000 ---p 00019000 fc:00 131288 /lib/x86_64-linux-gnu/libz.so.1.2.8
7fbafd1bc000-7fbafd1bd000 r--p 00018000 fc:00 131288 /lib/x86_64-linux-gnu/libz.so.1.2.8
7fbafd1bd000-7fbafd1be000 rw-p 00019000 fc:00 131288 /lib/x86_64-linux-gnu/libz.so.1.2.8
7fbafd1be000-7fbafd1e4000 r-xp 00000000 fc:00 130932 /lib/x86_64-linux-gnu/libexpat.so.1.6.0
7fbafd1e4000-7fbafd3e4000 ---p 00026000 fc:00 130932 /lib/x86_64-linux-gnu/libexpat.so.1.6.0
7fbafd3e4000-7fbafd3e6000 r--p 00026000 fc:00 130932 /lib/x86_64-linux-gnu/libexpat.so.1.6.0
7fbafd3e6000-7fbafd3e7000 rw-p 00028000 fc:00 130932 /lib/x86_64-linux-gnu/libexpat.so.1.6.0
7fbafd3e7000-7fbafd3e9000 r-xp 00000000 fc:00 136045 /lib/x86_64-linux-gnu/libutil-2.23.so
7fbafd3e9000-7fbafd5e8000 ---p 00002000 fc:00 136045 /lib/x86_64-linux-gnu/libutil-2.23.so
7fbafd5e8000-7fbafd5e9000 r--p 00001000 fc:00 136045 /lib/x86_64-linux-gnu/libutil-2.23.so
7fbafd5e9000-7fbafd5ea000 rw-p 00002000 fc:00 136045 /lib/x86_64-linux-gnu/libutil-2.23.so
7fbafd5ea000-7fbafd5ed000 r-xp 00000000 fc:00 135383 /lib/x86_64-linux-gnu/libdl-2.23.so
7fbafd5ed000-7fbafd7ec000 ---p 00003000 fc:00 135383 /lib/x86_64-linux-gnu/libdl-2.23.so
7fbafd7ec000-7fbafd7ed000 r--p 00002000 fc:00 135383 /lib/x86_64-linux-gnu/libdl-2.23.so
7fbafd7ed000-7fbafd7ee000 rw-p 00003000 fc:00 135383 /lib/x86_64-linux-gnu/libdl-2.23.so
7fbafd7ee000-7fbafd9ae000 r-xp 00000000 fc:00 136052 /lib/x86_64-linux-gnu/libc-2.23.so
7fbafd9ae000-7fbafdbae000 ---p 001c0000 fc:00 136052 /lib/x86_64-linux-gnu/libc-2.23.so
7fbafdbae000-7fbafdbb2000 r--p 001c0000 fc:00 136052 /lib/x86_64-linux-gnu/libc-2.23.so
7fbafdbb2000-7fbafdbb4000 rw-p 001c4000 fc:00 136052 /lib/x86_64-linux-gnu/libc-2.23.so
7fbafdbb4000-7fbafdbb8000 rw-p 00000000 00:00 0
7fbafdbb8000-7fbafdbd0000 r-xp 00000000 fc:00 135370 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fbafdbd0000-7fbafddcf000 ---p 00018000 fc:00 135370 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fbafddcf000-7fbafddd0000 r--p 00017000 fc:00 135370 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fbafddd0000-7fbafddd1000 rw-p 00018000 fc:00 135370 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fbafddd1000-7fbafddd5000 rw-p 00000000 00:00 0
7fbafddd5000-7fbafddfb000 r-xp 00000000 fc:00 135358 /lib/x86_64-linux-gnu/ld-2.23.so
7fbafde27000-7fbafdfec000 rw-p 00000000 00:00 0
7fbafdfef000-7fbafdff0000 rw-p 00000000 00:00 0
7fbafdff0000-7fbafdff1000 rwxp 00000000 00:00 0
7fbafdff1000-7fbafdff8000 r--s 00000000 fc:00 2357334 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
7fbafdff8000-7fbafdffa000 rw-p 00000000 00:00 0
7fbafdffa000-7fbafdffb000 r--p 00025000 fc:00 135358 /lib/x86_64-linux-gnu/ld-2.23.so
7fbafdffb000-7fbafdffc000 rw-p 00026000 fc:00 135358 /lib/x86_64-linux-gnu/ld-2.23.so
7fbafdffc000-7fbafdffd000 rw-p 00000000 00:00 0
7ffde2d09000-7ffde2d2a000 rw-p 00000000 00:00 0 [stack]
7ffde2dc8000-7ffde2dca000 r--p 00000000 00:00 0 [vvar]
7ffde2dca000-7ffde2dcc000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted (core dumped)
$ uname -a
Linux TOASTNAME 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
Hi,
Thanks for uploading the huge number of commits, I am getting a couple of issues:
~/BlockSci2/release$ make
[ 57%] Built target blocksci
[ 58%] Building CXX object src/parser/CMakeFiles/blocksci_parser.dir/address_writer.cpp.o
/home/mribbons/BlockSci2/src/parser/address_writer.cpp: In instantiation of ‘AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> [with auto:16 = const ScriptOutput<(blocksci::AddressType::Enum)0u>]’:
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:233:11: required by substitution of ‘template<class F, class ... As> constexpr decltype (forward<F>(f)((forward<As>)(mpark::lib::cpp17::invoke::as)...)) mpark::lib::cpp17::invoke(F&&, As&& ...) [with F = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; As = {const ScriptOutput<(blocksci::AddressType::Enum)0u>&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:260:57: required from ‘struct mpark::detail::visitation::variant::visit_exhaustive_visitor_check<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>, const ScriptOutput<(blocksci::AddressType::Enum)0u>&>’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:663:13: required from ‘constexpr decltype(auto) mpark::detail::visitation::variant::value_visitor<Visitor>::operator()(Alts&& ...) const [with Alts = {const mpark::detail::alt<0ul, ScriptOutput<(blocksci::AddressType::Enum)0u> >&}; Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:233:11: required by substitution of ‘template<class F, class ... As> constexpr decltype (forward<F>(f)((forward<As>)(mpark::lib::cpp17::invoke::as)...)) mpark::lib::cpp17::invoke(F&&, As&& ...) [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; As = {const mpark::detail::alt<0ul, ScriptOutput<(blocksci::AddressType::Enum)0u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:529:15: required from ‘static constexpr decltype(auto) mpark::detail::visitation::base::dispatcher<Is>::impl<F, Vs>::dispatch(F, Vs ...) [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >&&; Vs = {const mpark::detail::base<(mpark::detail::Trait)1, ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}; long unsigned int ...Is = {0ul}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:537:11: [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:580:45: required from ‘static constexpr auto mpark::detail::visitation::base::make_fmatrix() [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >&&; Vs = {const mpark::detail::base<(mpark::detail::Trait)1, ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:629:11: required from ‘static constexpr decltype(auto) mpark::detail::visitation::base::visit_alt(Visitor&&, Vs&& ...) [with Visitor = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; Vs = {const mpark::detail::impl<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:688:11: required from ‘static constexpr decltype(auto) mpark::detail::visitation::variant::visit_alt(Visitor&&, Vs&& ...) [with Visitor = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; Vs = {const mpark::variant<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:703:11: required from ‘static constexpr decltype(auto) mpark::detail::visitation::variant::visit_value(Visitor&&, Vs&& ...) [with Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; Vs = {const mpark::variant<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:1738:52: required from ‘constexpr decltype(auto) mpark::visit(Visitor&&, Vs&& ...) [with Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; Vs = {const mpark::variant<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/src/parser/address_writer.cpp:20:107: required from here
/home/mribbons/BlockSci2/src/parser/address_writer.cpp:20:90: error: cannot call member function ‘size_t AddressWriter::serialize(const ScriptOutput<type>&, uint32_t) [with blocksci::AddressType::Enum type = (blocksci::AddressType::Enum)0u; size_t = long unsigned int; uint32_t = unsigned int]’ without object
return mpark::visit([&](auto &scriptOutput) { return serialize(scriptOutput, txNum); }, output.wrapped);
^
/home/mribbons/BlockSci2/src/parser/address_writer.cpp: In instantiation of ‘AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> [with auto:16 = const ScriptOutput<(blocksci::AddressType::Enum)1u>]’:
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:233:11: required by substitution of ‘template<class F, class ... As> constexpr decltype (forward<F>(f)((forward<As>)(mpark::lib::cpp17::invoke::as)...)) mpark::lib::cpp17::invoke(F&&, As&& ...) [with F = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; As = {const ScriptOutput<(blocksci::AddressType::Enum)1u>&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:260:57: required from ‘struct mpark::detail::visitation::variant::visit_exhaustive_visitor_check<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>, const ScriptOutput<(blocksci::AddressType::Enum)1u>&>’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:663:13: required from ‘constexpr decltype(auto) mpark::detail::visitation::variant::value_visitor<Visitor>::operator()(Alts&& ...) const [with Alts = {const mpark::detail::alt<1ul, ScriptOutput<(blocksci::AddressType::Enum)1u> >&}; Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:233:11: required by substitution of ‘template<class F, class ... As> constexpr decltype (forward<F>(f)((forward<As>)(mpark::lib::cpp17::invoke::as)...)) mpark::lib::cpp17::invoke(F&&, As&& ...) [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; As = {const mpark::detail::alt<1ul, ScriptOutput<(blocksci::AddressType::Enum)1u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:529:15: required from ‘static constexpr decltype(auto) mpark::detail::visitation::base::dispatcher<Is>::impl<F, Vs>::dispatch(F, Vs ...) [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >&&; Vs = {const mpark::detail::base<(mpark::detail::Trait)1, ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}; long unsigned int ...Is = {1ul}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:537:11: [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:580:45: required from ‘static constexpr auto mpark::detail::visitation::base::make_fmatrix() [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >&&; Vs = {const mpark::detail::base<(mpark::detail::Trait)1, ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:629:11: required from ‘static constexpr decltype(auto) mpark::detail::visitation::base::visit_alt(Visitor&&, Vs&& ...) [with Visitor = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; Vs = {const mpark::detail::impl<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:688:11: required from ‘static constexpr decltype(auto) mpark::detail::visitation::variant::visit_alt(Visitor&&, Vs&& ...) [with Visitor = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; Vs = {const mpark::variant<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:703:11: required from ‘static constexpr decltype(auto) mpark::detail::visitation::variant::visit_value(Visitor&&, Vs&& ...) [with Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; Vs = {const mpark::variant<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:1738:52: required from ‘constexpr decltype(auto) mpark::visit(Visitor&&, Vs&& ...) [with Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; Vs = {const mpark::variant<ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}]’
/home/mribbons/BlockSci2/src/parser/address_writer.cpp:20:107: required from here
/home/mribbons/BlockSci2/src/parser/address_writer.cpp:20:90: error: cannot call member function ‘size_t AddressWriter::serialize(const ScriptOutput<type>&, uint32_t) [with blocksci::AddressType::Enum type = (blocksci::AddressType::Enum)1u; size_t = long unsigned int; uint32_t = unsigned int]’ without object
/home/mribbons/BlockSci2/src/parser/address_writer.cpp: In instantiation of ‘AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> [with auto:16 = const ScriptOutput<(blocksci::AddressType::Enum)2u>]’:
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:233:11: required by substitution of ‘template<class F, class ... As> constexpr decltype (forward<F>(f)((forward<As>)(mpark::lib::cpp17::invoke::as)...)) mpark::lib::cpp17::invoke(F&&, As&& ...) [with F = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>; As = {const ScriptOutput<(blocksci::AddressType::Enum)2u>&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:260:57: required from ‘struct mpark::detail::visitation::variant::visit_exhaustive_visitor_check<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>, const ScriptOutput<(blocksci::AddressType::Enum)2u>&>’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:663:13: required from ‘constexpr decltype(auto) mpark::detail::visitation::variant::value_visitor<Visitor>::operator()(Alts&& ...) const [with Alts = {const mpark::detail::alt<2ul, ScriptOutput<(blocksci::AddressType::Enum)2u> >&}; Visitor = AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)>]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/lib.hpp:233:11: required by substitution of ‘template<class F, class ... As> constexpr decltype (forward<F>(f)((forward<As>)(mpark::lib::cpp17::invoke::as)...)) mpark::lib::cpp17::invoke(F&&, As&& ...) [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >; As = {const mpark::detail::alt<2ul, ScriptOutput<(blocksci::AddressType::Enum)2u> >&}]’
/home/mribbons/BlockSci2/libs/variant/include/mpark/variant.hpp:529:15: required from ‘static constexpr decltype(auto) mpark::detail::visitation::base::dispatcher<Is>::impl<F, Vs>::dispatch(F, Vs ...) [with F = mpark::detail::visitation::variant::value_visitor<AddressWriter::serialize(const AnyScriptOutput&, uint32_t)::<lambda(auto:16&)> >&&; Vs = {const mpark::detail::base<(mpark::detail::Trait)1, ScriptOutput<(blocksci::AddressType::Enum)0u>, ScriptOutput<(blocksci::AddressType::Enum)1u>, ScriptOutput<(blocksci::AddressType::Enum)2u>, ScriptOutput<(blocksci::AddressType::Enum)3u>, ScriptOutput<(blocksci::AddressType::Enum)4u>, ScriptOutput<(blocksci::AddressType::Enum)5u>, ScriptOutput<(blocksci::AddressType::Enum)6u>, ScriptOutput<(blocksci::AddressType::Enum)7u> >&}; long unsigned int ...Is = {2ul}]’
// plus more erros
Full log here:
Also it looks like src/blocksci/heuristics/blockchain_heuristics.hpp was missing #include <stdio.h>
Thanks again for the big code dump, I look forward to testing it out and hopefully contributing!
Assuming BlockSci was tested under latest Python 2.x. Just wanted to ask about Python3 status.
I'm on a macOS 10.13. I tried to follow the readme to get to the point when I would be able to exercise BlockSci Demo jupyter notebook. I'm a Python noob and new to Jupyter so maybe I'm missing something here, but I struggled to get it fully working.
blocksci_interface.so
But it wasn't compatible with Python2. I wasn't able to import it in Python 2.7.13 interactive shell, got:
ImportError: dlopen(blocksci/blocksci_interface.so, 2): Symbol not found: _PyInstanceMethod_Type
Referenced from: blocksci/blocksci_interface.so
Expected in: flat namespace
in blocksci/blocksci_interface.so
It turned out that importing it in Python 3.6.1 |Anaconda custom (x86_64)| works, but the blocksci glue python code itself might not be Python3-ready. I had to change from multiprocess import Pool
to from multiprocessing import Pool
. This allowed me to run the demo notebook except for the mapreduce_block_ranges-related cells which failed with Can't pickle local object 'map_blocks.<locals>.mapFunc'
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-27df13946b17> in <module>()
----> 1 get_ipython().magic('time net_coins_per_block = chain.map_blocks(lambda block: block.net_address_type_value())')
/Users/darwin/anaconda/lib/python3.6/site-packages/IPython/core/interactiveshell.py in magic(self, arg_s)
2156 magic_name, _, magic_arg_s = arg_s.partition(' ')
2157 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
-> 2158 return self.run_line_magic(magic_name, magic_arg_s)
2159
2160 #-------------------------------------------------------------------------
/Users/darwin/anaconda/lib/python3.6/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line)
2077 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2078 with self.builtin_trap:
-> 2079 result = fn(*args,**kwargs)
2080 return result
2081
<decorator-gen-59> in time(self, line, cell, local_ns)
/Users/darwin/anaconda/lib/python3.6/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
186 # but it's overkill for just that one bit of state.
187 def magic_deco(arg):
--> 188 call = lambda f, *a, **k: f(*a, **k)
189
190 if callable(arg):
/Users/darwin/anaconda/lib/python3.6/site-packages/IPython/core/magics/execution.py in time(self, line, cell, local_ns)
1183 else:
1184 st = clock2()
-> 1185 exec(code, glob, local_ns)
1186 end = clock2()
1187 out = None
<timed exec> in <module>()
/Users/darwin/code/bitcoin-research/BlockSci/Notebooks/blocksci/__init__.py in map_blocks(self, blockFunc, start, end, cpu_count)
65 return [blockFunc(block) for block in blocks]
66
---> 67 return mapreduce_block_ranges(self, mapFunc, operator.concat, list(), start, end, cpu_count)
68
69 def filter_blocks(self, filterFunc, start = None, end = None, cpu_count=psutil.cpu_count()):
/Users/darwin/code/bitcoin-research/BlockSci/Notebooks/blocksci/__init__.py in mapreduce_block_ranges(chain, mapFunc, reduceFunc, init, start, end, cpu_count)
39 results_future = p.map_async(mapFunc, segments[1:])
40 last = mapFunc(segments[0])
---> 41 results = results_future.get()
42 results.insert(0, last)
43 return reduce(reduceFunc, results, init)
/Users/darwin/anaconda/lib/python3.6/multiprocessing/pool.py in get(self, timeout)
606 return self._value
607 else:
--> 608 raise self._value
609
610 def _set(self, i, obj):
/Users/darwin/anaconda/lib/python3.6/multiprocessing/pool.py in _handle_tasks(taskqueue, put, outqueue, pool, cache)
383 break
384 try:
--> 385 put(task)
386 except Exception as e:
387 job, ind = task[:2]
/Users/darwin/anaconda/lib/python3.6/multiprocessing/connection.py in send(self, obj)
204 self._check_closed()
205 self._check_writable()
--> 206 self._send_bytes(_ForkingPickler.dumps(obj))
207
208 def recv_bytes(self, maxlength=None):
/Users/darwin/anaconda/lib/python3.6/multiprocessing/reduction.py in dumps(cls, obj, protocol)
49 def dumps(cls, obj, protocol=None):
50 buf = io.BytesIO()
---> 51 cls(buf, protocol).dump(obj)
52 return buf.getbuffer()
53
AttributeError: Can't pickle local object 'map_blocks.<locals>.mapFunc'
So the question is: Should I dig deeper into this Python3 case or should I somehow figure out how to compile blocksci_interface.so
against Python2 libraries and switch Anaconda to Python2 instead?
Please support the bootstrap.dat File format.
This would speed up a lot ... This 150GB bootstrap-files can be downloaded and importet to bitcoin core but import takes a looong time. It would be extremly helpful when BlockSci directly could use bootstrap-files.
Hello!
I am trying to get things going with blocksci (I am running a full bitcoin core node). When running blocksci_parser as indicated in the guide the following happened:
$ blocksci_parser --output-directory bitcoin-data update disk --coin-directory .bitcoin
100.0% done fetching block headers
Starting with chain of 0 blocks
Removing 0 blocks
Adding 501332 blocks
1.41% done, Block 184396/501332
3.49% done, Block 212576/501332
Back linking transactions
99.96% done
3.94% done, Block 216881/501332Segmentation fault (core dumped)
If I now try to re-run the program, I get an exception
$ blocksci_parser --output-directory bitcoin-data update disk --coin-directory .bitcoin
100.0% done fetching block headers
Starting with chain of 217054 blocks
Removing 0 blocks
Adding 284318 blocks
0.00% done, Block 217055/501372terminate called after throwing an instance of 'NextQueueFinishedEarlyException'
what(): Next queue finished early
Aborted (core dumped)
The whole issue is very much reproducible. I've tried to re-sync the BTC node, re-run blocksci_parser and the same thing happens.
Can someone explain to me what is happening here? Is there any workaround for this issue?
I'm guessing that it's hitting some limit on the maximum number of entries that can be returned.
Works
Fails (in screenshot above)
I ran the following command with correct coin data directory,
blocksci_parser --coin-directory .bitcoin --output-directory bitcoin-data
But the parser is not giving any output or indications of processing. Also size of bitcoin-data folder is not increasing? How long does the parsing take - and why is it not giving any processing indication?
Also, does blocksci_parser only work if we have complete chain data?
I'm installing on osx but I don't think it's an OS issue. Following the installation instructions, I managed to get pretty far until the 'make' command here:
cd ../../..
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Which resulted in the following error:
[ 0%] Building CXX object src/blocksci/CMakeFiles/blocksci_static.dir/address/address.cpp.o
In file included from /Users/timothylim/repos/BlockSci/src/blocksci/address/address.cpp:19:
In file included from /Users/timothylim/repos/BlockSci/src/blocksci/index/address_index.hpp:17:
/Users/timothylim/repos/BlockSci/libs/lmdbxx/lmdb++.h:25:10: fatal error: 'lmdb.h' file not found
#include <lmdb.h> /* for MDB_*, mdb_*() */
^
1 error generated.
Unfortunately, I'm not proficient in c++ and am having trouble debugging this.
Hi, I'm seeing the following error message when running cpp.filter_tx function in the example notebook...
In file included from /tmp/tmphd7l1hcp/dynamicCode0.cpp:2:0:
/home/ubuntu/BlockSci/libs/pybind11/include/pybind11/pybind11.h:1338:2: warning: extra ‘;’ [-Wpedantic]
};
^
CPU times: user 1min 33s, sys: 28 ms, total: 1min 33s
Wall time: 20.4 s
In [13]:
Since segwit was activated at block 494,784, the limiting resource on block space is 'weight', which is defined in BIP 141 as:
Block weight is defined as Base size * 3 + Total size. (rationale[3])
Base size is the block size in bytes with the original transaction serialization without any witness-related data, as seen by a non-upgraded node.
Total size is the block size in bytes with transactions serialized as described in BIP144, including base data and witness data.
For fee market analysis, the relevant metric is transaction weight (Base transaction size * 3 + Total transaction size), which can be normalized to virtual size (Transaction weight / 4). This is because miners will order transactions by fee/virtual byte to maximize the fee yield from a block.
For transactions without any segwit inputs, virtual size is the same as size.
BlockSci should therefore store the tx virtual size instead of tx size. Virtual size is exposed in the getrawtransaction
and getblock
(with verbosity=2) RPC methods as vsize
.
Thanks a lot for creating BlockSci. I'm following the local setup on a new ubuntu 16.04 and I got the error below. Do you have any advice?
Thanks,
Daniel
ubuntu@ip-172-31-24-144:~/BlockSci/release$ sudo make install [ 36%] Built target blocksci_static [ 72%] Built target blocksci [ 89%] Built target blocksci_parser [ 91%] Built target mempool_recorder [ 92%] Building CXX object src/python-interface/CMakeFiles/blocksci_interface.dir/output_py.cpp.o In file included from /home/ubuntu/BlockSci/libs/range-v3/include/range/v3/view_facade.hpp:21:0, from /home/ubuntu/BlockSci/src/blocksci/util/file_mapper.hpp:17, from /home/ubuntu/BlockSci/src/blocksci/chain/chain_access.hpp:16, from /home/ubuntu/BlockSci/src/blocksci/chain/output.hpp:14, from /home/ubuntu/BlockSci/src/blocksci/chain/transaction.hpp:13, from /home/ubuntu/BlockSci/src/blocksci/chain/block.hpp:13, from /home/ubuntu/BlockSci/src/python-interface/ranges_py.hpp:11, from /home/ubuntu/BlockSci/src/python-interface/output_py.cpp:9: /home/ubuntu/BlockSci/libs/range-v3/include/range/v3/view_interface.hpp: In substitution of 'template<class Container, class D, class, int _concept_requires_341, typename std::enable_if<((_concept_requires_341 == 43) || std::is_same<std::integer_sequence<bool, typename ranges::v3::concepts::models<ranges::v3::concepts::Range, T>::type:: value, typename std::integral_constant<bool, (! typename ranges::v3::concepts::models<ranges::v3::concepts::View, T>::type:: value)>::type:: value, typename ranges::v3::concepts::models<ranges::v3::concepts::MoveConstructible, T>::type:: value, typename ranges::v3::concepts::models<ranges::v3::concepts::ConvertibleTo, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>()))>::type, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<T&>()))>::type>::type:: value, typename ranges::v3::concepts::models<ranges::v3::concepts::Constructible, Container, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type>::type:: value>, std::integer_sequence<bool, (typename ranges::v3::concepts::models<ranges::v3::concepts::Range, T>::type:: value || true), (typename std::integral_constant<bool, (! typename ranges::v3::concepts::models<ranges::v3::concepts::View, T>::type:: value)>::type:: value || true), (typename ranges::v3::concepts::models<ranges::v3::concepts::MoveConstructible, T>::type:: value || true), (typename ranges::v3::concepts::models<ranges::v3::concepts::ConvertibleTo, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>()))>::type, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<T&>()))>::type>::type:: value || true), (typename ranges::v3::concepts::models<ranges::v3::concepts::Constructible, Container, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type>::type:: value || true)> >()), int>::type <anonymous> > ranges::v3::view_interface<Derived, <anonymous> >::operator Container() const [with Container = auto:3; D = ranges::v3::any_view<blocksci::Output>; <template-parameter-1-3> = <missing>; int _concept_requires_341 = <missing>; typename std::enable_if<((_concept_requires_341 == 43) || std::is_same<std::integer_sequence<bool, typename ranges::v3::concepts::models<ranges::v3::concepts::Range, T>::type:: value, typename std::integral_constant<bool, (! typename ranges::v3::concepts::models<ranges::v3::concepts::View, T>::type:: value)>::type:: value, typename ranges::v3::concepts::models<ranges::v3::concepts::MoveConstructible, T>::type:: value, typename ranges::v3::concepts::models<ranges::v3::concepts::ConvertibleTo, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>()))>::type, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<T&>()))>::type>::type:: value, typename ranges::v3::concepts::models<ranges::v3::concepts::Constructible, Container, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type>::type:: value>, std::integer_sequence<bool, (typename ranges::v3::concepts::models<ranges::v3::concepts::Range, T>::type:: value || true), (typename std::integral_constant<bool, (! typename ranges::v3::concepts::models<ranges::v3::concepts::View, T>::type:: value)>::type:: value || true), (typename ranges::v3::concepts::models<ranges::v3::concepts::MoveConstructible, T>::type:: value || true), (typename ranges::v3::concepts::models<ranges::v3::concepts::ConvertibleTo, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>()))>::type, typename ranges::v3::value_type<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<T&>()))>::type>::type:: value || true), (typename ranges::v3::concepts::models<ranges::v3::concepts::Constructible, Container, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type, typename meta::v1::detail::_if_<meta::v1::list<std::is_same<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))>, decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), ranges::v3::_common_iterator_::common_iterator<decltype (ranges::v3::function_objects::{anonymous}::begin(declval<const D&>())), decltype (ranges::v3::function_objects::{anonymous}::end(declval<const D&>()))> >, std::integral_constant<bool, true> >::type>::type:: value || true)> >()), int>::type <anonymous> = <missing>]': /home/ubuntu/BlockSci/src/python-interface/output_py.cpp:141:20: required from 'init_output(pybind11::module&)::<lambda(auto:13&&, auto:14)> [with auto:13 = ranges::v3::any_view<blocksci::Output>&; auto:14 = addOutputRangeMethods(Class&, FuncApplication)::<lambda(Range&)> [with Class = pybind11::class_<ranges::v3::any_view<blocksci::Output> >; FuncApplication = init_output(pybind11::module&)::<lambda(auto:13&&, auto:14)>; Range = ranges::v3::any_view<blocksci::Output>]::<lambda(auto:3&&)>]' /home/ubuntu/BlockSci/src/python-interface/output_py.cpp:63:20: required from 'addOutputRangeMethods(Class&, FuncApplication)::<lambda(Range&)> [with Class = pybind11::class_<ranges::v3::any_view<blocksci::Output> >; FuncApplication = init_output(pybind11::module&)::<lambda(auto:13&&, auto:14)>; Range = ranges::v3::any_view<blocksci::Output>]' /home/ubuntu/BlockSci/src/python-interface/output_py.cpp:63:16: required from 'struct addOutputRangeMethods(Class&, FuncApplication) [with Class = pybind11::class_<ranges::v3::any_view<blocksci::Output> >; FuncApplication = init_output(pybind11::module&)::<lambda(auto:13&&, auto:14)>]::<lambda(using Range = using type = struct ranges::v3::any_view<blocksci::Output>&)>' /home/ubuntu/BlockSci/src/python-interface/output_py.cpp:61:5: required from 'void addOutputRangeMethods(Class&, FuncApplication) [with Class = pybind11::class_<ranges::v3::any_view<blocksci::Output> >; FuncApplication = init_output(pybind11::module&)::<lambda(auto:13&&, auto:14)>]' /home/ubuntu/BlockSci/src/python-interface/output_py.cpp:142:6: required from here /home/ubuntu/BlockSci/libs/range-v3/include/range/v3/view_interface.hpp:340:17: internal compiler error: in dependent_type_p, at cp/pt.c:21233 typename = typename Container::allocator_type, // HACKHACK ^ Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions. src/python-interface/CMakeFiles/blocksci_interface.dir/build.make:206: recipe for target 'src/python-interface/CMakeFiles/blocksci_interface.dir/output_py.cpp.o' failed make[2]: *** [src/python-interface/CMakeFiles/blocksci_interface.dir/output_py.cpp.o] Error 1 CMakeFiles/Makefile2:393: recipe for target 'src/python-interface/CMakeFiles/blocksci_interface.dir/all' failed make[1]: *** [src/python-interface/CMakeFiles/blocksci_interface.dir/all] Error 2 Makefile:129: recipe for target 'all' failed make: *** [all] Error 2 ubuntu@ip-172-31-24-144:~/BlockSci/release$
When I run blocksci_parser to update it throws error msg without much context, I'm wondering if there's any way to solve it?
I kept running the command to make sure that blockSci is up to date, and the first few times everything is fine, it's only after running it several times that the error starts to occur. The machine has 60GB RAM and is no where near full capacity when I run the erring command.
# blocksci_parser --output-directory /home/ubuntu/bitcoin update --max-block 502264 disk --coin-directory /home/ubuntu/.bitcoin
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
And it looks like it's bitcoin/parser/blockList.dat
causing the problem. Once I remove this file blocksci_parser will work again
Hello,
I was trying to figure out how BlockSci works, but I was not able to obtain list of transaction for a given address num.
add_num = 10000
address = blocksci.Address(add_num, blocksci.address_type.pubkeyhash)
But:
address.txes()
keeps giving me an empty list.
Currently data regarding orphaned blocks is completely ignored by BlockSci. It would be nice to instead have the parser serialize this data somewhere and make it available through an interface in the analysis library.
Currently BlockSci data files consist of the direct serialization of BlockSci's data structures from memory onto disk in the exact layout which the compiler assigns. This allows data to be loaded with near 0 processing necessary, but also means that distribution of BlockSci's data files is difficult since it is dependent on the many factors that can effect memory layout of C++ classes.
Creating a platform independent intermediate data format would allow us to distribute our processed Blockchain data so that others could download it rather than requiring that people run BlockSci's parser themselves.
Further incremental data updates could be posted which would allow people to maintain fairly up to date copies of BlockSci blockchain data without running a full node.
I am getting segmentation fault when running clusterer with the recently updated code. Can you please look into it?
$ clusterer /home/user/bitcoin-data
Segmentation fault (core dumped)
Dask provides a similar API to Pandas and supports datasets larger than can fit into RAM.
From https://dask.pydata.org/en/latest/dataframe.html :
A Dask DataFrame is a large parallel dataframe composed of many smaller Pandas dataframes, split along the index. These pandas dataframes may live on disk for larger-than-memory computing on a single machine, or on many different machines in a cluster.
dask
I really want use BlockSci in ap-northeast region in AWS.
Is there any plan to enable AMI image in other regions?
I'm asking this because I couldn't make it work BlockSci on my own instance. And I want to compare with reference ami.
Tell me if there is no plan to do it. Thanks.
~/Documents/BlockSci/release$ make
[ 1%] Building CXX object src/blocksci/CMakeFiles/blocksci.dir/data_access.cpp.o
In file included from /home/rodomonte/Documents/BlockSci/src/blocksci/scripts/script_access.hpp:12:0,
from /home/rodomonte/Documents/BlockSci/src/blocksci/data_access.hpp:12,
from /home/rodomonte/Documents/BlockSci/src/blocksci/data_access.cpp:9:
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp: In function ‘constexpr bool blocksci::isSpendable(blocksci::AddressType::Enum)’:
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp:243:5: error: expression ‘<throw-expression>’ is not a constant-expression
}
^
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp: In function ‘constexpr blocksci::AddressType::Enum blocksci::addressAddressType(blocksci::AddressType::Enum)’:
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp:253:5: error: expression ‘<throw-expression>’ is not a constant-expression
}
^
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp: In function ‘constexpr bool blocksci::hasNestedAddresses(blocksci::AddressType::Enum)’:
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp:263:5: error: expression ‘<throw-expression>’ is not a constant-expression
}
^
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp: In function ‘constexpr int blocksci::getDBType(blocksci::AddressType::Enum)’:
/home/rodomonte/Documents/BlockSci/src/blocksci/address/address_info.hpp:273:5: error: expression ‘<throw-expression>’ is not a constant-expression
}
^
src/blocksci/CMakeFiles/blocksci.dir/build.make:86: recipe for target 'src/blocksci/CMakeFiles/blocksci.dir/data_access.cpp.o' failed
make[2]: *** [src/blocksci/CMakeFiles/blocksci.dir/data_access.cpp.o] Error 1
CMakeFiles/Makefile2:103: recipe for target 'src/blocksci/CMakeFiles/blocksci.dir/all' failed
make[1]: *** [src/blocksci/CMakeFiles/blocksci.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
any idea why? (all precedent commands works perfectly.)
I tried rebuilding the clusters and now I get a segmentation fault when I call the python cluster_with_address method.
This was working before rebuilding the clusters. Afterwards the following script:
import blocksci
from blocksci import *
import blocksci.cluster_python
chain = blocksci.Blockchain("/home/ubuntu/bitcoin/")
print(chain)
print("loading clusters\n")
cm = blocksci.cluster_python.ClusterManager("/home/ubuntu/bitcoin/clusters")
print(cm)
address = blocksci.Address.from_string("15rg7dmf9PS6dPdne3F816rKLmDsDNxex9")
print(address)
print(address.out_txes()[0].hash)
print("Loading cluster")
cluster = cm.cluster_with_address(address)
causes a segmentation fault:
<blocksci.blocksci_interface.Blockchain object at 0x7f1cde3fbeb8>
loading clusters
<blocksci.cluster_python.ClusterManager object at 0x7f1cfcd5d500>
Address(addressNum=52075814, type=pubkeyhash)
b35744527be738a9f2dc01e61d3e2268e7f76a4a770d725dce73635acbf524da
Loading cluster
Segmentation fault (core dumped)
I have also tried deleting the bitcoin data directory, along with a fresh checkout of BlockSci (master branch), rebuilding all tools and rebuilding the bitcoin data directory. Same result.
Copying the original *.dat files back in the bitcoin/clusters directory also crashes. So, it would seem reasonable that it's something else causing the issue.
Is this a known issue? What might I do to debug this?
On my machine (Ubuntu 16.04) I had a missing librari when compiling bitcoin-api-cpp
json.h: File o directory non esistente
#include <json/json.h>
^
compilation terminated.
the problem is the position where the package is installed to solve the issue I brutally created a symlink
sudo ln -s /usr/include/jsoncpp/json .
Currently we only have partial support for handling blockchain reorganizations so when running the parser after a block has been orphaned, data corruption or inconsistencies are possible. Therefore automatic blockchain updates are not enabled in the AMI for the current release.
A Dockerfile to build and host these notebooks would be helpful.
There are cookiecutter templates for creating git repos w/ .gitignore and a Makefile and ... for these types of projects:
There are also Docker containers which make it easy to launch a complete, consistent software environment:
Data Visualization w/ Jupyter Notebooks:
Python & Jupyter resources:
This is a continuation of #56
I noticed that sometimes script.revealed_tx throws an index out of bounds exception. I looked through the code and I cannot say I fully understand it so I might be completely wrong, but I think this is normal because sometimes you just return new Transaction(MAX_INT) and that is why the error is thrown...
Hi, cloned the source yesterday, and trying to run the parser on my testnet3 directory, but blocksci_parser errors out with "Error, data directory does not contain config.ini. Are you sure "/data/blocksci/bitcoin-data" was the output directory of blocksci_parser?" This is the very first time I've run blocksci_parser. Creating an empty 'config.ini' doesn't help, I get "Error, parser data is not in the correct format. To fix you must delete the data file and rerun the parser" in that case.
Is there a base 'config.ini' I should try using, or should blocksci_parser create one for me?
The BlockSci parser takes quite a while to run and there is currently no way to interrupt it mid run without leading to data corruption. Adding SIGINT handling to allow clean shutdown would make it easier to work with the parser.
So, it's taking a long time to process the entire BTC blockchain. I had to reboot the machine I'm using.
When I try to run the parser again I get these errors. Should I perhaps delete some partially written block files in order to resume processing? I really don't want to start from scratch again.
I did start with a completely new parser data folder after the recent release, I have also just updated to edb6b46 and the issue still occurs.
Is this the same issue as #31?
mribbons@toastname:~$ blocksci_parser --coin-directory ~/.bitcoin --output-directory ~/blocksciparse2
0.00% done, Block 375436/498166terminate called after throwing an instance of 'NextQueueFinishedEarlyException'
what(): Next queue finished early
Aborted (core dumped)
mribbons@toastname:~$ blocksci_parser --coin-directory ~/.bitcoin --output-directory ~/blocksciparse2
100.0% done fetching block headers
Starting with chain of 375466 blocks
Removing 0 blocks
Adding 122700 blocks
terminate called after throwing an instance of 'NextQueueFinishedEarlyException'
what(): Next queue finished early
Aborted (core dumped)
mribbons@toastname:~$ blocksci_parser --coin-directory ~/.bitcoin --output-directory ~/blocksciparse2
100.0% done fetching block headers
Starting with chain of 375488 blocks
Removing 0 blocks
Adding 122678 blocks
0.00% done, Block 375489/498166terminate called after throwing an instance of 'NextQueueFinishedEarlyException'
what(): Next queue finished early
Aborted (core dumped)
Upon running make in libs/bitcoin-api-cpp, I get the following error:
[ 50%] Built target bitcoinapi_static
[ 75%] Linking CXX shared library libbitcoinapi.dylib
Undefined symbols for architecture x86_64:
"Json::ValueIterator::ValueIterator(Json::ValueIterator const&)", referenced from:
BitcoinAPI::getaddednodeinfo(bool) in bitcoinapi.cpp.o
BitcoinAPI::getaddednodeinfo(bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in bitcoinapi.cpp.o
BitcoinAPI::getpeerinfo() in bitcoinapi.cpp.o
BitcoinAPI::listreceivedbyaccount(int, bool) in bitcoinapi.cpp.o
BitcoinAPI::listreceivedbyaddress(int, bool) in bitcoinapi.cpp.o
BitcoinAPI::gettransaction(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in bitcoinapi.cpp.o
BitcoinAPI::listtransactions() in bitcoinapi.cpp.o
...
__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) in bitcoinapi.cpp.o
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/bitcoinapi/libbitcoinapi.0.1.0.dylib] Error 1
make[1]: *** [src/bitcoinapi/CMakeFiles/bitcoinapi.dir/all] Error 2
make: *** [all] Error 2
The tool is great and useful for research in science.
But is it possible to make more ways to deploy it? Google Cloud? Or maybe Docker?
I'm running the provided EC2 demo of BlockSci with the provided Jupyter notebook, but after a full day of usage (i.e. enough to fix the AWS performance issue), my queries are still very slow! I'm using the r4.2xlarge instance.
For example:
balances = utxo_addrs['addr_string'].map(lambda x: blocksci.Address.from_string(x).balance())
CPU times: user 328 ms, sys: 128 ms, total: 456 ms
Wall time: 5.02 s
I'm trying to get the balances of 10,000 addresses from their string representations, and it takes a whole 5 seconds!
import blocksci
chain = blocksci.Blockchain("/home/ubuntu/bitcoin/")
// Genesis block's payout address
address = blocksci.Address.from_string("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa")
address.balance() /1e8
>>> 16.7041087
Balance there should be 66.7041087
Cool project!
Hi!
Your tools seems very great but i have a problem when i uses the standard blocksci_parser command
blocksci_parser --output-directory bitcoin-data update disk --coin-directory .bitcoin
It seems to parse only 499291 blocks but there is currently 504087 saved by bitcoind on my hdd.
bitcoin-cli getblockcount
504087
I tried to reforce the parse but the number of block didn't increase...
This is the message returned by the parser:
`blocksci_parser --output-directory bitcoin-data update disk --coin-directory .bitcoin
100.0% done fetching block headers
Starting with chain of 499291 blocks
Removing 0 blocks
Adding 0 blocks
Updating hash index
Updating index with scripts of type nonstandard_script
Updating index with scripts of type pubkey_script
Updating index with scripts of type scripthash_script
Updating index with scripts of type multisig_script
Updating index with scripts of type null_data_script
Updating address index
Updating index with scripts of type nonstandard_script
Updating index with scripts of type pubkey_script
Updating index with scripts of type scripthash_script
Updating index with scripts of type multisig_script
Updating index with scripts of type null_data_script`
Have an idea
Thanks in advance
Crunchy
Sometimes when doing the initial block list generation the block file parser causes a segfault when it reads beyond the bounds of the file into a new page.
Hi there,
When I start with import blocksci I get the error message below:
Python 3.6.3 (default, Oct 3 2017, 21:45:48)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
import blocksci
Traceback (most recent call last):
File "", line 1, in
File "/home/nowhere/BlockSci/blocksci/init.py", line 1, in
from blocksci.blocksci_interface import *
ModuleNotFoundError: No module named 'blocksci.blocksci_interface'
I looked for the file in my system and on GIT and the file is missing. There is no blocksci_interface.so file.
Can you help?
Regards,
Miguel Piedade
I'm interested in running BlockSci as a web service where users can run queries against the python interface through a REST API. I have a few questions regarding this:
How does the provided AMI keep in sync with the network? Would it be sufficient to run the AMI and spin up a flask server with BlockSci installed?
If I were to install BlockSci alongside a Core Node, would I need 60GB worth of RAM to parse it whenever a new block comes in? Or is that just necessary to build the DB at the beginning?
Thank you!
Hi,
after following the build instruction I want to try the python interface:
BlockSci/Notebooks$ python3
Python 3.5.2 (default, Aug 18 2017, 17:48:00)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import blocksci
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/BlockSci/Notebooks/blocksci/__init__.py", line 1, in <module>
from blocksci.blocksci_interface import *
ImportError: No module named 'blocksci.blocksci_interface'
in the directory blocksci I have a file blocksci_interface.cpython-36m-x86_64-linux-gnu.so
which I think its supposed to satisfy the import but maybe something it's wrong
Currently ChainIndex reads through the blk files in order to create a list of all of the blocks stored by the node before any further processing can begin. So far this process is single threaded, but it should be fairly trivial to make it multithreaded by reading each file in a separate thread since order does not matter.
Hi!
I am trying to run the tool with Zcash, I ran the whole setup according to the readme, but after a lot of testing the RPC parser still says:
terminate called after throwing an instance of 'Json::LogicError'
what(): Value is not convertible to UInt.
Any idea of what can be the problem? Is there something else I have to specify to make the tool compatible with Zcash?
Amazing tool for blockchain analysis, but I want to use it with my Windows PC and Visual Studio...
Just read the paper, thanks for this amazing tool! However I'm getting very slow execution times even though I'm using the same AWS setup as specified in the README:
For example the following line, taken from the example notebook, takes a total of 11 minutes to execute (vs. the 17.5 seconds in the demo notebook): %time txes = chain.script_type_txes(0, len(chain), blocksci.nulldata)
. It's a fresh instance and I haven't tweaked anything. Any idea what I might be doing wrong?
Hi, I am trying to run some blockchain analysis to count how many bitcoins are in unspent outputs secured by public keys that are revealed in some transaction.
I am currently using out.address.script.revealed_tx to identify the outputs which have addresses which are revealed somewhere else. Can you please help me out and let me know if I am on the right path?
Here is my code:
# bitcoins in unspent outputs with addresses revealed in some input
s = []
c = []
for i in range(len(chain)):
add = 0
count = 0
for out in chain[i].outputs.unspent.all:
try:
out.address.script.revealed_tx
count += 1
add += out.value
except Exception as e:
pass
s.append(add)
c.append(count)
ss = np.cumsum(s)
cc = np.cumsum(c)
blocksci_parser only gets blocks up to 478559. We tried the amazon image with an instance as described in the docs. We also tried our own node with +60GB RAM and updated blockchain, but we are getting the same result.
fede@deic-satoshi:/home/bitcoin/BlockSci/release/bin$ sudo -u bitcoin blocksci_parser --output-dir
ectory /home/bitcoin/blocksci_parsed_output/ update disk --coin-directory /home/bitcoin/.bitcoin/
No block file "/home/bitcoin/.bitcoin/blocks/blk01135.dat"
Starting with chain of 0 blocks
Removing 0 blocks
Adding 478559 blocks
Beginning block processing
99.9% done
Done processing txes
Back updating tx indexes
Beginning update
99.9% doneUpdating first seen index
Updating address database
fede@deic-satoshi:/home/bitcoin/BlockSci/release/bin$
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.