HASH160 to address - What am I doing wrong?

0

I am running this code and nothing happens.

I am trying to hash160 a script with OP_HASH160 {scriptHash} OP_EQUAL and get a P2SH address as output but not sure this is the right script to achieve this.

// OP_HASH160 {scriptHash} OP_EQUAL
var bitcoin = require('bitcoinjs-lib')
var bscript = require('./src/script')
var types = require('./src/types')
var typeforce = require('typeforce')
var OPS = require('bitcoin-ops')

function check (script) {
  var buffer = bscript.compile(script)

  return buffer.length === 23 &&
    buffer[0] === OPS.OP_HASH160 &&
    buffer[1] === 0x14 &&
    buffer[22] === OPS.OP_EQUAL
}
check.toJSON = function () { return 'scriptHash output' }

function encode (scriptHash) {
  typeforce(types.Hash160bit, scriptHash)

  return bscript.compile([OPS.OP_HASH160, f1b914051eaabf34c22d354053698e512b36, OPS.OP_EQUAL])
}

function decode (buffer) {
  typeforce(check, buffer)

  return buffer.slice(2, 22)
}

module.exports = {
  check: check,
  decode: decode,
  encode: encode
}

What am I doing wrong? Thanks

RobertH

Posted 2018-06-19T22:31:31.503

Reputation: 151

Answers

1

You don't hash the OP_HASH160 {scriptHash} OP_EQUAL, that's just a template associated with P2SH addresses. You need to hash the redeem script, add version byte and checksum and then encode into base58.

Sample Python code:

def p2sh(script):
    scripthash = hash160(script)
    data = b'\x05' + scripthash
    checksum = sha256(sha256(data))[:4]
    address = data + checksum
    return base58.encode(address)

Mike D

Posted 2018-06-19T22:31:31.503

Reputation: 1 571

Thanks! I tried to run your code but nothing happens. How can I get the address and the private key from that string? I'm new to python.

https://i.imgur.com/uPKt09A.png

RobertH 2018-06-19T23:40:45.907

try cloning this repository, it's where I got it from. From the cloned project folder open python and run the following snippet: https://bpaste.net/show/82cda4df9253 You can't get the private key from anything, it is something you must have. To get an address from a privatekey try this https://bpaste.net/show/7c224235cebe

Mike D 2018-06-20T08:28:47.260