diff --git a/package-lock.json b/package-lock.json index 1550efb..a6a5829 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stakewise/v3-deposit-data-parser", - "version": "1.8.6", + "version": "1.8.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@stakewise/v3-deposit-data-parser", - "version": "1.8.6", + "version": "1.8.9", "license": "AGPL-3.0-only", "devDependencies": { "@chainsafe/ssz": "0.11.1", diff --git a/package.json b/package.json index 895eeb5..cb57254 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "1.8.6", + "version": "1.8.9", "main": "dist/index.js", "name": "@stakewise/v3-deposit-data-parser", "description": "v3-deposit-data-parser", diff --git a/src/parser/getDepositData.ts b/src/parser/getDepositData.ts index 6cd9273..887cdfe 100644 --- a/src/parser/getDepositData.ts +++ b/src/parser/getDepositData.ts @@ -21,15 +21,14 @@ export type DepositDataInput = { const getDepositData = async (values: DepositDataInput): Promise => { const { pubkey, vaultAddress, withdrawalAddress, network } = values - // TODO: use withdrawalCredentialAddress instead of vaultAddress after restake logic is implemented - // const isRestakeVault = await requests.checkIsRestakeVault(vaultAddress, network) - // - // const withdrawalCredentialAddress = isRestakeVault - // ? await getEigenPodAddress({ vaultAddress, withdrawalAddress, network }) - // : vaultAddress + const isRestakeVault = await requests.checkIsRestakeVault(vaultAddress, network) + + const withdrawalCredentialAddress = isRestakeVault + ? await getEigenPodAddress({ vaultAddress, withdrawalAddress, network }) + : vaultAddress try { - const withdrawalCredentials = getWithdrawalCredentials(vaultAddress) + const withdrawalCredentials = getWithdrawalCredentials(withdrawalCredentialAddress) const depositData = { amount: getAmount(network), diff --git a/src/parser/getTreeLeaf.ts b/src/parser/getTreeLeaf.ts index 3f24167..928fec4 100644 --- a/src/parser/getTreeLeaf.ts +++ b/src/parser/getTreeLeaf.ts @@ -6,12 +6,13 @@ export type TreeLeafInput = { pubkey: string signature: string depositData: DepositData + withdrawalAddress?: string } -// Creates an array concatenating pubkey, signature, and hashTreeRoot for a given deposit data +// Creates an array concatenating pubkey, signature, hashTreeRoot and withdrawalAddress for a given deposit data // This array is used to create a Merkle tree and load it into IPFS const getTreeLeaf = (values: TreeLeafInput): Uint8Array => { - const { depositData, pubkey, signature } = values + const { depositData, pubkey, signature, withdrawalAddress } = values try { // Calculate the hash tree root for the given deposit data and signature @@ -20,12 +21,18 @@ const getTreeLeaf = (values: TreeLeafInput): Uint8Array => { signature: getBytes(prefix0x.add(signature)), }) - const leave = Buffer.concat([ + const leafParts = [ getBytes(prefix0x.add(pubkey)), getBytes(prefix0x.add(signature)), - ]) + hashTreeRoot, + ] - const treeLeaf = Buffer.concat([ leave, hashTreeRoot ]) + // Optionally add the withdrawal address if it exists + if (withdrawalAddress) { + leafParts.push(getBytes(prefix0x.add(withdrawalAddress))) + } + + const treeLeaf = Buffer.concat(leafParts) return treeLeaf } diff --git a/src/parser/index.ts b/src/parser/index.ts index 161a3eb..6062119 100644 --- a/src/parser/index.ts +++ b/src/parser/index.ts @@ -29,7 +29,7 @@ export const depositDataParser = async (input: ParserInput) => { verifySignature({ bls, pubkey, signature, depositData, network }) - const treeLeaf = getTreeLeaf({ pubkey, signature, depositData }) + const treeLeaf = getTreeLeaf({ pubkey, signature, depositData, withdrawalAddress: withdrawal_address }) pubkeySet.add(pubkey) treeLeaves.push(treeLeaf)