Altcoins

Creación de una criptomoneda simple usando .NET y C # – Parte 4. Encabezados de bloque | de Putu Kusuma N. | La capital | Febrero 2021

single-image
(adsbygoogle = window.adsbygoogle || []).push({});


Putu Kusuma N.

En esta publicación, escribiré sobre ellos. Encabezados de bloque, lo cual es muy importante si el encabezado del bloque es el componente básico del Bloquear hash. El hash del bloque en sí mismo es la identidad única del bloque o la huella dactilar del bloque.

Para que esta publicación sea más fácil de entender, le recomiendo que lea mis publicaciones anteriores aquí: la primera publicación, la segunda publicación y la tercera publicación.

En la publicación anterior hicimos transacciones, bloques y bloques hash, pero sigue siendo simple. Actualmente estoy mejorando nuestro proyecto de criptografía para estar más cerca de la criptografía real.

Este artículo cubre:

  • Encabezado de bloque
  • Tiempo Unix / tiempo de época
  • Función hash criptográfica
  • Raíz de Merkle
  • Transacción de Coinbase
  • proporción de
  • Validador de bloque
  • Numero de transacciones
  • Total
  • Tarifa de transacción
  • Bloquear hash
  • Crea un bloque
  • Video tutorial
  • Conclusión
Fuente de la imagen: mdpi.com

Como se puede ver, ejecución, Hash anterior, Hash de Merkel, sello de tiempoy el D.si dificultad son parte del encabezado del bloque, pero Número de bloque, Tamaño de bloque, Contador de transacciones, Lista de transacciones no se incluyen en el encabezado del bloque.

Ahora modifiquemos Block.cs y se verá así:

public int Version { get; set; }
public long Height { get; set; }
public long TimeStamp { get; set; }
public string PrevHash { get; set; }
public string Hash { get; set; }
public string MerkleRoot { get; set; }
public IList<Transaction> Transactions { get; set; }
public string Validator { get; set; }
public int NumOfTx { get; set; }
public double TotalAmount { get; set; }
public float TotalReward { get; set; }
public int Difficulty { get; set; }
Fuente: unixtutorial.org

Las marcas de tiempo son una de las partes más importantes de la cadena de bloques que se utiliza para calcular hashes de bloques y hashes de transacciones. Al igual que con Bitcoin, utilizo marcas de tiempo de Unix o marcas de tiempo de Epoch.

long epochTicks = new DateTime(1970, 1, 1).Ticks;
long nowTicks = DateTime.UtcNow.Ticks;
long tmStamp = ((nowTicks - epochTicks) / TimeSpan.TicksPerSecond);
Console.WriteLine("Unix Timestamp: {0}", tmStamp);
#result
1612623961
# It was:
# Saturday, 6 February 2021 15:06:01
# Saturday, 6 February 2021 23:06:01 GMT+08:00
#It means there are 1612623961 seconds since January 1, 1970.

Hay varias funciones hash que se utilizan principalmente en criptomonedas: RIPEMD-160, SHA-2 y SHA-3.

Fuente de la imagen: auth0.com

Para un ejemplo más específico, creemos una función para generar un hash de una cadena.

public static string GenHash(string data)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
byte[] hash = SHA256.Create().ComputeHash(bytes);
return Convert.ToHexString(hash)
}

Ahora intentemos generar un hash a partir de dos cadenas, donde la primera cadena tiene menos de 64 caracteres y la segunda cadena tiene más de 64 caracteres. Después de ejecutar el proceso de hash, las dos cadenas de caracteres generan dos hash con una longitud de 64 caracteres.

// generate hash of str
var hash = GenHash(str);
Console.WriteLine("Hash: {0}", hash);
Console.WriteLine("Prev Length: {0}", str.Length);
Console.WriteLine("Length: {0}", hash.Length);
str = "A hash function is any function that can be used to map data of arbitrary size to a fixed size value. The value that the hash function returns is called the hash value, hash code, digest, or simply hash.";// generate hash of str
hash = GenHash(str);
Console.WriteLine("Hash: {0}", hash);
Console.WriteLine("Prev Length: {0}", str.Length);
Console.WriteLine("Length: {0}", hash.Length);

El resultado se verá así:

Hash: 04ff6334d28f1f801e846c8639c57913d44fc42e8f905c2b344161b5ff8a359aPrev Length: 19
Length: 64
Hash: 365f9961f44232dcb10f74bfb5f754a10d2c5bd6aca71efb383c0af7eb76bfc8
Prev Length: 203
Length: 64

Puedes cambiar eso S t variable con cualquier cadena de caracteres, el hash (SHA256) de la cadena de caracteres siempre tiene una longitud de 64 caracteres.

Árbol Merkle. Fuente de imagen

Cada transacción tiene un ID que es el resultado del hash de la transacción en sí. Todas las transacciones de un bloque se procesan para crear una raíz Merkle. Esta raíz de Merkle es parte del encabezado del bloque y se utiliza como parámetro para crear un hash de bloque.

