Saltar al contenido principal

La cadena de prueba

Los dominios se registran por lotes. El tiempo de espera de cada lote es de ~10 minutos. Cada lote produce una prueba. Estas pruebas forman una cadena de transiciones de estados desde la génesis:

genesis_root (empty tree -- known constant)
| +-- "richard.pivx" registered at block 100,
| +-- "john.pivx" registered at block 110,
| ... (could be more registration/update commands)
| ! Proof 1 is generated
| old_root = genesis_root --> new_root_1
| +-- "richard.pivx" put his name on marketplace at block 200,
| +-- "sam.pivx" registered at block 250,
| ... (could be more registration/update commands)
| ! Proof 2 is generated
| old_root = new_root_1 --> new_root_2 (= current root)

El old_root de cada prueba debe ser igual al new_root de la prueba anterior. El old_root de la primera prueba debe ser igual a la raíz de génesis conocida (un árbol Sparse Merkle vacío).

Verificando la cadena

Un verificador verifica todo el historial de registro en cinco pasos:

  1. Obtenga la clave de verificación SP1: derivada de manera determinista del binario del programa invitado
  2. Obtenga todas las pruebas de la API
  3. Verifique cada prueba SP1 usando la clave de verificación
  4. Compruebe la cadena -- genesis == P1.old_root, P1.new_root == P2.old_root, ..., PN.new_root == current_root
  5. Verificación puntual en cadena: busque cualquier txid comprometido en un nodo PIVX y confirme la coincidencia de la nota, el valor y el bloque.

Si se pasan todas las comprobaciones, todo el historial de registro es correcto: no es necesario confiar en el indexador.

Tubería de prueba

El escáner y el probador funcionan de forma independiente:

PIVX Blockchain
|
PiNS Registrar Scanner (validates, captures SMT state)
|
Database (status: "pending")
|
SP1 Prover (generates ZK proof, verifies it)
|
Database (status: "proved")
|
New checkpoint published
|
Indexer syncs to the checkpoint
|
API Server (GET /v1.0/resolve/{name})

El escáner nunca se bloquea al generar pruebas. El demonio de prueba busca registros pendientes y puede ejecutarse en hardware independiente.