<p>You're missing the prefix, i.e. <code>e1</code> in this case.</p>
<pre><code>
const stakeAddressDecoded = 'e1'+addressDecoded.substr(addressDecoded.length - 56);

</code></pre>
<p>You have to add <code>e1</code> (or <code>e0</code> in case of testnet) as prefix.</p>
<p>Check page 113-114 for more details on prefix specifications: <a href="https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf" rel="noreferrer">https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf</a></p>

CC BY-SA 4.0
2021-10-13T16:42:09.550Z
Yes, this was the issue. Accepted as the answer - thanks!
Bob T
CC BY-SA 4.0
2021-10-13T07:26:39.940Z
2021-10-13T08:28:27.043Z
2021-10-13T08:28:27.043Z
1000101
<p>I am trying to extract the bech32 stake address from a Shelly address using Javascript. I followed the <a href="https://cardano.stackexchange.com/a/2004/4335">example steps outlined in the answer another question</a> (thanks for the help!) and put together the following code sample. The interim values are correct until the final step (bech32 encoding the stake portion of the hex-encoded address):</p>
<pre><code>import { bech32 } from 'bech32';

// input Shelley address
const address = 'addr1qxdvcswn0exwc2vjfr6u6f6qndfhmk94xjrt5tztpelyk4yg83zn9d4vrrtzs98lcl5u5q6mv7ngmg829xxvy3g5ydls7c76wu';

// decode bech32 shelley address and convert to hex 
const addressWords = bech32.decode(address, 1000);
const payload = bech32.fromWords(addressWords.words);
const addressDecoded = `${Buffer.from(payload).toString('hex')}`;
// ✅ should be 019acc41d37e4cec299248f5cd27409b537dd8b53486ba2c4b0e7e4b54883c4532b6ac18d62814ffc7e9ca035b67a68da0ea298cc24514237f

// stake part of the address is the last 56 bytes
const stakeAddressDecoded = addressDecoded.substr(addressDecoded.length - 56);
// ✅ should be 883c4532b6ac18d62814ffc7e9ca035b67a68da0ea298cc24514237f

// convert to bech32 to get stake address
const stakeAddress = bech32.encode(
  'stake',
  bech32.toWords(Uint8Array.from(Buffer.from(stakeAddressDecoded, 'hex'))),
  1000
);
// should be  : stake1uxyrc3fjk6kp343gznlu06w2qddk0f5d5r4znrxzg52zxlclk0hlq
// ❌ returns : stake13q7y2v4k4svdv2q5llr7njsrtdn6drdqag5cesj9zs3h7xjwn42
</code></pre>
<p>Am I missing a step before bech32 encoding the stake portion of the address? Thanks in advance.</p>

<cardano-address><shelley>
Bech32 encoding stake address from Shelley address in JavaScript returning wrong value
# Bech32 encoding stake address from Shelley address in JavaScript returning wrong value

(Asked by: username_0 on 2021-10-07)

I am trying to extract the bech32 stake address from a Shelly address using Javascript. I followed the example steps outlined in the answer another question (thanks for the help!) and put together the following code sample. The interim values are correct until the final step (bech32 encoding the stake portion of the hex-encoded address):
import { bech32 } from 'bech32';

// input Shelley address
const address = 'addr1qxdvcswn0exwc2vjfr6u6f6qndfhmk94xjrt5tztpelyk4yg83zn9d4vrrtzs98lcl5u5q6mv7ngmg829xxvy3g5ydls7c76wu';

// decode bech32 shelley address and convert to hex 
const addressWords = bech32.decode(address, 1000);
const payload = bech32.fromWords(addressWords.words);
const addressDecoded = `${Buffer.from(payload).toString('hex')}`;
// ✅ should be 019acc41d37e4cec299248f5cd27409b537dd8b53486ba2c4b0e7e4b54883c4532b6ac18d62814ffc7e9ca035b67a68da0ea298cc24514237f

// stake part of the address is the last 56 bytes
const stakeAddressDecoded = addressDecoded.substr(addressDecoded.length - 56);
// ✅ should be 883c4532b6ac18d62814ffc7e9ca035b67a68da0ea298cc24514237f

// convert to bech32 to get stake address
const stakeAddress = bech32.encode(
  'stake',
  bech32.toWords(Uint8Array.from(Buffer.from(stakeAddressDecoded, 'hex'))),
  1000
);
// should be  : stake1uxyrc3fjk6kp343gznlu06w2qddk0f5d5r4znrxzg52zxlclk0hlq
// ❌ returns : stake13q7y2v4k4svdv2q5llr7njsrtdn6drdqag5cesj9zs3h7xjwn42

Am I missing a step before bech32 encoding the stake portion of the address? Thanks in advance.

**Tags:** cardano-address, shelley

---

## 1 answers

### Answer by username_1 on 2021-10-13. Score: 7 | Accepted answer

You're missing the prefix, i.e. e1 in this case.

const stakeAddressDecoded = 'e1'+addressDecoded.substr(addressDecoded.length - 56);


You have to add e1 (or e0 in case of testnet) as prefix.
Check page 113-114 for more details on prefix specifications: https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf

> **Comments:**
> **username_0**: Yes, this was the issue. Accepted as the answer - thanks!  

---