Creemos una función que haga trabajos como Merkle root. Sin embargo, para comprobar simplemente el resultado, no utilizamos la función hash.

public static string CreateMerkleRoot(IList<string> trxs)
{
// if transaction only 1
if (trxs.Count == 1)
{
var firstTrx = trxs.First();
return firstTrx;
}
// if the number of transaction is odd
if (trxs.Count % 2 == 1)
{
var lastTrx = trxs.Last();
trxs.Add(lastTrx);
}
// looping to create branches
var branches = new List<string>();
for (int i = 0; i < trxs.Count; i += 2)
{
// concat each pair
var pair = string.Concat(trxs[i] , trxs[i + 1] );
Console.Write(trxs[i] + "+" + trxs[i+1] );
Console.Write( " ");
branches.Add(pair);
}

Console.WriteLine();
var rslt = CreateMerkleRoot(branches);
return rslt;
}

Supongamos que tenemos una serie de transacciones “1”, “2”, “3”, “4” y luego creamos la raíz de Merkle con la función anterior.

string[] txs = { "1", "2", "3", "4"};
var root = CreateMerkleRoot(txs.ToList());
Console.WriteLine(root);
#Result
1+2 3+4
12+34
Root: 1234

Probemos con otro

string[] txs = { "1", "2", "3", "4", "5" };
var root = CreateMerkleRoot(txs.ToList());
Console.WriteLine("Root: {0}", root);
1+2 3+4 5+5
12+34 55+55
1234+5555
Root: 12345555

Ahora estamos implementando Merkle Root para nuestro proyecto de criptografía. Creemos una función que nombre CrearMerkleRooty hash de la transacción como entrada.

Aquí hay un algoritmo para calcular la raíz de Merkle:

  • Obtenga un hash para cada transacción, que es el ID de la transacción.
  • Crea un par por cada dos hashes. Si el número de elementos de la lista es impar, haga una copia del último elemento.
  • Genere un nuevo hash para cada par de hash aplicando la función SHA256 dos veces (como con Bitcoin): SHA256 (SHA256 (Hash0 + Hash1)).
  • Repita los pasos 2 y 3 para las nuevas listas hash. Repita este proceso hasta que solo haya un elemento en la lista.
  • La raíz de Merkle es el resultado final de los pasos anteriores.
Fuente de la imagen: javatpoint.com

No hay una recompensa en bloque en la Prueba de participación consensuada, pero ¿qué pasa si no hay transacciones? Primero, digamos que cuando no hay transacciones, el creador de bloques aún recibe una recompensa, lo llamamos recompensa de monedas.

constfloat COIN_REWARD = 0.01f;

Ahora cree una función para calcular los cargos totales de todas las transacciones dentro del bloque.

private float GetTotalFees()
{
var totFee = Transactions.AsEnumerable().Sum(x => x.Fee);
return totFee;
}

Abordaré específicamente el consenso de PoS en una próxima publicación. Esta vez, voy a hacer suposiciones para acercarme al PoS. Asumimos que inicialmente varios nodos (cuentas) estaban involucrados en la operación.

Creemos una clase de participación.

  • Los números de línea del 8 al 12 son S.cliente Clase.
  • La línea 17 es la lista de apostadores. Este campo se utiliza cuando el ganador se elige al azar.
  • El número de línea 19-25 es una función para agregar un apostador.
  • Los números de línea 27 a 31 son una función para obtener todos los apostadores.
  • Los números de línea del 33 al 72 se utilizan para inicializar la lista de participantes.
  • Las líneas 75 a 84 son una función para seleccionar aleatoriamente el validador.

¿Cómo se seleccionan los validadores? Los validadores se seleccionan en función de uno o más criterios, como la aleatoriedad, el número de monedas, la antigüedad de las monedas o el cálculo hash. Los validadores reciben una recompensa de las tarifas de transacción acumuladas.

Para simplificar las cosas, el validador se selecciona inicialmente al azar de la lista de usos anterior.

Aquí está la función GetValidator. La función selecciona aleatoriamente el validador de la lista de participantes.

NumOfTx = Transactions.Count;

Como sabes, los bloques se crean en un período de tiempo. Todas las transacciones se fusionan en un bloque, y todas las tarifas de transacción se acumulan y pasan a quienes crean el bloque.

A continuación se muestra la función para generar hash del bloque.

Gracias por leer mi publicación. Si esta publicación es útil, por favor, dame algunas palmadas.

Lista de contribuciones:

Código fuente de esta publicación:
https://github.com/jhonkus/UbudKusCoin/tree/part4_block_header

You may also like

Bitcoin

Sportsbet.io y Arsenal FC presentan un nuevo programa de Matchday de realidad aumentada

En el nuevo panorama de las apuestas, las empresas líderes están desarrollando formas nuevas e ingeniosas de llevar los juegos a los fanáticos que están atrapados en casa. Sportsbet.io y Arsenal FC han iniciado la próxima evolución de la participación de fanáticos e influencers en relación con el programa tradicional del día del juego. Esta revolucionaria tecnología AR, conocida como “Programa Matchday de realidad aumentada (AR)”, lleva a los jugadores a casa. ¡Los fanáticos pueden tener jugadores como Aubameyang en su sala de estar!

