Skip to content

Commit

Permalink
feat: modify getVaultOutputValueFromTransaction function's arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
Polybius93 committed Feb 5, 2025
1 parent d9dfcf7 commit a529c3e
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 32 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "dlc-btc-lib",
"version": "2.5.13",
"version": "2.5.14",
"description": "This library provides a comprehensive set of interfaces and functions for minting dlcBTC tokens on supported blockchains.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down
24 changes: 7 additions & 17 deletions src/functions/bitcoin/bitcoin-functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export async function getVaultFundingBitcoinAddress(
const addresses =
equals(inputAddresses.length, 1) && equals(inputAddresses.at(0), multisigAddress)
? bitcoinTransaction.vout
.filter(output => output.scriptpubkey_address !== feeRecipientAddress)
.filter(output => !equals(output.scriptpubkey_address, feeRecipientAddress))
.map(output => output.scriptpubkey_address)
: inputAddresses.filter(address => !equals(address, multisigAddress));

Expand All @@ -122,31 +122,21 @@ export async function getVaultFundingBitcoinAddress(

export async function getVaultOutputValueFromTransaction(
vault: RawVault,
feeRecipient: string,
bitcoinTransaction: BitcoinTransaction,
extendedAttestorGroupPublicKey: string,
bitcoinNetwork: Network,
bitcoinBlockchainAPIURL: string
bitcoinNetwork: Network
): Promise<number> {
const fundingTransaction = await fetchBitcoinTransaction(
vault.fundingTxId,
bitcoinBlockchainAPIURL
);

const multisigAddress = createTaprootMultisigPayment(
deriveUnhardenedPublicKey(
getUnspendableKeyCommittedToUUID(vault.uuid, bitcoinNetwork),
bitcoinNetwork
),
getDerivedUnspendablePublicKeyCommittedToUUID(vault.uuid, bitcoinNetwork),
deriveUnhardenedPublicKey(extendedAttestorGroupPublicKey, bitcoinNetwork),
Buffer.from(vault.taprootPubKey, 'hex'),
bitcoinNetwork
).address;

const multisigOutput = fundingTransaction.vout.find(
output => output.scriptpubkey_address === multisigAddress
return (
bitcoinTransaction.vout.find(output => equals(output.scriptpubkey_address, multisigAddress))
?.value ?? 0
);

return multisigOutput ? multisigOutput.value : 0;
}

/**
Expand Down
18 changes: 4 additions & 14 deletions tests/unit/bitcoin-functions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -344,31 +344,21 @@ describe('Bitcoin Functions', () => {
});
describe('getVaultOutputValueFromTransaction', () => {
it('should return valid output value when multisig output exists', async () => {
jest
.spyOn(bitcoinRequestFunctions, 'fetchBitcoinTransaction')
.mockImplementationOnce(async () => TEST_TESTNET_FUNDING_TRANSACTION_1);

const result = await getVaultOutputValueFromTransaction(
TEST_VAULT_2,
TEST_VAULT_2.btcFeeRecipient,
TEST_TESTNET_FUNDING_TRANSACTION_1,
TEST_TESTNET_ATTESTOR_EXTENDED_GROUP_PUBLIC_KEY_1,
testnet,
TEST_TESTNET_BITCOIN_BLOCKCHAIN_API
testnet
);

expect(result).toBe(10000000);
});
it('should return 0 if multisig output does not exist', async () => {
jest
.spyOn(bitcoinRequestFunctions, 'fetchBitcoinTransaction')
.mockImplementationOnce(async () => TEST_TESTNET_FUNDING_TRANSACTION_6);

const result = await getVaultOutputValueFromTransaction(
TEST_VAULT_2,
TEST_VAULT_2.btcFeeRecipient,
TEST_TESTNET_FUNDING_TRANSACTION_6,
TEST_TESTNET_ATTESTOR_EXTENDED_GROUP_PUBLIC_KEY_1,
testnet,
TEST_TESTNET_BITCOIN_BLOCKCHAIN_API
testnet
);

expect(result).toBe(0);
Expand Down

0 comments on commit a529c3e

Please sign in to comment.