Page MenuHomePhabricator

[ecash-lib] Add `compressPk` to `Ecc`
AcceptedPublic

Authored by tobias_ruck on Sun, Mar 2, 21:14.

Details

Reviewers
bytesofman
Fabien
Group Reviewers
Restricted Project
Summary

Sometimes we receive an uncompressed pubkey (e.g. the pubkey in the genesis tx, or in X509), but Ecc expects compressed pubkeys.

Therefore, we add compressPk. This is very simple to implement in pure TS (no WASM needed), but since the reverse operation (uncompressPk) would require WASM, we add it to Ecc for consistency.

Depends on D17732.

Test Plan

npm test

Event Timeline

Tail of the build log:

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/ecash-lib-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

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

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/ecash-lib-tests

added 365 packages, and audited 369 packages in 2s

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

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
CI configured to test build. Building...

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

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-lib-tests failed with exit code 2

Tail of the build log:

5 vulnerabilities (4 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/ecash-agora-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

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

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/ecash-agora-tests

added 365 packages, and audited 369 packages in 2s

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

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-agora-tests failed with exit code 2

Tail of the build log:

5 vulnerabilities (4 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/ecash-agora-integration-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

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

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/ecash-agora-integration-tests

added 365 packages, and audited 369 packages in 2s

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

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-agora-integration-tests failed with exit code 2

Tail of the build log:

5 vulnerabilities (4 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/cashtab-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

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

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/cashtab-tests

added 365 packages, and audited 369 packages in 2s

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

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build cashtab-tests failed with exit code 2

Tail of the build log:

[552/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/peertablemodel.cpp.o
[553/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/coincontroltreewidget.cpp.o
[554/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/createwalletdialog.cpp.o
[555/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[556/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/editaddressdialog.cpp.o
[557/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[558/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[559/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrimagewidget.cpp.o
[560/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/askpassphrasedialog.cpp.o
[561/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/openuridialog.cpp.o
[562/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionfilterproxy.cpp.o
[563/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/addresstablemodel.cpp.o
[564/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiondescdialog.cpp.o
[565/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/overviewpage.cpp.o
[566/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/receiverequestdialog.cpp.o
[567/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/recentrequeststablemodel.cpp.o
[568/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/sendcoinsentry.cpp.o
[569/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionrecord.cpp.o
[570/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/receivecoinsdialog.cpp.o
[571/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[572/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/coincontroldialog.cpp.o
[573/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletmodeltransaction.cpp.o
[574/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletframe.cpp.o
[575/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/signverifymessagedialog.cpp.o
[576/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionview.cpp.o
[577/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiontablemodel.cpp.o
[578/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiondesc.cpp.o
[579/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/paymentserver.cpp.o
[580/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/paymentrequestplus.cpp.o
[581/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/sendcoinsdialog.cpp.o
[582/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletcontroller.cpp.o
[583/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletmodel.cpp.o
[584/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletview.cpp.o
[585/589] Linking CXX static library src/qt/libbitcoin-qt-base.a
[586/589] Automatic MOC for target bitcoin-qt
[587/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/bitcoin-qt_autogen/mocs_compilation.cpp.o
[588/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/main.cpp.o
[589/589] Linking CXX executable src/qt/bitcoin-qt
/work/modules/ecash-lib /work/abc-ci-builds/ecash-lib-integration-tests

added 365 packages, and audited 369 packages in 2s

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

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-lib-integration-tests failed with exit code 2
Fabien added inline comments.
modules/ecash-lib/src/ecc.ts
93 ↗(On Diff #52873)

Can you explain (and comment) why this is necessary ? If I understand what this does, I don't understand why it's required.

Fabien added inline comments.
modules/ecash-lib/src/ecc.ts
93 ↗(On Diff #52873)

It's required because the below __setEcc function takes the rust bindings that provide all the missing interface implementation, which excludes the compressPk() method causing a type mismatch. Another option would be to provide a dummy method since the binding is not called and keep supplying the full Ecc inteface, but that's more confusing.

This revision is now accepted and ready to land.Mon, Mar 3, 10:20