Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase the test legacy wallet balance #478

Merged
merged 1 commit into from
Dec 2, 2024
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
5 changes: 4 additions & 1 deletion scripts/network/__mocks__/network_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ class TestNetwork {
// tx_1 provides a spendable balance of 0.1 * 10^8 satoshi
const tx_1 =
'010000000138f9c8ac1b4c6ad54e487206daad1fd12bae510dd70fbd2dc928f617ef6b4a47010000006a47304402200d01891ac5dc6d25452cadbe7ba7edd98143631cc2922da45dde94919593b222022066ef14c01c165a1530e2acf74bcd8648d7151b555fa0bfd0222c33e983091678012102033a004cb71693e809c45e1e491bc797654fa0c012be9dd46401ce8368beb705ffffffff02d02c5d05000000001976a91463fa54dad2e215ec21c54ff45a195d49b570b97988ac80969800000000001976a914f49b25384b79685227be5418f779b98a6be4c73888ac00000000';
return [Transaction.fromHex(tx_1)];
// tx_2 provides a spendable balance of 10000 PIVs
const tx_2 =
'010000000198bb641ffb74cf14e4f3e3c329fa7f97d605ca1b89d2c61a1e6d728da49342e2020000006a4730440220437d04f65dbc1e23cab38c1a6d2d2b4905ccfdea9d6e33429af8d58d3a689f41022039830fcae7545d8b5964b7c078b3d158e72e01642d274f9c3b38639d3ed292b9012103109bab9e66c51cb5da0dcc200fa7a336b8a3890489026ba7bbdf8ad379cf0251ffffffff020010a5d4e80000001976a914f49b25384b79685227be5418f779b98a6be4c73888ac228ff73e5d0100001976a914f8e77779f1787490e1459f4bde3afde5c057f6f888ac00000000';
return [Transaction.fromHex(tx_2), Transaction.fromHex(tx_1)];
} else if (
addr ===
'xpub6DVaPT3irDwUth7Y6Ff137FgA9jjvsmA2CHD7g2vjvvuMiNSUJRs9F8jSoPpXpc1s7ohR93dNAuzR5T2oPZFDTn7G2mHKYtpwtk7krNZmnV'
Expand Down
30 changes: 17 additions & 13 deletions tests/unit/wallet/transactions.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { Wallet } from '../../../scripts/wallet.js';
import { Mempool } from '../../../scripts/mempool.js';
import { setUpLegacyMainnetWallet } from '../../utils/test_utils';
import {
legacyMainnetInitialBalance,
setUpLegacyMainnetWallet,
} from '../../utils/test_utils';
import { describe, it, vi, afterAll, expect } from 'vitest';
import {
COutpoint,
Expand Down Expand Up @@ -34,6 +37,7 @@ async function checkFees(wallet, tx, feesPerBytes) {
const nBytes = (await wallet.sign(tx)).serialize().length / 2;
expect(fees).toBeGreaterThanOrEqual(feesPerBytes * nBytes);
expect(fees).toBeLessThanOrEqual((feesPerBytes + 1) * nBytes);
return fees;
}
describe('Wallet transaction tests', () => {
let wallet;
Expand Down Expand Up @@ -198,11 +202,11 @@ describe('Wallet transaction tests', () => {
it('creates a tx with max balance', async () => {
const tx = wallet.createTransaction(
'SR3L4TFUKKGNsnv2Q4hWTuET2a4vHpm1b9',
0.1 * 10 ** 8,
legacyMainnetInitialBalance(),
{ isDelegation: true }
);
expect(tx.version).toBe(1);
expect(tx.vin).toHaveLength(1);
expect(tx.vin).toHaveLength(2);
expect(tx.vin[0]).toStrictEqual(
new CTxIn({
outpoint: new COutpoint({
Expand All @@ -213,13 +217,13 @@ describe('Wallet transaction tests', () => {
})
);
expect(tx.vout).toHaveLength(1);
const fees = await checkFees(wallet, tx, MIN_FEE_PER_BYTE);
expect(tx.vout[0]).toStrictEqual(
new CTxOut({
script: '76a97b63d114291a25b5b4d1802e0611e9bf724a1e57d9210e826714f49b25384b79685227be5418f779b98a6be4c7386888ac',
value: 9997810, // 0.1 PIV - fee
value: legacyMainnetInitialBalance() - fees,
})
);
await checkFees(wallet, tx, MIN_FEE_PER_BYTE);
});

it('creates a t->s tx correctly', () => {
Expand Down Expand Up @@ -251,16 +255,15 @@ describe('Wallet transaction tests', () => {

it('it does not insert dust change', async () => {
// The tipical output has 34 bytes, so a 200 satoshi change is surely going to be dust
// a P2PKH with 1 input and 1 output will have more or less 190 bytes in size and 1900 satoshi of fees
// Finally 0.1*10**8 is the value of the UTXO we are spending (0.1 PIVs)
const value = 0.1 * 10 ** 8 - 1900 - 200;
// a P2PKH with 2 inputs and 1 output will have more or less 346 bytes in size and 3460 satoshi of fees
const value = legacyMainnetInitialBalance() - 3460 - 200;
const tx = wallet.createTransaction(
'DLabsktzGMnsK5K9uRTMCF6NoYNY6ET4Bb',
value,
{ subtractFeeFromAmt: false }
);
expect(tx.version).toBe(1);
expect(tx.vin).toHaveLength(1);
expect(tx.vin).toHaveLength(2);
expect(tx.vin[0]).toStrictEqual(
new CTxIn({
outpoint: new COutpoint({
Expand Down Expand Up @@ -319,23 +322,24 @@ describe('Wallet transaction tests', () => {
});

it('throws when balance is insufficient', () => {
const value = legacyMainnetInitialBalance() + 1;
expect(() =>
wallet.createTransaction(
'SR3L4TFUKKGNsnv2Q4hWTuET2a4vHpm1b9',
20 * 10 ** 8,
value,
{ isDelegation: true }
)
).toThrow(/not enough balance/i);
expect(() =>
wallet.createTransaction(
'DLabsktzGMnsK5K9uRTMCF6NoYNY6ET4Bb',
20 * 10 ** 8
value
)
).toThrow(/not enough balance/i);
expect(() =>
wallet.createTransaction(
'DLabsktzGMnsK5K9uRTMCF6NoYNY6ET4Bb',
50 * 10 ** 8,
value,
{ useShieldInputs: true }
)
).toThrow(/not enough balance/i);
Expand All @@ -352,7 +356,7 @@ describe('Wallet transaction tests', () => {
expect(() =>
wallet.createTransaction(
'DLabsktzGMnsK5K9uRTMCF6NoYNY6ET4Bb',
0.1 * 10 ** 8,
legacyMainnetInitialBalance(),
{ subtractFeeFromAmt: false }
)
).toThrow(/not enough balance/i);
Expand Down
6 changes: 5 additions & 1 deletion tests/utils/test_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ async function setUpWallet(masterKey, includeShield) {
expect(wallet.isSyncing).toBeFalsy();
return wallet;
}

export function legacyMainnetInitialBalance() {
return 10 ** 7 + 10 ** 12;
}
/**
* Creates a mainnet wallet with a legacy master key and a spendable UTXO and a dummy PIVXShield
* @returns {Promise<Wallet>}
Expand All @@ -59,7 +63,7 @@ export async function setUpLegacyMainnetWallet() {
const wallet = await setUpWallet(getLegacyMainnet(), true);

// sanity check on the balance
expect(wallet.balance).toBe(0.1 * 10 ** 8);
expect(wallet.balance).toBe(legacyMainnetInitialBalance());
expect(wallet.coldBalance).toBe(0);
expect(wallet.immatureBalance).toBe(0);

Expand Down