¿Cómo almacenar el hash de un archivo de Excel en Blockchain? [cerrado]

Lo siento si esta pregunta no parece ser lógica.

Quiero almacenar hashun Excelarchivo en Blockchain mediante la siguiente función:

//byte fileHash;
event LogsetFileHash(byte _hashValue);

    function setFileHash(byte hashValue) {
        emit LogsetFileHash(hashValue);
        //fileHash = hashValue; // In case storing hash value in a variable is NOT expensive, we store hash in a variable, otherwise, we save it only as an event log.  
    } 

La pregunta es cómo puedo usar funciones matemáticas y criptográficas para convertir el contenido de mi Excelarchivo en un hashvalor, teniendo en cuenta el hecho de que el contenido de un Excelarchivo no es string/textcomo un pdfarchivo.

De hecho, lo que no me queda claro es cómo usar una de estas funciones como: ¿ keccak256(...) returns (bytes32)o sha256(...) returns (bytes32)regresar _hashValue variable? ¿Y también cuál es mejor usar? (si hay una diferencia en el tamaño del hash).

Esta es probablemente una mejor pregunta para hacer en el desbordamiento de pila. Es más un problema de codificación general que uno específico de ethereum

Respuestas (2)

Puede convertir su archivo en base64 y calcular el hash de la secuencia de cadenas. Debe realizar esta operación fuera de la cadena antes de enviar la transacción al contrato inteligente.

Por ejemplo, index.js :

var fs = require('fs');
var keccak256 = require('js-sha3').keccak256;

var hash1 = hashFile('sample1.xlsx');
console.log("sample1.xlsx: " + hash1);
var hash2 = hashFile('sample2.xlsx');
console.log("sample2.xlsx: " + hash2);


function hashFile(file) {
    var body = fs.readFileSync(file);
    return keccak256(body.toString('base64'));
}

$ node index.js 
sample1.xlsx: 6f908b0facccb5008eb05214a7406300192a59db69bf7c2d979bfa8404b094b1
sample2.xlsx: 3d4e1062085c24da7af7c955d54fc89fa5670dc74bc0521db46ec3ceb4ef9109

Luego, el hash se puede convertir en una variable bytes32:

event LogsetFileHash(bytes32 _hashValue);

function setFileHash(bytes32 _hashValue) {
    emit LogsetFileHash(_hashValue); 
}

Código de muestra

¿Cuál es el propósito de convertir a base64 antes del hash?

Usaría el método de Greg, pero si realmente desea que la función hash esté en el contrato, puede convertir el archivo a csv o json y pasarlo al contrato como una cadena para convertirlo.

No es posible leer un archivo directamente usando un contrato. Ethereum necesita que todos puedan validar el resultado de forma independiente, esto requeriría que cada validador tenga acceso al archivo, lo cual es inviable.

Gracias. enfoque interesante. Convertí mi Excelarchivo a csvarchivo. ¿Podría decirme cómo pasar este csvarchivo a un contrato inteligente como un archivo string? Porque cuando csvel archivo está abierto, tiene un formato similar al Excelarchivo. (Considere que este csvarchivo se guarda, por ejemplo, en este directorio:) C:\\example_csv_fileGracias