En este instructivo te compartimos algunas recomendaciones de seguridad y el paso a paso para realizar la verificación de la Prueba de Solvencia en Lemon. Además, en el README del proyecto te detallamos cómo funciona el Merkle Sum Tree y cómo es que permite verificar efectivamente la Prueba de Pasivos. ¡Es importante que lo leas!
Contenidos
Consideraciones de seguridad
Siempre tienes que tener cuidado con lo que instalás y corres en tu computadora. Nuestro código es seguro y está auditado por especialistas de la industria, pero queda en ti no instalar nada que no venga de fuentes confiables.
👉🏻 Asegúrate que el mail que recibiste para realizar la verificación haya sido enviado desde notificaciones@lemoncash.com.ar. En caso que recibas un mail de otra casilla, elimínalo.
👉🏻 No instales nada que no provenga de ese mail
👉🏻 Recuerda que este el único instructivo válido con los pasos a seguir.
👉🏻 No modifiques el código descargado porque los resultados podrían verse afectados. Si te gustaría proponer algún cambio, puedes cargarlo como issue en el repositorio de Github.
¿Te gustaría aprender todo lo relacionado con las criptomonedas y la tecnología blockchain? Regístrate en nuestro curso gratuito y obtén conocimientos valiosos para entender cómo funcionan estas tecnologías. Haz clic en el botón
Paso a paso para la verificación
- Primero, vas a necesitar clonar el proyecto. Antes de hacerlo, asegúrate de estar posicionado en la ubicación donde quieras guardarlo. En caso contrario, puedes moverte a otra usando el comando
% cd [position]
. Una vez que estés listo, clónalo corriendo el comando% git clone [<https://github.com/lemonatio/proof-of-liabilities>](<https://github.com/lemonatio/proof-of-liabilities>)
o descargando el zip desde GitHub. - Dentro de la carpeta donde quedó guardado el proyecto, crea una nueva carpeta con el nombre “input”. Puedes hacerlo desde tu explorador de archivos o desde la misma terminal usando el comando
<mkdir input>
. Ten en cuenta que para correr este comando, tienes que posicionarte dentro de la carpeta del proyecto. Desde la consola, lo puedes lograr corriendo% cd proof-of-liabilities
. - Arrastra el archivo “proof.csv” que descargaste desde el mail que te enviamos a esta carpeta. Puedes verificar que está bien guardado corriendo el comando
cat input/proof.csv
. Si lo está, debería imprimirte el contenido en la consola. En caso contrario, te va a arrojar un mensaje de error. 🔒 Acuérdate que este archivo contiene datos personales tuyos, ¡no lo compartas! Tampoco des a conocer el resultado de imprimir el archivo en la consola. - Vas a necesitar otro archivo que incluya los resultados de la Prueba de Pasivos. En la misma auditoría (en la sección “Variables para la verificación de Merkle”), vas a encontrar un link que lo contiene. Guárdalo dentro de la carpeta del proyecto con el nombre
root.json
. ⚠️ Asegúrate siempre de estar tomando la auditoría que se corresponde con el mail que estás considerando. Los datos del archivo “proof.csv” son para una auditoría puntual, por lo que es muy importante que compares la fecha y hora del cuerpo del mail con el de la auditoría. Sino, la verificación va a fallar. ✔️ Puedes verificar que está bien guardado corriendo el comandocat root.json
. Si lo está, debería imprimirte el contenido en la consola. Sino, te va a arrojar un mensaje de error. - Ahora sí, está todo configurado para que puedas ejecutar el código. Para eso, corre el siguiente comando:
python3 verify.py -i input/proof.csv -r root.json
- ¡Listo! En la consola se van a imprimir los resultados del proceso.
Si en el futuro quieres verificar una nueva auditoría, acuérdate de solicitar un nuevo mail y de actualizar los archivos con los nuevos datos!
¿Cómo interpreto los resultados obtenidos?
Tras correr la línea python3 verify.py -i input/proof.csv -r root.json
la terminal imprime “Verifying
” mostrando que comenzó la verificación.
Luego, se van imprimiendo los hashes de los diferentes steps o “pasos”, siendo cada uno un nivel del árbol. El step 1 muestra el hash del nodo hoja que te corresponde, es decir, tu hash generado a partir de tus datos personales. Estos los toma desde el archivo proof.csv.
Todos los steps siguientes corresponden a los niveles más altos hasta que el último representa la raíz. Una vez calculado (la cantidad de niveles no es fija), va a volverlo a imprimir bajo el título “Obtained hash
”. Inmediatamente debajo, imprime el hash ingresado en el archivo root.json (es decir, el que tomamos desde la auditoría) para realizar la comparación. Lo mismo sucede con los balances: se imprimen los obtenidos como los ingresados. Si lo obtenido es igual a lo ingresado, se obtiene el mensaje de éxito: Verified correctly
😃
¿Qué significa esto? Que los pasivos totales de la empresa incluyen la deuda contraída contigo. ¿Por qué? El árbol de Merkle se construye desde los nodos hoja hasta obtener la raíz del árbol. Si los datos de alguna hoja cambian, cambia el resultado total de la raíz. Por lo tanto, la verificación garantiza que tus fondos fueron considerados en la construcción del árbol.
Problemas frecuentes
No te preocupes, acá listamos los errores más comunes que detectamos y su solución. Este listado lo construimos en comunidad, así que si encuentras otro error puedes escribir a soporte desde la app para que lo sumemos y ayudemos a los próximos verificadores 😉
Instalación y configuración
- No reconoce el comando
git
intentar clonar el repositorio ▶️ Si obtienes al correr el comando degit clone
el mensajeerror: invalid active developer path
, seguramente no tengas instalado git. Puedes seguir este instructivo. - Si al intentar clonar el repositorio, no lo encuentra ▶️ Un error del estilo
fatal: repository '[github.com/lemonatio/proof-of-liabilities](<https://github.com/lemonatio/proof-of-liabilities>)' does not exist
significa que el link al proyecto no es correcto. Copia el actualizado desde el sitio de GitHub - Errores con las ubicaciones del proyecto o archivos ▶️ Si en algún momento obtienes un error como
No such file or directory
significa que algo no quedó guardado en la ubicación correcta. Algunos consejos:- Una vez que hayas clonado el proyecto, posiciónate dentro de él corriendo
% cd proof-of-liabilities
- Después de guardar el archivo proof.csv, asegúrate de que esté bien guardado corriendo la línea
cat input/proof.csv
Si esto no te imprime el archivo, no está bien guardado. Te recomendamos usar el explorador de archivos de tu computadora para encontrarlo y moverlo a la ubicación correcta: dentro de la carpeta proof-of-liabilities. - Lo mismo puede ocurrir al correr
cat var.json
después de crear el archivo. Si no imprime los datos de la raíz y el algoritmo de hash, movelo dentro del proyecto. Ojo, otro error común es que guardes este archivo dentro de la carpeta input, pero debe estar suelto dentro de la carpeta proof-of-liabilities.
- Una vez que hayas clonado el proyecto, posiciónate dentro de él corriendo
- Error con el link con las variables de la auditoría ▶️ Si por algún motivo no podés abrir el link con los valores de la raíz que incluimos en la auditoría, lo podés armar con los resultados. Primero, vas a tener que crear el archivo con nombre
root.json
. Recomendamos usar algún editor de texto que tengas. Asegurate de que .json sea la extensión del archivo. El objeto se compone de tres propiedades:root_hash
,root_balances
yhash_algorithm
. Las dos primeras las encontrás en la auditoría identificadas de esa manera, y para elhash_algorithm
usamos el valor fijo de“sha256”
. La estructura del archivo debe ser la siguiente:{ "root_hash": [hash presentado en la auditoría], "root_balances": [balances presentados en la auditoría], "hash_algorithm": "sha256" }
- Error al guardar el archivo .json ▶️ Si copiaste y pegaste los datos desde la auditoría y ves que hay un error en el formato del archivo, seguramente sea porque al pegar los balances de la auditoría se incluyeron los quiebres de línea que se muestran en el PDF y esto no está permitido para archivos de formato .json. Para solucionarlo, sólo tienes que borrar estos espacios libres y verificar que los balances queden listados en un único renglón.
Verificación
error: invalid active developer path
▶️ Si al correrpython3 verify.py -i input/proof.csv -v var.json
****************************arroja el mensajeerror: invalid active developer path
vas a necesitar instalar python. Puedes descargarlo desde este link. También puede pasar que ya tengas python instalado pero necesites una versión más nueva, porque la versión mínima requerida es python 3.9. Puedes usar ese mismo link para actualizarla.- Error con
jsonDecodeError
al correr el verify ▶️ Si copiaste y pegaste los datos desde la auditoría, dependiendo del programa que uses puede ser que te hayan quedado saltos de línea. Para solucionarlo, puedes borrarlos. Ten cuidado al hacerlo, porque en caso de borrar de más y modificar algún número vas a obtener un error. De todas formas, te recomendamos que uses directamente el link que dejamos al final de la auditoría (en la sección “Variables para la verificación de Merkle”), donde ya está el objeto JSON armado para evitar errores en el proceso de copiado. - Output: “Root hash is not equal to obtained hash” ▶️ Si al finalizar el proceso de verificación te devuelve este mensaje significa que el hash de la raíz obtenido no es igual al de la auditoría. Verifica que esté bien ingresado: corrobora que la fecha de la auditoría de la que tomaste los datos coincida con la del mail del que descargaste el csv. Verifica también que los datos de la auditoría estén bien cargados, y que el archivo csv sea exactamente el mismo al que descargaste, sin modificaciones.
- Output: “Root balances are not equal to obtained balances” ▶️ Si al finalizar el proceso de verificación te devuelve este mensaje significa que los balances calculados no son los mismos de la auditoría. Otra vez, chequea que estés cruzando los datos correctos. Ten en cuenta de incluir los saldos tuyos que se muestran en el csv, no los modifiques por los actuales.