Page MenuHomePhabricator

[b58-ts] Add `b58-ts` library for base58 en-/decoding in TS
Needs ReviewPublic

Authored by tobias_ruck on Sat, Nov 30, 01:57.

Details

Reviewers
bytesofman
Group Reviewers
Restricted Project
Summary

Adding our own base58 library has the advantage that we have this sensitive code in-house without extra dependencies, that we can model it closely after our existing C++ implementation, and that we can modify it's behavior as needed.

Alternatives were considered:

  • bs58: Just a special case of base-x, but we want somethins specialized without extra dependencies
  • base58-js: No TS support and also really obscure implementation with reduce(.map)
  • b58: Older version of bs58 is seems?
  • base58: Only for integers it seems
Test Plan

npm test

Diff Detail

Repository
rABC Bitcoin ABC
Branch
bs58-lib-init
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 31430
Build 62358: Build Diff
Build 62357: arc lint + arc unit

Event Timeline

Tail of the build log:

Test does not depend on ecashaddrjs, skipping ecashaddrjs dependencies...
Test does not depend on mock-chronik-client, skipping mock-chronik-client dependencies...
Test does not depend on ecash-lib-wasm, skipping
Test does not depend on chronik-client
Test does not depend on ecash-lib
Test does not depend on ecash-agora
Test does not depend on ecash-script, skipping ecash-script dependencies...
Test does not depend on ecash-coinselect, skipping ecash-coinselect dependencies...
/work/modules/b58-ts /work/abc-ci-builds/b58-ts-tests
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm warn deprecated glob@7.2.0: Glob versions prior to v9 are no longer supported
npm warn deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm warn deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm warn deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm warn deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.

> b58-ts@0.1.0 prepublish
> npm run build


> b58-ts@0.1.0 build
> tsc

tests/test.ts(7,32): error TS2307: Cannot find module 'ecash-lib' or its corresponding type declarations.
npm error code 2
npm error path /work/modules/b58-ts
npm error command failed
npm error command sh -c npm run build
npm error A complete log of this run can be found in: /root/.npm/_logs/2024-11-30T01_58_56_526Z-debug-0.log
Build b58-ts-tests failed with exit code 2

Tail of the build log:

   Compiling wasm-bindgen-shared v0.2.92
   Compiling shlex v1.3.0
   Compiling bumpalo v3.16.0
   Compiling log v0.4.22
   Compiling once_cell v1.20.2
   Compiling thiserror v1.0.69
   Compiling wasm-bindgen v0.2.92
   Compiling cfg-if v1.0.0
   Compiling abc-rust-lint v0.1.0 (/work/chronik/abc-rust-lint)
   Compiling cc v1.2.1
   Compiling generic-array v0.14.7
   Compiling quote v1.0.37
   Compiling syn v2.0.87
   Compiling ecash-secp256k1-sys v0.10.0 (/work/modules/ecash-secp256k1/ecash-secp256k1-sys)
   Compiling crypto-common v0.1.6
   Compiling block-buffer v0.10.4
   Compiling digest v0.10.7
   Compiling sha2 v0.10.8
   Compiling ripemd v0.1.3
   Compiling wasm-bindgen-backend v0.2.92
   Compiling ecash-secp256k1 v0.30.0 (/work/modules/ecash-secp256k1)
   Compiling thiserror-impl v1.0.69
   Compiling wasm-bindgen-macro-support v0.2.92
   Compiling wasm-bindgen-macro v0.2.92
   Compiling ecash-lib-wasm v0.1.0 (/work/modules/ecash-lib-wasm)
    Finished release-wasm [optimized] target(s) in 8.24s
Test does not depend on chronik-client
Test depends on ecash-lib. Building TypeScript...
/work/modules/ecash-lib /work/modules/ecash-lib-wasm /work/abc-ci-builds/b58-ts-tests

added 363 packages, and audited 366 packages in 2s

60 packages are looking for funding
  run `npm fund` for details

