diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 856d67e..cb39269 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,37 +1,25 @@ name: Tests -on: [pull_request] +on: pull_request jobs: test: - runs-on: macos-latest + runs-on: ubuntu-latest steps: - name: Checkout project uses: actions/checkout@v3 - name: Specify node version - uses: actions/setup-node@v2-beta + uses: actions/setup-node@v3 with: node-version: 16 - - - name: Use npm caches - uses: actions/cache@v2 - with: - path: ~/.npm - key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-npm- - - - name: Use node_modules caches - id: cache-nm - uses: actions/cache@v2 - with: - path: node_modules - key: ${{ runner.os }}-nm-${{ hashFiles('package-lock.json') }} + cache: 'npm' - name: Install node_modules - if: steps.cache-nm.outputs.cache-hit != 'true' run: npm install - name: Run tests run: npm test + + - name: Run type checks + run: npm run type-check diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/index.ts b/index.ts index c334683..5aa3966 100644 --- a/index.ts +++ b/index.ts @@ -12,7 +12,7 @@ type UTXO = { txid: string; vout: number; WIF: string; - is_taproot: bool; + is_taproot: boolean; }; type Target = { @@ -21,6 +21,11 @@ type Target = { value?: number; }; +type SilentPaymentGroup = { + Bscan: Buffer; + BmValues: Array<[Buffer, number | undefined]>; +}; + const G = Buffer.from("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", "hex"); export class SilentPayment { @@ -35,7 +40,7 @@ export class SilentPayment { createTransaction(utxos: UTXO[], targets: Target[]): Target[] { const ret: Target[] = []; - let silentPaymentGroups = []; + let silentPaymentGroups: Array = []; for (const target of targets) { if (!target.silentPaymentCode) { ret.push(target); // passthrough @@ -96,7 +101,7 @@ export class SilentPayment { static _outpointsHash(parameters: UTXO[]): Buffer { let bufferConcat = Buffer.alloc(0); - let outpoints = []; + let outpoints: Array = []; for (const parameter of parameters) { outpoints.push(Buffer.concat([Buffer.from(parameter.txid, "hex").reverse(), SilentPayment._ser32(parameter.vout).reverse()])); } diff --git a/package-lock.json b/package-lock.json index 8363518..fab6120 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,11 +20,13 @@ "ts-node": "^10.9.1" }, "devDependencies": { + "@tsconfig/recommended": "^1.0.2", "@types/create-hash": "^1.2.2", "@types/node": "^20.2.5", "babel-jest": "^29.5.0", "jest": "^29.5.0", - "prettier": "2.8.8" + "prettier": "2.8.8", + "typescript": "^5.1.6" } }, "node_modules/@ampproject/remapping": { @@ -2478,6 +2480,12 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, + "node_modules/@tsconfig/recommended": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.2.tgz", + "integrity": "sha512-dbHBtbWBOjq0/otpopAE02NT2Cm05Qe2JsEKeCf/wjSYbI2hz8nCqnpnOJWHATgjDz4fd3dchs3Wy1gQGjfN6w==", + "dev": true + }, "node_modules/@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -6308,10 +6316,9 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "peer": true, + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8330,6 +8337,12 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, + "@tsconfig/recommended": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.2.tgz", + "integrity": "sha512-dbHBtbWBOjq0/otpopAE02NT2Cm05Qe2JsEKeCf/wjSYbI2hz8nCqnpnOJWHATgjDz4fd3dchs3Wy1gQGjfN6w==", + "dev": true + }, "@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -11172,10 +11185,9 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "peer": true + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", diff --git a/package.json b/package.json index 4f8a20d..cdc0bd5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "", "main": "index.ts", "scripts": { - "test": "jest tests/" + "test": "jest tests/", + "type-check": "tsc --noEmit" }, "author": "overtorment", "license": "MIT", @@ -20,10 +21,12 @@ "ts-node": "^10.9.1" }, "devDependencies": { + "@tsconfig/recommended": "^1.0.2", "@types/create-hash": "^1.2.2", "@types/node": "^20.2.5", "babel-jest": "^29.5.0", "jest": "^29.5.0", - "prettier": "2.8.8" + "prettier": "2.8.8", + "typescript": "^5.1.6" } } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..df325e4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@tsconfig/recommended/tsconfig.json", + "include": [ + "index.ts", + "noble_ecc.ts" + ], +}