¿Qué es el programa AR Matchday?

El programa AR Matchday combina todos los elementos del programa de fútbol tradicional, brindando a los fanáticos una experiencia virtual y acercándolos al equipo al que apoyan. En el programa AR Matchday, los fanáticos pueden:

  • Escuche las notas del capitán pronunciadas por Pierre-Emerick Aubameyang
  • Escuche los perfiles de los jugadores y revíselos
  • Disfrute de 21 preguntas con entrevistas Quickfire
  • Mira las…
View More Article
Blockchain

5 tendencias de NFT que debe probar:

En los últimos meses, los tokens no fungibles (NFT) han ganado popularidad y han atraído la atención general. Estos objetos interactivos se venden por millones de dólares y van desde pinturas y música hasta comestibles y papel higiénico. Es hora de profundizar en las realidades laborales más predecibles de las NFT después de que el entusiasmo inicial ceda.

Un NFT es un artefacto digital que representa objetos reales como arte, piezas del juego, canciones, objetos de colección e imágenes, entre otras cosas. Estas propiedades se compran y venden a través de Internet, a menudo utilizando criptomonedas. Por lo general, varios activos criptográficos se codifican utilizando el mismo programa subyacente que las NFT.

Los tokens no fungibles están disponibles desde 2014, pero son reconocidos mundialmente como un medio para vender y comprar obras de arte digitales. A noviembre de…

View More Article
Bitcoin

Transacciones: cómo recuperar bitcoins perdidos


<a title="See the tag: transacciones (20 posts)" class="autobesttag" rel="nofollow" href="https://schuss.es/tag/transacciones/">Transacciones</a> – Cómo <a title="See the tag: recuperar (5 posts)" class="autobesttag" rel="nofollow" href="https://schuss.es/tag/recuperar/">recuperar</a> Bitcoin perdido – Bitcoin Stack <a title="See the tag: exchange (11 posts)" class="autobesttag" rel="nofollow" href="https://schuss.es/tag/exchange/">Exchange</a>





View More Article
Bitcoin

Coinbase (COIN) cae por debajo de $ 250, las acciones de blockchain se venden a medida que continúa el declive de Bitcoin

Se sabe que Bitcoin (BTC) y el resto del mercado de criptomonedas siguen provocando grandes movimientos de precios de Bitcoin que agitan el mercado de altcoins, afectando la confianza y el impulso.

Esto parece ser lo mismo para las acciones relacionadas con blockchain que se negocian en los mercados financieros tradicionales, y un vistazo rápido a los gráficos revela que han estado reflejando el desempeño de Bitcoin en los últimos meses.

El ecosistema de la criptomoneda estaba en completo desorden hace poco más de un mes cuando la muy esperada lista de Coinbase llegó el 14 de abril. Esa fecha también marca el máximo histórico reciente en el precio de BTC en $ 64,863.

Desde su debut, el precio de COIN ha disminuido constantemente tanto por debajo de su precio de cotización directo de $ 381 como por debajo de su precio de referencia de $ 250 a…

View More Article
Bitcoin

¿Comprar la inmersión de Bitcoin? Por qué podría recibir una inyección de menos de $ 40,000

En un instante, como la mayoría de las cosas en Bitcoin y en el espacio criptográfico, el sentimiento general en el mercado parece haber cambiado. Los osos se han hecho cargo. El precio de BTC estaba sangrando y esta vez indica otra tendencia a la baja.

Muchos compraron la caída cuando BTC estaba por debajo de $ 50,000 y esperaban un rebote hacia el rango familiar de $ 58,000 durante el fin de semana. El salto aún no ha ocurrido y, como han señalado algunos expertos, BTC podría ver más sangre antes de recuperarse.

En el momento de escribir este artículo, BTC se cotiza a $ 42,692, un 9,4% menos en el gráfico diario y una corrección del 30% en el gráfico mensual. Los marcos de tiempo más bajos se están moviendo hacia los lados con una pérdida del 10% en el gráfico diario, ya que el…

View More Article
Blockchain

LTC / USD se está volviendo bajista para una corrección

Predicción de precios LTC – 17 de mayo
Actualmente se está realizando una revisión a la baja debido a una mayor presión en la actividad del mercado LTC / USD. La moneda estadounidense ha estado impulsando las criptomonedas desde el 10 de mayo, mientras que el instrumento base encontró una resistencia de alrededor de $ 400. Con una caída de alrededor del 10,07% en el mercado de cifrado, el precio ahora es de alrededor de $ 266.

Mercado LTC / USD
Niveles clave:
Niveles de resistencia: $ 320, $ 360, $ 400
Niveles de soporte: $ 240, $ 220, $ 200

LTC / USD – gráfico diario
El gráfico diario LTC / USD muestra una fuerte corrección a la baja en las correcciones de precios, ya que la…




View More Article