From df57fdebcc96ba43c0a5a42c02bc5df7f6c031e5 Mon Sep 17 00:00:00 2001 From: rozaydin Date: Thu, 4 Mar 2021 14:56:01 +0300 Subject: [PATCH 1/2] propagated hsd PR 499 (https://github.com/handshake-org/hsd/pull/499) into here Signed-off-by: rozaydin --- lib/primitives/address.js | 2 -- lib/wallet/txdb.js | 1 - lib/wallet/wallet.js | 15 ++++++++--- test/wallet-importname-test.js | 15 +++-------- test/wallet-test.js | 48 +++++++++++++++++----------------- 5 files changed, 39 insertions(+), 42 deletions(-) diff --git a/lib/primitives/address.js b/lib/primitives/address.js index d73ce3114..d4c72bb21 100644 --- a/lib/primitives/address.js +++ b/lib/primitives/address.js @@ -542,8 +542,6 @@ class Address extends bio.Struct { throw new Error('Object is not an address.'); if (Buffer.isBuffer(data)) { - if (data.length !== 20 && data.length !== 32) - throw new Error('Object is not an address.'); return data; } diff --git a/lib/wallet/txdb.js b/lib/wallet/txdb.js index f9caa3100..77647c2c1 100644 --- a/lib/wallet/txdb.js +++ b/lib/wallet/txdb.js @@ -2214,7 +2214,6 @@ class TXDB { ns.applyState(delta); if (ns.isNull()) { - await this.removeNameMap(b, nameHash); b.del(layout.A.encode(nameHash)); } else { b.put(layout.A.encode(nameHash), ns.encode()); diff --git a/lib/wallet/wallet.js b/lib/wallet/wallet.js index 38d249b22..69475e9d8 100644 --- a/lib/wallet/wallet.js +++ b/lib/wallet/wallet.js @@ -1228,8 +1228,8 @@ class Wallet extends EventEmitter { async _importName(name) { const nameHash = rules.hashName(name); - if (await this.txdb.hasNameState(nameHash)) - throw new Error('Name already exists.'); + // if (await this.txdb.hasNameState(nameHash)) + // throw new Error('Name already exists.'); const b = this.db.batch(); await this.wdb.addNameMap(b, nameHash, this.wid); @@ -1715,7 +1715,10 @@ class Wallet extends EventEmitter { continue; } - const addr = await this.receiveAddress(acct); + const addr = Address.fromNulldata(Buffer.alloc(2)); + try { + await this.importName(name); + } catch (err) { /** swallow the case where an expired name re-opened */ } const output = new Output(); output.address = addr; @@ -1730,6 +1733,10 @@ class Wallet extends EventEmitter { continue; } + // const b = this.db.batch(); + // await this.wdb.addNameMap(b, nameHash, this.wid); + // await b.write(); + mtx.outputs.push(output); } @@ -1749,7 +1756,7 @@ class Wallet extends EventEmitter { async _createBatchOpen(names, force, options) { const acct = options ? options.account || 0 : 0; const {mtx, errors, isAllError} = await this - .makeBatchOpen(names, force, acct); + .makeBatchOpen(names, force, acct); if (!isAllError) { await this.fill(mtx, options); const finalizedMtx = await this.finalize(mtx, options); diff --git a/test/wallet-importname-test.js b/test/wallet-importname-test.js index cca5c43f2..ee9c07206 100644 --- a/test/wallet-importname-test.js +++ b/test/wallet-importname-test.js @@ -100,11 +100,8 @@ describe('Wallet Import Name', function() { assert(ns4 === null); }); - it('should not re-import an existing name', async () => { - await assert.rejects( - alice.importName(name), - {message: 'Name already exists.'} - ); + it('should ignore re-importing existing name', async () => { + await alice.importName(name); }); it('should bid on names from Alice\'s wallet', async () => { @@ -223,13 +220,9 @@ describe('Wallet Import Name', function() { assert(!bid.own); }); - it('should not re-import name', async () => { + it('should ignore re-importing name', async () => { await wclient.execute('selectwallet', ['charlie']); - - await assert.rejects( - wclient.execute('importname', [name, 0]), - {message: 'Name already exists.'} - ); + await wclient.execute('importname', [name, 0]); }); }); }); diff --git a/test/wallet-test.js b/test/wallet-test.js index d45d113c9..2da5dc6f9 100644 --- a/test/wallet-test.js +++ b/test/wallet-test.js @@ -2011,7 +2011,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 2); - assert.strictEqual(bal.coin, 2); + assert.strictEqual(bal.coin, 1); // OPENs are sent to a null address assert.strictEqual(bal.confirmed, fund); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, 0); @@ -2030,7 +2030,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 2); - assert.strictEqual(bal.coin, 2); + assert.strictEqual(bal.coin, 1); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, 0); @@ -2047,7 +2047,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 3); - assert.strictEqual(bal.coin, 3); + assert.strictEqual(bal.coin, 2); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, lockup); @@ -2065,7 +2065,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 3); - assert.strictEqual(bal.coin, 3); + assert.strictEqual(bal.coin, 2); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, lockup); @@ -2082,7 +2082,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 4); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, value); @@ -2100,7 +2100,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 4); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, value); @@ -2145,7 +2145,7 @@ describe('Wallet', function() { assert.strictEqual(bal.tx, 5); // Wallet coin count doesn't change: // REVEAL + fee money -> REGISTER + change - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, secondHighest); @@ -2163,7 +2163,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 5); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, secondHighest); @@ -2178,7 +2178,7 @@ describe('Wallet', function() { // Check const senderBal1 = await wallet.getBalance(); assert.strictEqual(senderBal1.tx, 6); - assert.strictEqual(senderBal1.coin, 4); + assert.strictEqual(senderBal1.coin, 3); assert.strictEqual(senderBal1.confirmed, fund - (cTXCount * fee)); assert.strictEqual(senderBal1.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(senderBal1.ulocked, secondHighest); @@ -2204,7 +2204,7 @@ describe('Wallet', function() { // Check const senderBal2 = await wallet.getBalance(); assert.strictEqual(senderBal2.tx, 6); - assert.strictEqual(senderBal2.coin, 4); + assert.strictEqual(senderBal2.coin, 3); assert.strictEqual(senderBal2.confirmed, fund - (cTXCount * fee)); assert.strictEqual(senderBal2.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(senderBal2.ulocked, secondHighest); @@ -2230,7 +2230,7 @@ describe('Wallet', function() { const senderBal3 = await wallet.getBalance(); assert.strictEqual(senderBal3.tx, 7); // One less wallet coin because name UTXO belongs to recip now - assert.strictEqual(senderBal3.coin, 3); + assert.strictEqual(senderBal3.coin, 2); assert.strictEqual(senderBal3.confirmed, fund - (cTXCount * fee)); assert.strictEqual(senderBal3.unconfirmed, fund - secondHighest - (uTXCount * fee)); assert.strictEqual(senderBal3.ulocked, 0); @@ -2259,7 +2259,7 @@ describe('Wallet', function() { // Check senderBalBefore = await wallet.getBalance(); assert.strictEqual(senderBalBefore.tx, 7); - assert.strictEqual(senderBalBefore.coin, 3); + assert.strictEqual(senderBalBefore.coin, 2); assert.strictEqual(senderBalBefore.confirmed, fund - secondHighest - (cTXCount * fee)); assert.strictEqual(senderBalBefore.unconfirmed, fund - secondHighest - (uTXCount * fee)); assert.strictEqual(senderBalBefore.ulocked, 0); @@ -2292,7 +2292,7 @@ describe('Wallet', function() { // Check const senderBal4 = await wallet.getBalance(); assert.strictEqual(senderBal4.tx, 7); - assert.strictEqual(senderBal4.coin, 3); + assert.strictEqual(senderBal4.coin, 2); assert.strictEqual(senderBal4.confirmed, fund - (cTXCount * fee)); assert.strictEqual(senderBal4.unconfirmed, fund - secondHighest - (uTXCount * fee)); assert.strictEqual(senderBal4.ulocked, 0); @@ -2396,7 +2396,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 2); - assert.strictEqual(bal.coin, 2); + assert.strictEqual(bal.coin, 1); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, 0); @@ -2412,7 +2412,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 2); - assert.strictEqual(bal.coin, 2); + assert.strictEqual(bal.coin, 1); assert.strictEqual(bal.confirmed, 10e6 - (1 * fee)); assert.strictEqual(bal.unconfirmed, 10e6 - (1 * fee)); assert.strictEqual(bal.ulocked, 0); @@ -2431,7 +2431,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 3); - assert.strictEqual(bal.coin, 3); + assert.strictEqual(bal.coin, 2); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, lockup); @@ -2447,7 +2447,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 3); - assert.strictEqual(bal.coin, 3); + assert.strictEqual(bal.coin, 2); assert.strictEqual(bal.confirmed, 10e6 - (2 * fee)); assert.strictEqual(bal.unconfirmed, 10e6 - (2 * fee)); assert.strictEqual(bal.ulocked, lockup); @@ -2466,7 +2466,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 4); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, value); @@ -2508,7 +2508,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 4); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, 10e6 - (3 * fee)); assert.strictEqual(bal.unconfirmed, 10e6 - (3 * fee)); assert.strictEqual(bal.ulocked, value); @@ -2529,7 +2529,7 @@ describe('Wallet', function() { assert.strictEqual(bal.tx, 5); // Wallet coin count doesn't change: // REVEAL + fee money -> REGISTER + change - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, secondHighest); @@ -2546,7 +2546,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 5); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, secondHighest); @@ -2565,7 +2565,7 @@ describe('Wallet', function() { // Check bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 6); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, secondHighest); @@ -2581,7 +2581,7 @@ describe('Wallet', function() { // Check let bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 6); - assert.strictEqual(bal.coin, 4); + assert.strictEqual(bal.coin, 3); assert.strictEqual(bal.confirmed, fund - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - (uTXCount * fee)); assert.strictEqual(bal.ulocked, secondHighest); @@ -2601,7 +2601,7 @@ describe('Wallet', function() { bal = await wallet.getBalance(); assert.strictEqual(bal.tx, 7); // Coin count reduced by giving away name UTXO - assert.strictEqual(bal.coin, 3); + assert.strictEqual(bal.coin, 2); assert.strictEqual(bal.confirmed, fund - secondHighest - (cTXCount * fee)); assert.strictEqual(bal.unconfirmed, fund - secondHighest - (uTXCount * fee)); assert.strictEqual(bal.ulocked, 0); From 0eed3715b29f6c6bddbb5af3b9d8685ef89a3d08 Mon Sep 17 00:00:00 2001 From: rozaydin Date: Fri, 5 Mar 2021 19:18:20 +0300 Subject: [PATCH 2/2] self review cleanup Signed-off-by: rozaydin --- lib/wallet/wallet.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/wallet/wallet.js b/lib/wallet/wallet.js index 69475e9d8..a6000416b 100644 --- a/lib/wallet/wallet.js +++ b/lib/wallet/wallet.js @@ -1228,9 +1228,6 @@ class Wallet extends EventEmitter { async _importName(name) { const nameHash = rules.hashName(name); - // if (await this.txdb.hasNameState(nameHash)) - // throw new Error('Name already exists.'); - const b = this.db.batch(); await this.wdb.addNameMap(b, nameHash, this.wid); await b.write(); @@ -1733,10 +1730,6 @@ class Wallet extends EventEmitter { continue; } - // const b = this.db.batch(); - // await this.wdb.addNameMap(b, nameHash, this.wid); - // await b.write(); - mtx.outputs.push(output); }