<p>You don't hash the <code>OP_HASH160 {scriptHash} OP_EQUAL</code>, 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.</p>

<p>Sample Python code:</p>

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

CC BY-SA 4.0
2018-06-19T23:40:45.907Z
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
Robert
CC BY-SA 4.0
2018-06-20T08:28:47.260Z
try cloning [this](https://github.com/mcdallas/cryptotools) 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
CC BY-SA 4.0
2018-06-19T22:59:46.940Z
2018-06-19T22:59:46.940Z
Mike D
<p>I am running this code and nothing happens. </p>

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

<pre><code>// 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 &amp;&amp;
    buffer[0] === OPS.OP_HASH160 &amp;&amp;
    buffer[1] === 0x14 &amp;&amp;
    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
}
</code></pre>

<p>What am I doing wrong?
Thanks</p>

<hash>
HASH160 to address - What am I doing wrong?
Robert
# HASH160 to address - What am I doing wrong?

(Asked by: username_0 on 2018-06-19)

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

**Tags:** hash


---

## 1 answers

### Answer by username_1 on 2018-06-19. Score: 1 | Accepted answer

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)

> **Comments:**
> **username_0**: 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  
> **username_1**: try cloning [this](https://github.com/mcdallas/cryptotools) 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  

---

