Implementando el algoritmo NiPoPoW

Hola,

Nosotros, un pequeño equipo, hemos implementado alrededor del 95 % de una propuesta científica innovadora que describe las pruebas de prueba de trabajo no interactivas de NiPoPoW . Puede encontrar nuestra implementación de código fuente del algoritmo NiPoPoW en nuestro GitHub

Durante la implementación, recibimos algunas preguntas que no pudimos descifrar a partir de su innovador documento:

I. El WebDollar utiliza el esquema Mini-Blockchain (igual que Ethereum) mediante el uso de Patrica Merkle Trees para almacenar los saldos de todas las direcciones distintas de cero y los contratos inteligentes. Entonces, para validar un saldo, solo necesitamos hashes SPV del Patrica Merkle Tree y NiPoPoW basado en pruebas del último bloque (que es el último bloque de la cadena de bloques)... por lo que creemos que no necesitamos las pruebas infijas. ¿Tengo razón? ¿O necesitamos el algoritmo infijo o terciopelo NiPoPoW?

II. Algoritmo 2 Verificar

a) Suponemos que la función validChain validará π y χ para verificar que los enlaces que apuntan al bloque de génesis y los hash se calculen correctamente.

b) Mi primera pregunta técnica es que no pudimos entender cuál es el predicado Q utilizado en el Algoritmo de verificación 2. ¿Es una "función" que verifica y valida el χ (validación de un objetivo (T) basado en bloques de PoW), interrelaciones . ¿Tengo razón?) o cómo se verá el predicado Q? ¿Qué más hará el predicado Q diferente a validChain (π, χ)?
ingrese la descripción de la imagen aquí

tercero Propiedad multinivel

No estamos muy seguros de haber recibido el pedido correctamente.

Iteramos u' de [0 a todo u] y comprobaremos que cada u' debe tener la propiedad de que para cualquier C* incluido en C que tenga la propiedad |C∗↑µ'| ≥ k1, C* debe tener también la última ecuación. en caso de que C* falle la última ecuación devolvemos falso;

ingrese la descripción de la imagen aquí

IV. Maldad

No pudimos entender la C* marcada de la función de maldad

una. ¿Cuál es el orden correcto para calcular la expresión C↓↑µ−1… primero calculamos C↓ y luego calculamos en base al resultado anterior ↑µ−1?
b. ¿Cómo calculamos C↓? No pudimos encontrar ninguna idea de cómo calcular C↓ solo C'↓ que es la definición de cadena descendente C'↓ C se define como C[C'[0] : C'[−1]].
C. ¿No es C'↓ y no C↓?

imagen en línea

¡Gracias!

Respuestas (1)

I. Esto es casi correcto. La única diferencia es que aún necesita el sufijo χ mencionado en el documento, que incluye el |χ| más reciente. = k bloques de la cadena de bloques. Esto se debe a que el "último bloque" no es estable y puede retirarse (en caso de que se extraiga otro bloque de la misma altura en un momento similar). Solo puede deducir los saldos "actuales" a partir de hace k bloques.

II.
a) Esto es correcto.
b) El predicado "Q" es específico de la aplicación. En su caso, podría ser, por ejemplo, una declaración de que el saldo de una cuenta específica tiene una cierta cantidad de dinero en un momento determinado. es decir, Q sería que "Alice tiene 5 Ether en el bloque #4,000,091".

tercero Esto es correcto. Generalmente, a menos que haya un ataque serio contra toda la cadena de bloques, esta propiedad no fallará (para δ apropiado).

IV.
a) Sí.
b) c) Tiene razón. De hecho, C↓↑µ−1 debería ser C'↓↑µ−1. He corregido el error y actualizaremos el documento en la versión más reciente. ¡Muchas gracias por señalar esto!

Créditos de respuesta: Dionysis Zindros