mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-03-03 03:59:10 +01:00
ADD: HP BIP84 can fetch utxo
This commit is contained in:
parent
aaa1339049
commit
9f3cd9b1a0
3 changed files with 69 additions and 0 deletions
|
@ -113,4 +113,25 @@ describe('Electrum', () => {
|
|||
assert.strictEqual(balances.addresses['bc1qcg6e26vtzja0h8up5w2m7utex0fsu4v0e0e7uy'].confirmed, 50000);
|
||||
assert.strictEqual(balances.addresses['bc1qcg6e26vtzja0h8up5w2m7utex0fsu4v0e0e7uy'].unconfirmed, 0);
|
||||
});
|
||||
|
||||
it('BlueElectrum can do multiGetUtxoByAddress()', async () => {
|
||||
let utxos = await BlueElectrum.multiGetUtxoByAddress(
|
||||
[
|
||||
'bc1qt4t9xl2gmjvxgmp5gev6m8e6s9c85979ta7jeh',
|
||||
'bc1qvd6w54sydc08z3802svkxr7297ez7cusd6266p',
|
||||
'bc1qwp58x4c9e5cplsnw5096qzdkae036ug7a34x3r',
|
||||
'bc1qcg6e26vtzja0h8up5w2m7utex0fsu4v0e0e7uy',
|
||||
],
|
||||
3,
|
||||
);
|
||||
|
||||
assert.strictEqual(Object.keys(utxos).length, 4);
|
||||
assert.strictEqual(
|
||||
utxos['bc1qt4t9xl2gmjvxgmp5gev6m8e6s9c85979ta7jeh'][0].tx_hash,
|
||||
'ad00a92409d8982a1d7f877056dbed0c4337d2ebab70b30463e2802279fb936d',
|
||||
);
|
||||
assert.strictEqual(utxos['bc1qt4t9xl2gmjvxgmp5gev6m8e6s9c85979ta7jeh'][0].tx_pos, 1);
|
||||
assert.strictEqual(utxos['bc1qt4t9xl2gmjvxgmp5gev6m8e6s9c85979ta7jeh'][0].value, 50000);
|
||||
assert.strictEqual(utxos['bc1qt4t9xl2gmjvxgmp5gev6m8e6s9c85979ta7jeh'][0].address, 'bc1qt4t9xl2gmjvxgmp5gev6m8e6s9c85979ta7jeh');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -114,6 +114,26 @@ describe('Bech32 Segwit HD (BIP84)', () => {
|
|||
}
|
||||
});
|
||||
|
||||
it('can fetch UTXO', async () => {
|
||||
if (!process.env.HD_MNEMONIC) {
|
||||
console.error('process.env.HD_MNEMONIC not set, skipped');
|
||||
return;
|
||||
}
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 90 * 1000;
|
||||
let hd = new HDSegwitBech32Wallet();
|
||||
hd.setSecret(process.env.HD_MNEMONIC);
|
||||
assert.ok(hd.validateMnemonic());
|
||||
|
||||
await hd.fetchBalance();
|
||||
await hd.fetchUtxo();
|
||||
let utxo = hd.getUtxo();
|
||||
assert.strictEqual(utxo.length, 4);
|
||||
assert.ok(utxo[0].tx_hash);
|
||||
assert.ok(utxo[0].tx_pos === 0 || utxo[0].tx_pos === 1);
|
||||
assert.ok(utxo[0].value);
|
||||
assert.ok(utxo[0].address);
|
||||
});
|
||||
|
||||
it('can generate addresses only via zpub', function() {
|
||||
let zpub = 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs';
|
||||
let hd = new HDSegwitBech32Wallet();
|
||||
|
|
|
@ -52,6 +52,8 @@ export class HDSegwitBech32Wallet extends AbstractHDWallet {
|
|||
|
||||
this._txs_by_external_index = {};
|
||||
this._txs_by_internal_index = {};
|
||||
|
||||
this._utxo = [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -344,6 +346,32 @@ export class HDSegwitBech32Wallet extends AbstractHDWallet {
|
|||
this._lastBalanceFetch = +new Date();
|
||||
}
|
||||
|
||||
async fetchUtxo() {
|
||||
// considering only confirmed balance
|
||||
let addressess = [];
|
||||
|
||||
for (let c = 0; c < this.next_free_address_index + this.gap_limit; c++) {
|
||||
if (this._balances_by_external_index[c] && this._balances_by_external_index[c].c && this._balances_by_external_index[c].c > 0) {
|
||||
addressess.push(this._getExternalAddressByIndex(c));
|
||||
}
|
||||
}
|
||||
|
||||
for (let c = 0; c < this.next_free_change_address_index + this.gap_limit; c++) {
|
||||
if (this._balances_by_internal_index[c] && this._balances_by_internal_index[c].c && this._balances_by_internal_index[c].c > 0) {
|
||||
addressess.push(this._getInternalAddressByIndex(c));
|
||||
}
|
||||
}
|
||||
|
||||
this._utxo = [];
|
||||
for (let arr of Object.values(await BlueElectrum.multiGetUtxoByAddress(addressess))) {
|
||||
this._utxo = this._utxo.concat(arr);
|
||||
}
|
||||
}
|
||||
|
||||
getUtxo() {
|
||||
return this._utxo;
|
||||
}
|
||||
|
||||
weOwnAddress(address) {
|
||||
for (let c = 0; c < this.next_free_address_index + this.gap_limit; c++) {
|
||||
if (this._getExternalAddressByIndex(c) === address) return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue