Historia del BitCoins

Desde la década de 1970, la utilización de firmas digitales basadas en criptografía de clave pública ha proporcionado un fuerte control de propiedad. Sobre la base de la criptografía de clave pública, en 1998 Wei Dai describe b-Money, una solución descentralizada al problema de pagos electrónicos. Posteriormente, Nick Szabo y Hal Finney extienden y complementan el trabajo de Wei Dai.
En 2008, Satoshi Nakamoto publica un artículo en la lista de criptografía de metzdowd.com donde describe el protocolo Bitcoin

El 3 de enero de 2009 la red P2P de Bitcoin entra en funcionamiento con la publicación del primer programa cliente, de código abierto, y la creación de los primeros bitcoins. Hasta la invención de bitcoin era obligado que todos los pagos en el comercio electrónico se canalizaran a través de entidades centralizadas de confianza, generalmente bancos y otras empresas financieras, que gestionaban el seguimiento de todas las transacciones.

 Ahora bien tenemos las Aplicaciones nativas. El cual nos ayudaran con el almacenamiento de estas Cryptomonedas. Les pondré mas mas recomendadas en otras entradas al Blog.

Programación

Bitcoin Core proporciona una API en JSON-RPC para acceder a la red Bitcoin. Es habitual que los desarrolladores prefieran programar en modo regtest, que permite desarrollar en una cadena de bloques privada con control total del entorno, creación de transacciones con confirmaciones instantáneas y sin necesidad de gastar bitcoins reales.
BitcoinJ es una librería popular para el lenguaje Java.

Se conecta directamente a la red Bitcoin, no necesita de entidades de confianza y descarga una versión reducida de la cadena de bloques. Forma parte del código de Multibit y del Bitcoin Wallet para Android y Blackberry OS.

Construcción de la cadena de bloques

Todos los nodos que forman parte de la red Bitcoin mantienen una lista colectiva de todas las transacciones conocidas en una cadena de bloques. Para ello los nodos generadores de los bloques, también llamados mineros meten en la cabecera de dichos bloques del último bloque de la cadena más larga de la que tienen conocimiento, así como las nuevas transacciones publicadas en la red. Cuando un minero encuentra un nuevo bloque, lo transmite al resto de los nodos a los que está conectado. En el caso de que resulte un bloque válido, estos nodos lo agregan a la cadena y lo vuelven a retransmitir. Este proceso se repite indefinidamente hasta que el bloque ha alcanzado todos los nodos de la red. Por tanto la cadena de bloques contiene el historial de posesión de todas las monedas desde la dirección-creadora a la dirección del actual dueño. Por lo tanto, si un usuario intenta reutilizar monedas que ya usó, la red rechazará la transacción.

Bajando un poco el nivel de abstracción, los mineros rastrean las transacciones (los pagos) y los agrupan en bloques, cada bloque tiene la siguiente estructura:
  • Número mágico. El valor de "número mágico" 0xD9B4BEF9. Valor poco probable de que se produzca en la tabla ASCII en los datos normales con el siguiente bloque.
  • Tamaño de bloque
  • Cabecera de bloque
    • Número de versión (4 bytes): Número de versión del protocolo bitcoin usado
    • Hash de la cabecera del bloque anterior (32 bytes). Esto va formando una cadena de bloques (de ahí el nombre de cadena de bloques) que nos da un orden bien definido de las trasacciones y una firma acumulativa de las transacciones (se firma lo actual y todo lo anterior enlazado)
    • Hash del contenido de el bloque (32 bytes). Para ello usa el hash de la raíz del árbol de Merkle de las transacciones del bloque. Esto asegura que las transacciones del bloque no se pueden cambiar una vez que son parte de un bloque
    • Una marca temporal tipo UNIX (4 bytes)( número de segundos desde enero de 1970).
    • Dificultad minera del bloque (4 bytes). Indica el número de ceros que tiene que poseer el hash al principio de este. Esto regula la dificultad para validar un bloque.
    • El nonce (4 bytes). Es una serie de bits con valor arbitrario.
  • Contador de transacciones
  • Lista de las transacciones incluidas en el bloque

La extracción.

 La generación de bloques se conoce en inglés como mining y puede traducirse al español como extracción por analogía con la minería del oro, objetivo concreto de los mineros es buscar un nonce correcto para el bloque de forma que el bloque completo satisfaga cierta condición. Esta condición es que el hash SHA-256 del bloque tenga un cierto número de ceros iniciales.

La dificultad

Según el protocolo solo debe salir un bloque válido cada diez minutos independientemente de cuánto trabajo haga la red. Así que la red tiene que actualizar la dificultad de forma que los futuros bloques requieran condiciones más o menos estrictas. Para calcularlo se mide el tiempo que se tardó en encontrar los últimos 2.016 bloques, se compara con el tiempo de 20.160 minutos. Se calcula de este modo la relación entre el intervalo de tiempo real y el intervalo de tiempo y realiza el ajuste correspondiente de la dificultad, hacia arriba o hacia abajo. Al ser la red Bitcoin una red descentralizada de nodos, la reasignación de la dificultad se produce de forma automática y en cada nodo independientemente. Cada 2.016 bloques, todos los nodos reorientan la dificultad

 Les puedo decir, que si desean minar bitcoins, deben tener equipos especiales para eso, Máquinas con buenas tarjetas gráficas, con procesadores creados para este tipo de actividades, como los famosos procesadores ASIC. Ya que en computadores digamos que domesticos, el minar les será muy lento.



Comentarios