Page MenuHomePhabricator

[ecash-agora, ecash-wallet, ecash-lib] Add a new take method to the AgoraOffer class that automatically builds and broadcasts an acceptTx
ClosedPublic

Authored by bytesofman on Sat, Oct 25, 22:26.

Details

Summary

ecash-agora is a powerful library that will allow transaction building to accept agora offers. However, since there is no wallet logic in ecash-agora, there is some trickiness with passing params and determining utxos.

It makes sense for ecash-wallet to "just handle" agora stuff. However, it does not really make sense to import the whole ecash-agora lib into ecash-wallet to solve this problem.

Follow the existing API of the acceptTx method (which builds a tx given user-determined wallet inputs), and add a new take method that does this automatically by passing a Wallet.

Test Plan

npm test, CI for integration tests

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Tail of the build log:

Run `npm audit` for details.

> chronik-client@3.4.0 build
> tsc

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

added 271 packages, and audited 275 packages in 1s

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

7 vulnerabilities (1 low, 5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

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

added 221 packages, and audited 224 packages in 2s

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

3 low severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-wallet@2.0.2 build
> tsc -p ./tsconfig.build.json

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

added 273 packages, and audited 277 packages in 1s

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

7 vulnerabilities (1 low, 5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-agora@2.4.0 build
> tsc && tsc -p ./tsconfig.build.json

tests/partial.alp.test.ts(640,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
tests/partial.alp.test.ts(704,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
Build cashtab-tests failed with exit code 2

Tail of the build log:

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

added 273 packages, and audited 277 packages in 1s

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

7 vulnerabilities (1 low, 5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-agora@2.4.0 build
> tsc && tsc -p ./tsconfig.build.json

tests/partial.alp.test.ts(640,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
tests/partial.alp.test.ts(704,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
Build ecash-agora-integration-tests failed with exit code 2

rebase for chronik-client fix

Tail of the build log:

Run `npm audit` for details.

> chronik-client@3.4.0 build
> tsc

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

added 271 packages, and audited 275 packages in 1s

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

7 vulnerabilities (1 low, 5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

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

added 221 packages, and audited 224 packages in 2s

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

3 low severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-wallet@2.0.2 build
> tsc -p ./tsconfig.build.json

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

added 273 packages, and audited 277 packages in 1s

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

7 vulnerabilities (1 low, 5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-agora@2.4.0 build
> tsc && tsc -p ./tsconfig.build.json

tests/partial.alp.test.ts(640,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
tests/partial.alp.test.ts(704,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
Build cashtab-tests failed with exit code 2

Tail of the build log:

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

added 273 packages, and audited 277 packages in 1s

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

7 vulnerabilities (1 low, 5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-agora@2.4.0 build
> tsc && tsc -p ./tsconfig.build.json

tests/partial.alp.test.ts(640,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
tests/partial.alp.test.ts(704,17): error TS2353: Object literal may only specify known properties, and 'takerInput' does not exist in type '{ chronik: ChronikClient; offer: AgoraOffer; takerSk: Uint8Array; acceptedAtoms: bigint; allowUnspendable?: boolean | undefined; }'.
Build ecash-agora-integration-tests failed with exit code 2
Fabien requested changes to this revision.Mon, Oct 27, 14:23
Fabien added a subscriber: Fabien.
Fabien added inline comments.
modules/ecash-agora/src/agora.ts
194 ↗(On Diff #56296)

The name of the function is bad, this might come to a surprise to a developer that is wallet is drained by an "accept" function. Can you find a more explicit name?

196 ↗(On Diff #56296)
201 ↗(On Diff #56296)
212 ↗(On Diff #56296)
217 ↗(On Diff #56296)
This revision now requires changes to proceed.Mon, Oct 27, 14:23
bytesofman added inline comments.
modules/ecash-agora/src/agora.ts
194 ↗(On Diff #56296)

k going with take()

bytesofman marked an inline comment as done.

patch comment typos, rename method

Failed tests logs:

====== AgoraPartial SLP: AgoraPartial SLP 1000 for 1sat/token, dust accept, must allowUnspendable.AgoraPartial SLP AgoraPartial SLP 1000 for 1sat/token, dust accept, must allowUnspendable ======
Error: Insufficient input sats (2333): Can only pay for 695 fees, but 1186 required
    at TxBuilder.sign (/work/modules/ecash-lib/src/txBuilder.ts:204:23)
    at AgoraOffer.take (src/agora.ts:294:34)
    at takeSlpOffer (tests/partial-helper-slp.ts:144:48)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async Context.<anonymous> (tests/partial.slp.test.ts:498:32)

Each failure log is accessible here:
AgoraPartial SLP: AgoraPartial SLP 1000 for 1sat/token, dust accept, must allowUnspendable.AgoraPartial SLP AgoraPartial SLP 1000 for 1sat/token, dust accept, must allowUnspendable

will get D18840 first, check out the CI

modules/ecash-wallet/README.md
117 ↗(On Diff #56315)

NB will change this to take before landing

modules/ecash-wallet/README.md
117 ↗(On Diff #56315)

you'd better change it then rebase so CI is green

bytesofman retitled this revision from [ecash-agora, ecash-wallet, ecash-lib] Add a new accept method to the AgoraOffer class that automatically builds and broadcasts an accept tx to [ecash-agora, ecash-wallet, ecash-lib] Add a new take method to the AgoraOffer class that automatically builds and broadcasts an acceptTx.Mon, Oct 27, 19:45
bytesofman edited the summary of this revision. (Show Details)
This revision is now accepted and ready to land.Mon, Oct 27, 20:32