Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 8 additions & 36 deletions modules/abstract-utxo/src/recovery/backupKeyRecovery.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import assert from 'assert';

import _ from 'lodash';
import * as utxolib from '@bitgo/utxo-lib';
import { Dimensions } from '@bitgo/unspents';
Expand Down Expand Up @@ -33,44 +31,15 @@ type WalletUnspentJSON = utxolib.bitgo.WalletUnspent & {

const { getInternalChainCode, scriptTypeForChain, outputScripts, getExternalChainCode } = utxolib.bitgo;

export interface OfflineVaultTxInfo {
inputs: WalletUnspentJSON[];
}

export interface FormattedOfflineVaultTxInfo {
txInfo: {
unspents: WalletUnspentJSON[];
unspents?: WalletUnspentJSON[];
};
txHex: string;
feeInfo: Record<string, never>;
coin: string;
}

/**
* This transforms the txInfo from recover into the format that offline-signing-tool expects
* @param coinName
* @param txInfo
* @param txHex
* @returns {{txHex: *, txInfo: {unspents: *}, feeInfo: {}, coin: void}}
*/
function formatForOfflineVault(
coinName: string,
txInfo: OfflineVaultTxInfo,
txHex: string
): FormattedOfflineVaultTxInfo {
return {
txHex,
txInfo: {
unspents: txInfo.inputs.map((input) => {
assert(input.valueString);
return { ...input, valueString: input.valueString };
}),
},
feeInfo: {},
coin: coinName,
};
}

/**
* Get the current market price from a third party to be used for recovery
* This function is only intended for non-bitgo recovery transactions, when it is necessary
Expand Down Expand Up @@ -316,7 +285,7 @@ export async function backupKeyRecovery(

const isKrsRecovery = getIsKrsRecovery(params);
const isUnsignedSweep = getIsUnsignedSweep(params);
const responseTxFormat = isUnsignedSweep || !isKrsRecovery || params.krsProvider === 'keyternal' ? 'legacy' : 'psbt';
const responseTxFormat = !isKrsRecovery || params.krsProvider === 'keyternal' ? 'legacy' : 'psbt';

const krsProvider = isKrsRecovery ? getKrsProvider(coin, params.krsProvider) : undefined;

Expand Down Expand Up @@ -413,9 +382,12 @@ export async function backupKeyRecovery(
}

if (isUnsignedSweep) {
// TODO BTC-317 - When ready to PSBTify OVC, send psbt hex and skip unspents in response.
const txHex = psbt.getUnsignedTx().toBuffer().toString('hex');
return formatForOfflineVault(coin.getChain(), txInfo as OfflineVaultTxInfo, txHex);
return {
txHex: psbt.toHex(),
txInfo: {},
feeInfo: {},
coin: coin.getChain(),
};
} else {
signAndVerifyPsbt(psbt, walletKeys.user, { isLastSignature: false });
if (isKrsRecovery) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,6 @@
{
"txHex": "0200000003d7c3d565c03d67573680c96285939855cc656beade6793cbb121fb2ca51f339c0000000000ffffffff6adf8f092a117182d89effd08726812693d051e2c6e78efc3b967f88a619f2160000000000ffffffff3f482a856356853fe1e8cefffc23e30363038ba4c8c89bc505e4c5f0f595158c0000000000ffffffff010c44c3230000000017a91439c65a0d0072a140694d6b13ec5f5f2437de99ff8700000000",
"txInfo": {
"unspents": [
{
"id": "9c331fa52cfb21b1cb9367deea6b65cc5598938562c9803657673dc065d5c3d7:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 100000000,
"chain": 1,
"index": 0,
"valueString": "100000000"
},
{
"id": "16f219a6887f963bfc8ee7c6e251d09326812687d0ff9ed88271112a098fdf6a:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 200000000,
"chain": 1,
"index": 0,
"valueString": "200000000"
},
{
"id": "8c1595f5f0c5e405c59bc8c8a48b036303e323fcffcee8e13f855663852a483f:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 300000000,
"chain": 1,
"index": 0,
"valueString": "300000000"
}
]
},
"txHex": "70736274ff0100a50200000003d7c3d565c03d67573680c96285939855cc656beade6793cbb121fb2ca51f339c0000000000ffffffff6adf8f092a117182d89effd08726812693d051e2c6e78efc3b967f88a619f2160000000000ffffffff3f482a856356853fe1e8cefffc23e30363038ba4c8c89bc505e4c5f0f595158c0000000000ffffffff010c44c3230000000017a91439c65a0d0072a140694d6b13ec5f5f2437de99ff87000000004f010488b21e0000000000000000004b256d3cf3524c8d7086e295a1923d6fa2f99b686699ed50084bb114495c982403a86864862a9e315221809501f2a4200cd9e057a70f9164d485d4cfbeb8e47c74048374ad864f010488b21e000000000000000000914cc440157319de14126a1a2e87ea86f3b983f923fb17693a157b721220d74c02e81e105716179975cc47afd117cae272519aafdd6bfff688e4280d384e13184f04e15f6f214f010488b21e000000000000000000da28679577f7faf0ed86164da220aa4a29c7edfb0de8bdabd97f19fd15e74bed03db2b42af97f60db6ec5a1500e246ef2107660c4fc02699ed69b82c2f3e9324ae0403a82391000100be02000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008c9a3212461e71cadb8f4d9ac4eda10ed0445c5acca3041e9d92e06360b85350022032e211d19adbc911da021394384621b19fe2729b4085f2a20a54a14c81389e83012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100e1f5050000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f2100000000000000000100000000000000000100be02000000010101010101010101010101010101010101010101010101010101010101010101000000006b483045022100a749722d784fbb843b6e33b35c47f0fce8f24652d7cfaa353e1c9dbbd0e0340202207b7c85cdfee0d1cccd1c469cece83f7a510a8db40f62675c84b55bc437d84dce012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100c2eb0b0000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f2100000000000000000100000000000000000100bd02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402202a36601376e4b4c64c2fc6357a37a71364b46b6dd7a8b84825baabaf2b5e37720220599e40054ee5570825cb36da797d7d3c6c77297d550c7db0d01ef9971155a4bf012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100a3e1110000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f21000000000000000001000000000000000000",
"txInfo": {},
"feeInfo": {},
"coin": "bch",
"txid": "9bd9069313617cd82c59d374eb511f7f43484bd90585f79ca225f0185f7ff8d8"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,6 @@
{
"txHex": "0200000003d7c3d565c03d67573680c96285939855cc656beade6793cbb121fb2ca51f339c0000000000ffffffff6adf8f092a117182d89effd08726812693d051e2c6e78efc3b967f88a619f2160000000000ffffffff3f482a856356853fe1e8cefffc23e30363038ba4c8c89bc505e4c5f0f595158c0000000000ffffffff010c44c3230000000017a91439c65a0d0072a140694d6b13ec5f5f2437de99ff8700000000",
"txInfo": {
"unspents": [
{
"id": "9c331fa52cfb21b1cb9367deea6b65cc5598938562c9803657673dc065d5c3d7:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 100000000,
"chain": 1,
"index": 0,
"valueString": "100000000"
},
{
"id": "16f219a6887f963bfc8ee7c6e251d09326812687d0ff9ed88271112a098fdf6a:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 200000000,
"chain": 1,
"index": 0,
"valueString": "200000000"
},
{
"id": "8c1595f5f0c5e405c59bc8c8a48b036303e323fcffcee8e13f855663852a483f:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 300000000,
"chain": 1,
"index": 0,
"valueString": "300000000"
}
]
},
"txHex": "70736274ff0100a50200000003d7c3d565c03d67573680c96285939855cc656beade6793cbb121fb2ca51f339c0000000000ffffffff6adf8f092a117182d89effd08726812693d051e2c6e78efc3b967f88a619f2160000000000ffffffff3f482a856356853fe1e8cefffc23e30363038ba4c8c89bc505e4c5f0f595158c0000000000ffffffff010c44c3230000000017a91439c65a0d0072a140694d6b13ec5f5f2437de99ff87000000004f010488b21e0000000000000000004b256d3cf3524c8d7086e295a1923d6fa2f99b686699ed50084bb114495c982403a86864862a9e315221809501f2a4200cd9e057a70f9164d485d4cfbeb8e47c74048374ad864f010488b21e000000000000000000914cc440157319de14126a1a2e87ea86f3b983f923fb17693a157b721220d74c02e81e105716179975cc47afd117cae272519aafdd6bfff688e4280d384e13184f04e15f6f214f010488b21e000000000000000000da28679577f7faf0ed86164da220aa4a29c7edfb0de8bdabd97f19fd15e74bed03db2b42af97f60db6ec5a1500e246ef2107660c4fc02699ed69b82c2f3e9324ae0403a82391000100be02000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008c9a3212461e71cadb8f4d9ac4eda10ed0445c5acca3041e9d92e06360b85350022032e211d19adbc911da021394384621b19fe2729b4085f2a20a54a14c81389e83012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100e1f5050000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f2100000000000000000100000000000000000100be02000000010101010101010101010101010101010101010101010101010101010101010101000000006b483045022100a749722d784fbb843b6e33b35c47f0fce8f24652d7cfaa353e1c9dbbd0e0340202207b7c85cdfee0d1cccd1c469cece83f7a510a8db40f62675c84b55bc437d84dce012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100c2eb0b0000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f2100000000000000000100000000000000000100bd02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402202a36601376e4b4c64c2fc6357a37a71364b46b6dd7a8b84825baabaf2b5e37720220599e40054ee5570825cb36da797d7d3c6c77297d550c7db0d01ef9971155a4bf012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100a3e1110000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f21000000000000000001000000000000000000",
"txInfo": {},
"feeInfo": {},
"coin": "bcha",
"txid": "9bd9069313617cd82c59d374eb511f7f43484bd90585f79ca225f0185f7ff8d8"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,6 @@
{
"txHex": "0200000003d7c3d565c03d67573680c96285939855cc656beade6793cbb121fb2ca51f339c0000000000ffffffff6adf8f092a117182d89effd08726812693d051e2c6e78efc3b967f88a619f2160000000000ffffffff3f482a856356853fe1e8cefffc23e30363038ba4c8c89bc505e4c5f0f595158c0000000000ffffffff010c44c3230000000017a91439c65a0d0072a140694d6b13ec5f5f2437de99ff8700000000",
"txInfo": {
"unspents": [
{
"id": "9c331fa52cfb21b1cb9367deea6b65cc5598938562c9803657673dc065d5c3d7:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 100000000,
"chain": 1,
"index": 0,
"valueString": "100000000"
},
{
"id": "16f219a6887f963bfc8ee7c6e251d09326812687d0ff9ed88271112a098fdf6a:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 200000000,
"chain": 1,
"index": 0,
"valueString": "200000000"
},
{
"id": "8c1595f5f0c5e405c59bc8c8a48b036303e323fcffcee8e13f855663852a483f:0",
"address": "37qPMKZpagdNztA82mXrE81ch2kPzYxEnH",
"value": 300000000,
"chain": 1,
"index": 0,
"valueString": "300000000"
}
]
},
"txHex": "70736274ff0100a50200000003d7c3d565c03d67573680c96285939855cc656beade6793cbb121fb2ca51f339c0000000000ffffffff6adf8f092a117182d89effd08726812693d051e2c6e78efc3b967f88a619f2160000000000ffffffff3f482a856356853fe1e8cefffc23e30363038ba4c8c89bc505e4c5f0f595158c0000000000ffffffff010c44c3230000000017a91439c65a0d0072a140694d6b13ec5f5f2437de99ff87000000004f010488b21e0000000000000000004b256d3cf3524c8d7086e295a1923d6fa2f99b686699ed50084bb114495c982403a86864862a9e315221809501f2a4200cd9e057a70f9164d485d4cfbeb8e47c74048374ad864f010488b21e000000000000000000914cc440157319de14126a1a2e87ea86f3b983f923fb17693a157b721220d74c02e81e105716179975cc47afd117cae272519aafdd6bfff688e4280d384e13184f04e15f6f214f010488b21e000000000000000000da28679577f7faf0ed86164da220aa4a29c7edfb0de8bdabd97f19fd15e74bed03db2b42af97f60db6ec5a1500e246ef2107660c4fc02699ed69b82c2f3e9324ae0403a82391000100be02000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008c9a3212461e71cadb8f4d9ac4eda10ed0445c5acca3041e9d92e06360b85350022032e211d19adbc911da021394384621b19fe2729b4085f2a20a54a14c81389e83012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100e1f5050000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f2100000000000000000100000000000000000100be02000000010101010101010101010101010101010101010101010101010101010101010101000000006b483045022100a749722d784fbb843b6e33b35c47f0fce8f24652d7cfaa353e1c9dbbd0e0340202207b7c85cdfee0d1cccd1c469cece83f7a510a8db40f62675c84b55bc437d84dce012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100c2eb0b0000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f2100000000000000000100000000000000000100bd02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402202a36601376e4b4c64c2fc6357a37a71364b46b6dd7a8b84825baabaf2b5e37720220599e40054ee5570825cb36da797d7d3c6c77297d550c7db0d01ef9971155a4bf012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff0100a3e1110000000017a9144365f80ae9830dab1d9124be68c74c2fa23bbc12870000000001030441000000010469522102d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc6121030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3521029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d53ae2206029b30ebe8eb23f8cec82f25a80e3b423979ec3ba1fe07d9d4ed9f6361258bc31d148374ad8600000000000000000100000000000000220602d06c08ccf0fddefff881e869b951d4b92e936118b3360182c5b8c55f4c40bc611403a82391000000000000000001000000000000002206030795af84ecc10252d8a894f54845beeb5624a1c24c3747cc654bd430539dee3514e15f6f21000000000000000001000000000000000000",
"txInfo": {},
"feeInfo": {},
"coin": "bsv",
"txid": "9bd9069313617cd82c59d374eb511f7f43484bd90585f79ca225f0185f7ff8d8"
Expand Down
Loading