public static byte[] hashForSignature( Transaction tx, int inputIndex, byte[] connectedScript, byte sigHashType) { byte[] serializedSig = serializeForSignature(tx, inputIndex, connectedScript, sigHashType); Sha256Hash hash = Sha256Hash.twiceOf(serializedSig); String hashHex = Utils.HEX.encode(hash.getBytes()); // check hash against the reference implementation inside of bitcoinj byte[] referenceImplementation = tx.hashForSignature(inputIndex, connectedScript, sigHashType).getBytes(); String referenceImplementationHex = Utils.HEX.encode(referenceImplementation); if (!hashHex.equals(referenceImplementationHex)) { logger.error("bitcoins: " + hashHex); logger.error("bitcoinj: " + referenceImplementationHex); throw new RuntimeException( "Difference between BitcoinJSignatureSerialization & Actual Bitcoinj\n" + "bitcoin-s: " + hashHex + "\n" + "bitcoin-j: " + referenceImplementationHex); } return hash.getBytes(); }