Wie verwende ich den Hashimoto-Lichtalgorithmus in Pyethash?

Ich habe ein Problem mit der Verwendung des Hashimoto-Lichtalgorithmus in Pyethash.

Ich verwende pyethash Version 23.1 und vergleiche die Ergebnisse mit ethash.run (ethashjs 0.0.7).

Bei Verwendung derselben Eingaben sollte das Ergebnis dasselbe sein, aber ich erhalte unter OSX 10.10 unterschiedliche Ausgaben.

Pyethash:

import pyethash

blocknr = 229
headerHash = "123deb946d8dd98c79b527d3da0a19210a7193fd6a9c1f496b2c26c9ca4a7933"
nonceStr = "a8c2231491f43da2"

cacheSize = pyethash.get_cache_size(blocknr)
seed = pyethash.get_seedhash(blocknr)

cache = pyethash.mkcache_bytes(
        cacheSize,
        seed).encode('hex')

nonce = long(nonceStr, 16)
fullSize = pyethash.get_full_size(blocknr)

light_result = pyethash.hashimoto_light(fullSize, cache, headerHash.decode("hex"), nonce)
print "result: " + ''.join(x.encode('hex') for x in light_result['result'])

ethashjs:

const Ethash = require('ethashjs');
const levelup = require('levelup');
const memdown = require('memdown');
const BN = require('bn.js');

var block = 229;
var headerHash="123deb946d8dd98c79b527d3da0a19210a7193fd6a9c1f496b2c26c9ca4a7933"
var nonce="a8c2231491f43da2"

var cacheDB = levelup('', {
    db: memdown
});
var ethash = new Ethash(cacheDB);

ethash.loadEpoc(block, function(){

    var result = ethash.run(new Buffer(headerHash, 'hex'), new Buffer(nonce, 'hex'));
    console.log("result " + (new BN(result.hash)).toString(16));

});

Die Implementierung in ethashjs sollte korrekt sein (Sie wurde verwendet, um einen Hash für das Mining eines Blocks in meinem Testnetz zu validieren). Vielleicht hat ja jemand einen Tipp für mich!

Antworten (1)

Vielleicht bin ich auf etwas gestoßen, was hilfreich sein sollte. ~6 Jahre später aber :/

Dieses Segment , genauer gesagt diese Zeile , deutet darauf hin, dass eine Endianness-Konvertierung mit der Nonce stattfindet.

Pyethash Endianness Voodoo

Vielleicht mussten Sie also die Nonce vom Big-Endian-Format in int konvertieren?