Si solo estas interesado en ver las graficas principales, no merece la pena que extraigas la blockchain de tu wallet. Con un solo golpe de Google, aparecen unos cuantos servicios interesantes online que te dan toda la informacion.
- http://bitcoin.sipa.be/ muestra como esta evolucionando la potencia de calculo de la red. Esto es quizas lo mas importante por dos motivos:1) la potencia de calculo indica el beneficio potencial de la contabilidad, dado que se reparten en promedio 25 bitcoins nuevas cada diez minutos, y estas caeran con probabilidad proporcional a la parte que tengas en la potencia total. Asi que no se saca el mismo beneficio de añadir una GPU al pool P2P cuando hay poca potencia global que cuando hay mucha.2) la unica vulnerabilidad de bitcoin es que una guild o un ordenador particular sea capaz de vencer en potencia de calculo al resto y por tanto decidir que transacciones se apuntan en la contabilidad final. Esto es porque en caso de split la cadena de bloques contables (de «hojas de Barcenas») mas larga gana, en lo que viene a ser una votacion proporcional al tiempo de cpu; en vez de un hombre un voto, aqui es un megaflop (o un gigahash, mas bien) un voto.
- http://blockchain.info/charts y en general todo lo de este sitio web, empezando por su dashboard http://blockchain.info/es/ con las diez ultimas transacciones. Hace unas semanas, nueve de cada diez eran operaciones de SatoshiDice, ahora el panorama ha cambiado.Las charts ofrecen un monton de informacion interesante. Por ejemplo el volumen diario de salida, http://blockchain.info/es/charts/output-volume y algunos filtrados de ello http://blockchain.info/es/charts/estimated-transaction-volume Parece que mas o menos se mueve lo mismo, a pesar de que cada dia los mineros añaden miles de monedas al tesoro. Esto podria avalar la teoria del acaparamiento (y la deflaccion famosa).
- http://bitcoincharts.com/charts/ tiene visualizadores de las cotizaciones (respecto a varias monedas, aunque no se si son simplemente respecto al dolar y multiplicar, o si toma el dato diariamente), y una opcion de descargarse la tabla.
Un segundo nivel, todavia sin hacer procesado propio, es tirar de la API de blockexplorer
http://blockexplorer.com/q No solo te da una forma de descargar las transacciones sin tener que installar bitcoind; ademas presenta las estadisticas basicas, promedios etc, que hasta pueden valer para tus propios gadgets en paginas web y tal. Eso si, anda el pobre un poco sobrecargado.
Por ultimo, podemos extraer nosotros mismos las transacciones, dado que bitcoind esta obligado al menos a conservar todas las que contienen pagos aun abiertos, y de hecho no les ha merecido la pena aun a los contables-mineros el hacer la purga de las ya finiquitadas. Asi que se puede ir sacando el JSON a golpe de
bitcoind getrawtransaction
La pregunta es, ok, ¿que hacemos con esto? Si solo se trata de mirar las ultimas, con darselo de comer a python seguramente vale. Si queremos analizarlas todas, tendremos que contar con sitio para 15 millones de transacciones y a razon de un par de millones por mes, gracias sean dadas sobre todo a los pesados de SatoshiDice, que generan cuatro por jugada. Total, que estamos ya en big data: Cassandra, Mongo, HBase, Redis…
Yo otras veces he probado con CouchDB y con Redis, que son bastante majas si tu intencion es ya de partida que este todo en RAM. De hecho Redis es mas bien una BBDD en RAM con backups a disco a intervalos fijos. Esta vez lo he intentado primero con Mongo (por eso de que tiene el mapReduce autoctono en javascript) y tras un rato de desesperacion me he pasado a Cassandra en una configuracion de seis o siete maquinas virtuales para acumular un total de 64 megas de RAM. Con eso se pueden sacar velocidades decentes de tres o cuatro mil operaciones por segundo. Me he encontrado tambien con que se saca mas velocidad con el driver de NodeJS (Helenus) que con el de Python (pycassa), aunque ninguno de los dos es capaz de usar multiples nucleos.
Postscript: Detallitos
- En algunas versiones de bitcoind y algunas configuraciones de unix, el limite de buffer provoca que las transacciones muy grandes no se extraen. Una solucion cutre, para no marear mucho con xargs –max-chars y todo eso, es inyectar como comando
echo {\"method\": \"decoderawtransaction\", \"params\": [\"$(bitcoind getrawtransaction 42f4500dec4c6f8cd41337767bdf7e2caa48c153ae2114334a645ac927d03766)\"] } | curl --user XXX:YYY --data-binary @- -H 'content-type: text/plain;' http://127.0.0.1:8332 | grep -o ^...........................................................
O algo asi. Ya lo he dicho, es cutre, pero te saca del apuro si te encuentras con este problema.
- Node es la repanocha para manejar el json, que para algo es javascript en el servidor… pero su tratamiento de ficheros de texto es un pelin pobre. A falta de coroutines, hay que poner en algun lado un emisor de eventos e ir procesando el texto en bruto. Tal que asi
process.stdin.pause() var backlog = '' process.stdin.on('data', function (data) { backlog += data var n = backlog.indexOf('\n') while (~n) { process.stdin.emit('line', backlog.substring(0, n)) backlog = backlog.substring(n + 1) n = backlog.indexOf('\n') } })
Deja una respuesta