2 vulnerabilities (1 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-lib@1.1.0 build
> tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist

../chronik-client/proto/chronik.ts(2,18): error TS2307: Cannot find module 'long' or its corresponding type declarations.
../chronik-client/proto/chronik.ts(3,17): error TS2307: Cannot find module 'protobufjs/minimal' or its corresponding type declarations.
../chronik-client/src/ChronikClient.ts(5,22): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
../chronik-client/src/ChronikClient.ts(6,23): error TS2307: Cannot find module 'isomorphic-ws' or its corresponding type declarations.
../chronik-client/src/ChronikClient.ts(7,21): error TS2307: Cannot find module 'ws' or its corresponding type declarations.
../chronik-client/src/failoverProxy.ts(5,38): error TS2307: Cannot find module 'axios' or its corresponding type declarations.
../chronik-client/src/failoverProxy.ts(6,23): error TS2307: Cannot find module 'isomorphic-ws' or its corresponding type declarations.
../chronik-client/src/failoverProxy.ts(7,21): error TS2307: Cannot find module 'ws' or its corresponding type declarations.
../chronik-client/src/failoverProxy.ts(186,35): error TS7006: Parameter 'x' implicitly has an 'any' type.
../chronik-client/src/failoverProxy.ts(270,32): error TS7006: Parameter 'e' implicitly has an 'any' type.
../chronik-client/src/failoverProxy.ts(276,30): error TS7006: Parameter 'e' implicitly has an 'any' type.
../chronik-client/src/failoverProxy.ts(294,33): error TS7006: Parameter 'msg' implicitly has an 'any' type.
src/script.ts(20,27): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
tests/txBuilder.test.ts(37,27): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
Build b58-ts-tests failed with exit code 2

Tail of the build log:

  Downloaded wasm-bindgen v0.2.92
  Downloaded wasm-bindgen-backend v0.2.92
  Downloaded unicode-ident v1.0.14
  Downloaded typenum v1.17.0
  Downloaded thiserror v1.0.69
  Downloaded cc v1.2.1
  Downloaded sha2 v0.10.8
  Downloaded thiserror-impl v1.0.69
  Downloaded crypto-common v0.1.6
  Downloaded cpufeatures v0.2.15
   Compiling proc-macro2 v1.0.89
   Compiling unicode-ident v1.0.14
   Compiling version_check v0.9.5
   Compiling typenum v1.17.0
   Compiling wasm-bindgen-shared v0.2.92
   Compiling shlex v1.3.0
   Compiling once_cell v1.20.2
   Compiling bumpalo v3.16.0
   Compiling log v0.4.22
   Compiling cfg-if v1.0.0
   Compiling wasm-bindgen v0.2.92
   Compiling thiserror v1.0.69
   Compiling abc-rust-lint v0.1.0 (/work/chronik/abc-rust-lint)
   Compiling cc v1.2.1
   Compiling generic-array v0.14.7
   Compiling quote v1.0.37
   Compiling syn v2.0.87
   Compiling ecash-secp256k1-sys v0.10.0 (/work/modules/ecash-secp256k1/ecash-secp256k1-sys)
   Compiling crypto-common v0.1.6
   Compiling block-buffer v0.10.4
   Compiling digest v0.10.7
   Compiling ripemd v0.1.3
   Compiling sha2 v0.10.8
   Compiling wasm-bindgen-backend v0.2.92
   Compiling ecash-secp256k1 v0.30.0 (/work/modules/ecash-secp256k1)
   Compiling thiserror-impl v1.0.69
   Compiling wasm-bindgen-macro-support v0.2.92
   Compiling wasm-bindgen-macro v0.2.92
   Compiling ecash-lib-wasm v0.1.0 (/work/modules/ecash-lib-wasm)
    Finished release-wasm [optimized] target(s) in 5.72s
Test depends on chronik-client. Building TypeScript...
/work/modules/chronik-client /work/modules/ecash-lib-wasm /work/abc-ci-builds/b58-ts-tests

> chronik-client@2.0.0 prepublish
> npm run build


> chronik-client@2.0.0 build
> tsc

src/ChronikClient.ts(5,22): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
test/integration/mempool_conflicts.ts(7,22): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
test/integration/script_endpoints.ts(7,22): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
test/integration/websocket.ts(7,22): error TS2307: Cannot find module 'ecashaddrjs' or its corresponding type declarations.
npm error code 2
npm error path /work/modules/chronik-client
npm error command failed
npm error command sh -c npm run build
npm error A complete log of this run can be found in: /root/.npm/_logs/2024-11-30T02_04_23_753Z-debug-0.log
Build b58-ts-tests failed with exit code 2

would be nice to drop this into ecashaddrjs as a replacement for bs58check, to show that it works the way we expect to use it (in our own modules to replace 3rd-party deps).

modules/b58-ts/package.json
38 โ†—(On Diff #51267)

๐Ÿ”ฅ

modules/b58-ts/tests/base58_encode_decode.json
1 โ†—(On Diff #51267)

header

modules/b58-ts/tsconfig.json
1 โ†—(On Diff #51267)

should include a tsconfig.build.json as done in ecash-agora and ecash-lib so that we do not build ts for tests.

This revision now requires changes to proceed.Sat, Nov 30, 02:19