diff --git a/modules/ecash-agora/.eslintrc.js b/modules/ecash-agora/.eslintrc.js new file mode 100644 --- /dev/null +++ b/modules/ecash-agora/.eslintrc.js @@ -0,0 +1,45 @@ +// Copyright (c) 2024 The Bitcoin developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +const headerArray = [ + { + pattern: + '^ Copyright \\(c\\) 2[0-9]{3}(-2[0-9]{3})? The Bitcoin developers$', + template: ` Copyright (c) ${new Date().getFullYear()} The Bitcoin developers`, + }, + ' Distributed under the MIT software license, see the accompanying', + ' file COPYING or http://www.opensource.org/licenses/mit-license.php.', +]; + +module.exports = { + env: { + node: true, + commonjs: true, + es2021: true, + mocha: true, + }, + overrides: [], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', // Add TypeScript recommended rules + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', // If you're using ES modules + parser: '@typescript-eslint/parser', // Use the TS parser + }, + plugins: [ + 'header', + '@typescript-eslint', // Add the TypeScript plugin + ], + rules: { + 'strict': 'error', + 'header/header': [2, 'line', headerArray, 2], + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { varsIgnorePattern: '^_' }, + ], + }, +}; diff --git a/modules/ecash-agora/eslint.config.js b/modules/ecash-agora/eslint.config.js deleted file mode 100644 --- a/modules/ecash-agora/eslint.config.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2024 The Bitcoin developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -// @ts-check - -import eslint from '@eslint/js'; -import tseslint from 'typescript-eslint'; - -export default tseslint.config( - eslint.configs.recommended, - ...tseslint.configs.recommended, - { - ignores: ['dist/*'], - }, -); diff --git a/modules/ecash-agora/package-lock.json b/modules/ecash-agora/package-lock.json --- a/modules/ecash-agora/package-lock.json +++ b/modules/ecash-agora/package-lock.json @@ -18,6 +18,7 @@ "@types/chai-as-promised": "^7.1.8", "@types/mocha": "^10.0.6", "@types/node": "^20.12.7", + "@typescript-eslint/parser": "^7.6.0", "chai": "^4.4.1", "chai-as-promised": "^7.1.1", "eslint-plugin-header": "^3.1.1", @@ -32,7 +33,7 @@ } }, "../chronik-client": { - "version": "0.28.0", + "version": "1.3.1", "license": "MIT", "dependencies": { "@types/ws": "^8.2.1", @@ -65,8 +66,11 @@ } }, "../ecash-lib": { - "version": "0.1.1", + "version": "0.2.1", "license": "MIT", + "dependencies": { + "ecashaddrjs": "file:../ecashaddrjs" + }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.2", "@types/chai": "^4.3.14", @@ -1321,6 +1325,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.6.0", @@ -1351,26 +1356,12 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1378,17 +1369,12 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "7.6.0", "@typescript-eslint/types": "7.6.0", @@ -1434,6 +1420,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "7.6.0", "@typescript-eslint/utils": "7.6.0", @@ -2363,6 +2350,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", "dev": true, + "license": "MIT", "peerDependencies": { "eslint": ">=7.7.0" } @@ -5718,28 +5706,10 @@ "ts-api-utils": "^1.3.0" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true } } @@ -6353,6 +6323,7 @@ "@types/node": "^20.12.7", "chai": "^5.1.0", "chronik-client": "file:../chronik-client", + "ecashaddrjs": "file:../ecashaddrjs", "eslint-plugin-header": "^3.1.1", "mocha": "^10.4.0", "mocha-junit-reporter": "^2.2.1", diff --git a/modules/ecash-agora/package.json b/modules/ecash-agora/package.json --- a/modules/ecash-agora/package.json +++ b/modules/ecash-agora/package.json @@ -32,6 +32,7 @@ "@types/chai-as-promised": "^7.1.8", "@types/mocha": "^10.0.6", "@types/node": "^20.12.7", + "@typescript-eslint/parser": "^7.6.0", "chai": "^4.4.1", "chai-as-promised": "^7.1.1", "eslint-plugin-header": "^3.1.1", diff --git a/modules/ecash-agora/src/agora.ts b/modules/ecash-agora/src/agora.ts --- a/modules/ecash-agora/src/agora.ts +++ b/modules/ecash-agora/src/agora.ts @@ -222,7 +222,7 @@ ...params.extraOutputs, ], }); - case 'PARTIAL': + case 'PARTIAL': { if (params.acceptedTokens === undefined) { throw new Error( 'Must set acceptedTokens for partial offers', @@ -309,6 +309,7 @@ txBuild.outputs.push(...params.extraOutputs); txBuild.locktime = agoraPartial.enforcedLockTime; return txBuild; + } default: throw new Error('Not implemented'); } diff --git a/modules/ecash-agora/tests/partial.locktime.test.ts b/modules/ecash-agora/tests/partial.locktime.test.ts --- a/modules/ecash-agora/tests/partial.locktime.test.ts +++ b/modules/ecash-agora/tests/partial.locktime.test.ts @@ -11,7 +11,6 @@ DEFAULT_DUST_LIMIT, Ecc, P2PKHSignatory, - SLP_FUNGIBLE, Script, TxBuilder, TxBuilderInput, @@ -20,13 +19,11 @@ fromHex, initWasm, shaRmd160, - slpSend, toHex, } from 'ecash-lib'; import { TestRunner } from 'ecash-lib/dist/test/testRunner.js'; import { AgoraPartial, AgoraPartialSignatory } from '../src/partial.js'; -import { makeSlpOffer, takeSlpOffer } from './partial-helper-slp.js'; import { Agora, AgoraOffer } from '../src/agora.js'; import { makeAlpGenesis } from './partial-helper-alp.js'; @@ -52,12 +49,10 @@ let makerPk: Uint8Array; let makerPkh: Uint8Array; let makerScript: Script; - let makerScriptHex: string; let takerSk: Uint8Array; let takerPk: Uint8Array; let takerPkh: Uint8Array; let takerScript: Script; - let takerScriptHex: string; async function makeBuilderInputs( values: number[], @@ -89,12 +84,10 @@ makerPk = ecc.derivePubkey(makerSk); makerPkh = shaRmd160(makerPk); makerScript = Script.p2pkh(makerPkh); - makerScriptHex = toHex(makerScript.bytecode); takerSk = fromHex('44'.repeat(32)); takerPk = ecc.derivePubkey(takerSk); takerPkh = shaRmd160(takerPk); takerScript = Script.p2pkh(takerPkh); - takerScriptHex = toHex(takerScript.bytecode); }); after(() => { @@ -181,7 +174,9 @@ const agora = new Agora(chronik); const offers: (AgoraOffer & { variant: { type: 'PARTIAL' } })[] = - (await agora.activeOffersByTokenId(tokenId)) as any; + (await agora.activeOffersByTokenId(tokenId)) as (AgoraOffer & { + variant: { type: 'PARTIAL' }; + })[]; expect(offers.length).to.equal(3); const offersLocktime1 = offers.filter( diff --git a/modules/ecash-agora/tests/partial.slp.bigsats.test.ts b/modules/ecash-agora/tests/partial.slp.bigsats.test.ts --- a/modules/ecash-agora/tests/partial.slp.bigsats.test.ts +++ b/modules/ecash-agora/tests/partial.slp.bigsats.test.ts @@ -11,14 +11,12 @@ Ecc, P2PKHSignatory, SLP_FUNGIBLE, - SLP_LOKAD_ID, Script, TxBuilderInput, fromHex, initWasm, shaRmd160, slpSend, - strToBytes, toHex, } from 'ecash-lib'; import { TestRunner } from 'ecash-lib/dist/test/testRunner.js';