diff --git a/apps/alias-server/package-lock.json b/apps/alias-server/package-lock.json --- a/apps/alias-server/package-lock.json +++ b/apps/alias-server/package-lock.json @@ -14,7 +14,7 @@ "axios": "^1.3.4", "chronik-client": "^0.8.2", "cors": "^2.8.5", - "ecashaddrjs": "^1.2.0", + "ecashaddrjs": "^1.5.0", "express": "^4.18.2", "mongodb": "^5.0.1", "node-telegram-bot-api": "^0.61.0", @@ -1801,6 +1801,17 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2216,6 +2227,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2372,6 +2388,23 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/bs58check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", + "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" + } + }, "node_modules/bson": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/bson/-/bson-5.0.0.tgz", @@ -2846,11 +2879,12 @@ } }, "node_modules/ecashaddrjs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ecashaddrjs/-/ecashaddrjs-1.2.0.tgz", - "integrity": "sha512-8Yl4+fbbDpjdo8ytQOJPTAouv2Cpah8HS8KTlnlsEwwaHBPaDjKg9RfXEDachneBup3PzqmXoADoR/zjBcbcmQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ecashaddrjs/-/ecashaddrjs-1.5.0.tgz", + "integrity": "sha512-N+dNt6Y+i72dwUe8q3GD8Wo92l3qg5m4X6Aw44HYfOQ8lmZndemHimmuK8k4J6Nl3o54hp8wEe3D7w7rAwnayA==", "dependencies": { - "big-integer": "1.6.36" + "big-integer": "1.6.36", + "bs58check": "^3.0.1" } }, "node_modules/ecc-jsbn": { @@ -8413,6 +8447,11 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -8749,6 +8788,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -8864,6 +8908,23 @@ "update-browserslist-db": "^1.0.10" } }, + "bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "requires": { + "base-x": "^4.0.0" + } + }, + "bs58check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", + "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", + "requires": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" + } + }, "bson": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/bson/-/bson-5.0.0.tgz", @@ -9197,11 +9258,12 @@ } }, "ecashaddrjs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ecashaddrjs/-/ecashaddrjs-1.2.0.tgz", - "integrity": "sha512-8Yl4+fbbDpjdo8ytQOJPTAouv2Cpah8HS8KTlnlsEwwaHBPaDjKg9RfXEDachneBup3PzqmXoADoR/zjBcbcmQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ecashaddrjs/-/ecashaddrjs-1.5.0.tgz", + "integrity": "sha512-N+dNt6Y+i72dwUe8q3GD8Wo92l3qg5m4X6Aw44HYfOQ8lmZndemHimmuK8k4J6Nl3o54hp8wEe3D7w7rAwnayA==", "requires": { - "big-integer": "1.6.36" + "big-integer": "1.6.36", + "bs58check": "^3.0.1" } }, "ecc-jsbn": { diff --git a/apps/alias-server/package.json b/apps/alias-server/package.json --- a/apps/alias-server/package.json +++ b/apps/alias-server/package.json @@ -25,7 +25,7 @@ "axios": "^1.3.4", "chronik-client": "^0.8.2", "cors": "^2.8.5", - "ecashaddrjs": "^1.2.0", + "ecashaddrjs": "^1.5.0", "express": "^4.18.2", "mongodb": "^5.0.1", "node-telegram-bot-api": "^0.61.0", diff --git a/apps/alias-server/src/alias.js b/apps/alias-server/src/alias.js --- a/apps/alias-server/src/alias.js +++ b/apps/alias-server/src/alias.js @@ -5,11 +5,7 @@ 'use strict'; const cashaddr = require('ecashaddrjs'); const config = require('../config'); -const { - getAliasFromHex, - isValidAliasString, - getOutputScriptFromAddress, -} = require('./utils'); +const { getAliasFromHex, isValidAliasString } = require('./utils'); const { addOneAliasToDb } = require('./db'); module.exports = { @@ -19,7 +15,7 @@ // Get expected output script match for parseAliasTx // Do it here and not in parseAliasTx so that you don't do it for every single tx // Will all be the same for a given set of tx history - const registrationOutputScript = getOutputScriptFromAddress( + const registrationOutputScript = cashaddr.getOutputScriptFromAddress( aliasConstants.registrationAddress, ); diff --git a/apps/alias-server/src/utils.js b/apps/alias-server/src/utils.js --- a/apps/alias-server/src/utils.js +++ b/apps/alias-server/src/utils.js @@ -3,7 +3,6 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. 'use strict'; -const cashaddr = require('ecashaddrjs'); module.exports = { getAliasFromHex: function (aliasHex) { @@ -34,16 +33,6 @@ } return confirmedTxHistory; }, - getOutputScriptFromAddress: function (address) { - const { type, hash } = cashaddr.decode(address, true); - let registrationOutputScript; - if (type === 'p2pkh') { - registrationOutputScript = `76a914${hash}88ac`; - } else { - registrationOutputScript = `a914${hash}87`; - } - return registrationOutputScript; - }, wait: async function (msecs) { await new Promise(resolve => setTimeout(resolve, msecs)); }, diff --git a/apps/alias-server/test/aliasTests.js b/apps/alias-server/test/aliasTests.js --- a/apps/alias-server/test/aliasTests.js +++ b/apps/alias-server/test/aliasTests.js @@ -4,6 +4,7 @@ 'use strict'; const assert = require('assert'); +const cashaddr = require('ecashaddrjs'); const config = require('../config'); const { parseAliasTx, @@ -11,10 +12,7 @@ sortAliasTxsByTxidAndBlockheight, registerAliases, } = require('../src/alias'); -const { - getOutputScriptFromAddress, - removeUnconfirmedTxsFromTxHistory, -} = require('../src/utils'); +const { removeUnconfirmedTxsFromTxHistory } = require('../src/utils'); const { testAddressAliases, testAddressAliasesWithUnconfirmedTxs, @@ -40,7 +38,7 @@ await mongoServer.stop(); }); it('Correctly parses a 5-character alias transaction', function () { - const registrationOutputScript = getOutputScriptFromAddress( + const registrationOutputScript = cashaddr.getOutputScriptFromAddress( config.aliasConstants.registrationAddress, ); assert.deepEqual( @@ -65,7 +63,7 @@ ); }); it('Correctly parses a 6-character alias transaction', function () { - const registrationOutputScript = getOutputScriptFromAddress( + const registrationOutputScript = cashaddr.getOutputScriptFromAddress( config.aliasConstants.registrationAddress, ); assert.deepEqual( @@ -90,7 +88,7 @@ ); }); it('Returns false for an eToken transaction', function () { - const registrationOutputScript = getOutputScriptFromAddress( + const registrationOutputScript = cashaddr.getOutputScriptFromAddress( config.aliasConstants.registrationAddress, ); assert.deepEqual( @@ -109,7 +107,7 @@ ); }); it('Returns false for a standard tx without an OP_RETURN', function () { - const registrationOutputScript = getOutputScriptFromAddress( + const registrationOutputScript = cashaddr.getOutputScriptFromAddress( config.aliasConstants.registrationAddress, ); assert.deepEqual( diff --git a/apps/alias-server/test/utilsTests.js b/apps/alias-server/test/utilsTests.js --- a/apps/alias-server/test/utilsTests.js +++ b/apps/alias-server/test/utilsTests.js @@ -10,7 +10,6 @@ getAliasBytecount, isValidAliasString, removeUnconfirmedTxsFromTxHistory, - getOutputScriptFromAddress, } = require('../src/utils'); const unconfirmedAliasTxs = require('./mocks/unconfirmedAliasTxs'); const { @@ -49,21 +48,4 @@ testAddressAliases.txHistory, ); }); - // getOutputScriptFromAddress - it('Returns expected outputScript for a p2pkh address', function () { - assert.strictEqual( - getOutputScriptFromAddress( - 'ecash:qp3c268rd5946l2f5m5es4x25f7ewu4sjvpy52pqa8', - ), - '76a914638568e36d0b5d7d49a6e99854caa27d9772b09388ac', - ); - }); - it('Returns expected outputScript for a p2sh address', function () { - assert.strictEqual( - getOutputScriptFromAddress( - 'ecash:prfhcnyqnl5cgrnmlfmms675w93ld7mvvqd0y8lz07', - ), - 'a914d37c4c809fe9840e7bfa77b86bd47163f6fb6c6087', - ); - }); });