Muestra que muestra cómo almacenar y recuperar una lista de hash de IPFS en Ethereum

Quiero almacenar una lista de hash IPFS en la función de un contrato inteligente que expone una matriz de bytes32 [].

Estoy usando web3.js y Solidity.

He usado multi-hash y/o algunos ejemplos usando bs58, pero el valor que recuperé y convertí del contrato inteligente me da un hash diferente al de IPFS.

¿Tienes algún consejo para compartir conmigo?

Gracias

Dicho

Respuestas (1)

Ok, lo obtuve gracias a esta gran muestra: https://bitbucket.org/edmundedgar/realitycheck/src/3ec966f1cf253c59caa224ee0e8e0e0d1037741d/assets/js/scripts/main.js?at=master&fileviewer=file-view-default#main.js -407

Utilicé estas funciones y pude almacenar/recuperar mi hash IPFS a/desde bytes32 Tipo de datos Solidity:

function ipfsHashToBytes32(ipfs_hash) {
    var h = bs58.decode(ipfs_hash).toString('hex').replace(/^1220/, '');
    if (h.length != 64) {
        console.log('invalid ipfs format', ipfs_hash, h);
        return null;
    }
    return '0x' + h;
}

function bytes32ToIPFSHash(hash_hex) {
    //console.log('bytes32ToIPFSHash starts with hash_buffer', hash_hex.replace(/^0x/, ''));
    var buf = new Buffer(hash_hex.replace(/^0x/, '1220'), 'hex')
    return bs58.encode(buf)
}