@atomicfinance/bitcoin-dlc-provider 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-lint.log +1 -0
- package/.yalc/@node-dlc/bitcoin/.nyc_output/982e80bf-a70c-452f-b63d-d749ae385531.json +1 -0
- package/.yalc/@node-dlc/bitcoin/.nyc_output/processinfo/982e80bf-a70c-452f-b63d-d749ae385531.json +1 -0
- package/.yalc/@node-dlc/bitcoin/.nyc_output/processinfo/index.json +1 -0
- package/.yalc/@node-dlc/bitcoin/README.md +11 -0
- package/.yalc/@node-dlc/bitcoin/__tests__/bitcoin/amount.spec.ts +330 -0
- package/.yalc/@node-dlc/bitcoin/__tests__/bitcoin/value.spec.ts +320 -0
- package/.yalc/@node-dlc/bitcoin/__tests__/tsconfig.json +8 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Amount.ts.html +290 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Base58.ts.html +269 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Base58Check.ts.html +182 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/BitcoinError.ts.html +173 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/BitcoinErrorCode.ts.html +110 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/HashByteOrder.ts.html +143 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/HashValue.ts.html +350 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/LexicographicalSorters.ts.html +191 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/LockTime.ts.html +386 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/OpCodes.ts.html +437 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/OutPoint.ts.html +383 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Script.ts.html +1607 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Sequence.ts.html +713 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/SigHashType.ts.html +137 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Stack.ts.html +323 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TimeLockMode.ts.html +128 -0
- package/.yalc/@node-dlc/{messaging/coverage/lcov-report/lib/serde/SerdeUtils.ts.html → bitcoin/coverage/lcov-report/Tx.ts.html} +617 -491
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxBuilder.ts.html +971 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxIn.ts.html +425 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxOut.ts.html +341 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Value.ts.html +683 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Wif.ts.html +311 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Witness.ts.html +275 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/base.css +224 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/block-navigation.js +79 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/favicon.png +0 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/index.html +126 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/index.ts.html +164 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/prettify.css +1 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/prettify.js +2 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/sorter.js +170 -0
- package/.yalc/@node-dlc/bitcoin/coverage/lcov.info +123 -0
- package/.yalc/@node-dlc/bitcoin/dist/Amount.d.ts +48 -0
- package/.yalc/@node-dlc/bitcoin/dist/Amount.js +68 -0
- package/.yalc/@node-dlc/bitcoin/dist/Amount.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Base58.d.ts +22 -0
- package/.yalc/@node-dlc/bitcoin/dist/Base58.js +62 -0
- package/.yalc/@node-dlc/bitcoin/dist/Base58.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Base58Check.d.ts +14 -0
- package/.yalc/@node-dlc/bitcoin/dist/Base58Check.js +36 -0
- package/.yalc/@node-dlc/bitcoin/dist/Base58Check.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.d.ts +6 -0
- package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.js +36 -0
- package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.d.ts +10 -0
- package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.js +15 -0
- package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Block.d.ts +19 -0
- package/.yalc/@node-dlc/bitcoin/dist/Block.js +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/Block.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.d.ts +20 -0
- package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.js +25 -0
- package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/HashValue.d.ts +55 -0
- package/.yalc/@node-dlc/bitcoin/dist/HashValue.js +82 -0
- package/.yalc/@node-dlc/bitcoin/dist/HashValue.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/ICloneable.d.ts +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/ICloneable.js +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/ICloneable.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.d.ts +18 -0
- package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.js +41 -0
- package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/LockTime.d.ts +61 -0
- package/.yalc/@node-dlc/bitcoin/dist/LockTime.js +94 -0
- package/.yalc/@node-dlc/bitcoin/dist/LockTime.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/OpCodes.d.ts +102 -0
- package/.yalc/@node-dlc/bitcoin/dist/OpCodes.js +116 -0
- package/.yalc/@node-dlc/bitcoin/dist/OpCodes.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/OutPoint.d.ts +57 -0
- package/.yalc/@node-dlc/bitcoin/dist/OutPoint.js +88 -0
- package/.yalc/@node-dlc/bitcoin/dist/OutPoint.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Script.d.ts +185 -0
- package/.yalc/@node-dlc/bitcoin/dist/Script.js +404 -0
- package/.yalc/@node-dlc/bitcoin/dist/Script.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.d.ts +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.js +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Sequence.d.ts +116 -0
- package/.yalc/@node-dlc/bitcoin/dist/Sequence.js +187 -0
- package/.yalc/@node-dlc/bitcoin/dist/Sequence.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/SigHashType.d.ts +7 -0
- package/.yalc/@node-dlc/bitcoin/dist/SigHashType.js +27 -0
- package/.yalc/@node-dlc/bitcoin/dist/SigHashType.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/SizeResult.d.ts +5 -0
- package/.yalc/@node-dlc/bitcoin/dist/SizeResult.js +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/SizeResult.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Sorter.d.ts +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Sorter.js +3 -0
- package/.yalc/@node-dlc/bitcoin/dist/Sorter.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Stack.d.ts +15 -0
- package/.yalc/@node-dlc/bitcoin/dist/Stack.js +77 -0
- package/.yalc/@node-dlc/bitcoin/dist/Stack.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.d.ts +15 -0
- package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.js +20 -0
- package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Tx.d.ts +150 -0
- package/.yalc/@node-dlc/bitcoin/dist/Tx.js +408 -0
- package/.yalc/@node-dlc/bitcoin/dist/Tx.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.d.ts +110 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.js +238 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxIn.d.ts +71 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxIn.js +79 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxIn.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxOut.d.ts +57 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxOut.js +68 -0
- package/.yalc/@node-dlc/bitcoin/dist/TxOut.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Value.d.ts +122 -0
- package/.yalc/@node-dlc/bitcoin/dist/Value.js +180 -0
- package/.yalc/@node-dlc/bitcoin/dist/Value.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Wif.d.ts +41 -0
- package/.yalc/@node-dlc/bitcoin/dist/Wif.js +62 -0
- package/.yalc/@node-dlc/bitcoin/dist/Wif.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/Witness.d.ts +41 -0
- package/.yalc/@node-dlc/bitcoin/dist/Witness.js +63 -0
- package/.yalc/@node-dlc/bitcoin/dist/Witness.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/dist/index.d.ts +28 -0
- package/.yalc/@node-dlc/bitcoin/dist/index.js +45 -0
- package/.yalc/@node-dlc/bitcoin/dist/index.js.map +1 -0
- package/.yalc/@node-dlc/bitcoin/lib/Amount.ts +70 -0
- package/.yalc/@node-dlc/bitcoin/lib/Base58.ts +63 -0
- package/.yalc/@node-dlc/bitcoin/lib/Base58Check.ts +34 -0
- package/.yalc/@node-dlc/bitcoin/lib/BitcoinError.ts +31 -0
- package/.yalc/@node-dlc/bitcoin/lib/BitcoinErrorCode.ts +10 -0
- package/.yalc/@node-dlc/bitcoin/lib/Block.ts +20 -0
- package/.yalc/@node-dlc/bitcoin/lib/HashByteOrder.ts +21 -0
- package/.yalc/@node-dlc/bitcoin/lib/HashValue.ts +90 -0
- package/.yalc/@node-dlc/bitcoin/lib/ICloneable.ts +3 -0
- package/.yalc/@node-dlc/bitcoin/lib/LexicographicalSorters.ts +37 -0
- package/.yalc/@node-dlc/bitcoin/lib/LockTime.ts +102 -0
- package/.yalc/@node-dlc/bitcoin/lib/OpCodes.ts +119 -0
- package/.yalc/@node-dlc/bitcoin/lib/OutPoint.ts +101 -0
- package/.yalc/@node-dlc/bitcoin/lib/Script.ts +509 -0
- package/.yalc/@node-dlc/bitcoin/lib/ScriptCmd.ts +3 -0
- package/.yalc/@node-dlc/bitcoin/lib/Sequence.ts +211 -0
- package/.yalc/@node-dlc/bitcoin/lib/SigHashType.ts +19 -0
- package/.yalc/@node-dlc/bitcoin/lib/SizeResult.ts +5 -0
- package/.yalc/@node-dlc/bitcoin/lib/Sorter.ts +1 -0
- package/.yalc/@node-dlc/bitcoin/lib/Stack.ts +81 -0
- package/.yalc/@node-dlc/bitcoin/lib/TimeLockMode.ts +16 -0
- package/.yalc/@node-dlc/bitcoin/lib/Tx.ts +480 -0
- package/.yalc/@node-dlc/bitcoin/lib/TxBuilder.ts +297 -0
- package/.yalc/@node-dlc/bitcoin/lib/TxIn.ts +115 -0
- package/.yalc/@node-dlc/bitcoin/lib/TxOut.ts +87 -0
- package/.yalc/@node-dlc/bitcoin/lib/Value.ts +201 -0
- package/.yalc/@node-dlc/bitcoin/lib/Wif.ts +77 -0
- package/.yalc/@node-dlc/bitcoin/lib/Witness.ts +65 -0
- package/.yalc/@node-dlc/bitcoin/lib/index.ts +28 -0
- package/.yalc/@node-dlc/bitcoin/package.json +31 -0
- package/.yalc/@node-dlc/bitcoin/tsconfig.json +8 -0
- package/.yalc/@node-dlc/bitcoin/yalc.sig +1 -0
- package/.yalc/@node-dlc/bufio/.eslintrc +6 -0
- package/.yalc/@node-dlc/bufio/.nyc_output/3c26c5b3-2a5e-4a53-88d4-06f4a5c339f7.json +1 -0
- package/.yalc/@node-dlc/bufio/.nyc_output/processinfo/3c26c5b3-2a5e-4a53-88d4-06f4a5c339f7.json +1 -0
- package/.yalc/@node-dlc/bufio/.nyc_output/processinfo/index.json +1 -0
- package/.yalc/@node-dlc/bufio/README.md +68 -0
- package/.yalc/@node-dlc/bufio/__tests__/BufferReader.spec.ts +548 -0
- package/.yalc/@node-dlc/bufio/__tests__/BufferWriter.spec.ts +530 -0
- package/.yalc/@node-dlc/bufio/__tests__/Hex.spec.ts +51 -0
- package/.yalc/@node-dlc/bufio/__tests__/StreamReader.spec.ts +133 -0
- package/.yalc/@node-dlc/bufio/__tests__/bigFromBufBE.spec.ts +14 -0
- package/.yalc/@node-dlc/bufio/__tests__/bigFromBufLE.spec.ts +14 -0
- package/.yalc/@node-dlc/bufio/__tests__/bigToBufBE.spec.ts +15 -0
- package/.yalc/@node-dlc/bufio/__tests__/bigToBufLE.spec.ts +14 -0
- package/.yalc/@node-dlc/bufio/__tests__/encodeVarInt.spec.ts +25 -0
- package/.yalc/@node-dlc/bufio/__tests__/tsconfig.json +7 -0
- package/.yalc/@node-dlc/bufio/__tests__/varIntBytes.spec.ts +34 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/BufferReader.ts.html +1142 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/BufferWriter.ts.html +953 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/Hex.ts.html +323 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/StreamReader.ts.html +620 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/base.css +224 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigFromBufBE.ts.html +89 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigFromBufLE.ts.html +95 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigToBufBE.ts.html +98 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigToBufLE.ts.html +95 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/block-navigation.js +79 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/bufToStream.ts.html +113 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/encodeVarInt.ts.html +203 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/favicon.png +0 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/index.html +261 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/prettify.css +1 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/prettify.js +2 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/sorter.js +170 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov-report/varIntBytes.ts.html +116 -0
- package/.yalc/@node-dlc/bufio/coverage/lcov.info +747 -0
- package/.yalc/@node-dlc/bufio/dist/BufferReader.d.ts +155 -0
- package/.yalc/@node-dlc/bufio/dist/BufferReader.js +346 -0
- package/.yalc/@node-dlc/bufio/dist/BufferReader.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/BufferWriter.d.ts +143 -0
- package/.yalc/@node-dlc/bufio/dist/BufferWriter.js +279 -0
- package/.yalc/@node-dlc/bufio/dist/BufferWriter.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/Hex.d.ts +13 -0
- package/.yalc/@node-dlc/bufio/dist/Hex.js +78 -0
- package/.yalc/@node-dlc/bufio/dist/Hex.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/StreamReader.d.ts +111 -0
- package/.yalc/@node-dlc/bufio/dist/StreamReader.js +180 -0
- package/.yalc/@node-dlc/bufio/dist/StreamReader.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.d.ts +2 -0
- package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.js +8 -0
- package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.d.ts +2 -0
- package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.js +9 -0
- package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/bigToBufBE.d.ts +2 -0
- package/.yalc/@node-dlc/bufio/dist/bigToBufBE.js +13 -0
- package/.yalc/@node-dlc/bufio/dist/bigToBufBE.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/bigToBufLE.d.ts +2 -0
- package/.yalc/@node-dlc/bufio/dist/bigToBufLE.js +9 -0
- package/.yalc/@node-dlc/bufio/dist/bigToBufLE.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/bufToStream.d.ts +7 -0
- package/.yalc/@node-dlc/bufio/dist/bufToStream.js +15 -0
- package/.yalc/@node-dlc/bufio/dist/bufToStream.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/encodeVarInt.d.ts +12 -0
- package/.yalc/@node-dlc/bufio/dist/encodeVarInt.js +46 -0
- package/.yalc/@node-dlc/bufio/dist/encodeVarInt.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/index.d.ts +11 -0
- package/.yalc/@node-dlc/bufio/dist/index.js +28 -0
- package/.yalc/@node-dlc/bufio/dist/index.js.map +1 -0
- package/.yalc/@node-dlc/bufio/dist/varIntBytes.d.ts +5 -0
- package/.yalc/@node-dlc/bufio/dist/varIntBytes.js +22 -0
- package/.yalc/@node-dlc/bufio/dist/varIntBytes.js.map +1 -0
- package/.yalc/@node-dlc/bufio/lib/BufferReader.ts +354 -0
- package/.yalc/@node-dlc/bufio/lib/BufferWriter.ts +291 -0
- package/.yalc/@node-dlc/bufio/lib/Hex.ts +81 -0
- package/.yalc/@node-dlc/bufio/lib/StreamReader.ts +180 -0
- package/.yalc/@node-dlc/bufio/lib/bigFromBufBE.ts +3 -0
- package/.yalc/@node-dlc/bufio/lib/bigFromBufLE.ts +5 -0
- package/.yalc/@node-dlc/bufio/lib/bigToBufBE.ts +6 -0
- package/.yalc/@node-dlc/bufio/lib/bigToBufLE.ts +5 -0
- package/.yalc/@node-dlc/bufio/lib/bufToStream.ts +11 -0
- package/.yalc/@node-dlc/bufio/lib/encodeVarInt.ts +41 -0
- package/.yalc/@node-dlc/bufio/lib/index.ts +11 -0
- package/.yalc/@node-dlc/bufio/lib/varIntBytes.ts +12 -0
- package/.yalc/@node-dlc/bufio/package.json +27 -0
- package/.yalc/@node-dlc/bufio/tsconfig-build.json +7 -0
- package/.yalc/@node-dlc/bufio/tsconfig.json +7 -0
- package/.yalc/@node-dlc/bufio/yalc.sig +1 -0
- package/.yalc/@node-dlc/core/.nyc_output/687a3c14-9765-45fd-a1fe-f7db3d56fee4.json +1 -0
- package/.yalc/@node-dlc/core/.nyc_output/processinfo/687a3c14-9765-45fd-a1fe-f7db3d56fee4.json +1 -0
- package/.yalc/@node-dlc/core/.nyc_output/processinfo/index.json +1 -0
- package/.yalc/@node-dlc/core/README.md +11 -0
- package/.yalc/@node-dlc/core/__tests__/core.spec.ts +7 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/CETCalculator.spec.ts +1029 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/CoinSelect.spec.ts +179 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/PolynomialPayoutCurve.spec.ts +345 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/TxBuilder.spec.ts +424 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/Builder.spec.ts +492 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/CoveredCall.spec.ts +112 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/CsoInfo.spec.ts +1124 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/LongCall.spec.ts +55 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/LongPut.spec.ts +55 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/OptionInfo.spec.ts +226 -0
- package/.yalc/@node-dlc/core/__tests__/dlc/finance/ShortPut.spec.ts +62 -0
- package/.yalc/@node-dlc/core/__tests__/tsconfig.json +8 -0
- package/.yalc/@node-dlc/core/__tests__/utils/precision.spec.ts +40 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/base.css +224 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/block-navigation.js +79 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/favicon.png +0 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/index.html +171 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/AsyncProcessingQueue.ts.html +269 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/Base32.ts.html +86 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/BigIntUtils.ts.html +86 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/BitField.ts.html +86 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ChannelId.ts.html +86 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/LinkedList.ts.html +413 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/LinkedListNode.ts.html +122 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/Queue.ts.html +188 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ShortChannelId.ts.html +86 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ShortChannelIdUtils.ts.html +107 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/CETCalculator.ts.html +1430 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/CoinSelect.ts.html +431 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/HyperbolaPayoutCurve.ts.html +644 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/PolynomialPayoutCurve.ts.html +878 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/TxBuilder.ts.html +1088 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/TxFinalizer.ts.html +731 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/Builder.ts.html +2270 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/CoveredCall.ts.html +410 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/CsoInfo.ts.html +1574 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LinearPayout.ts.html +362 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LongCall.ts.html +302 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LongPut.ts.html +302 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/OptionInfo.ts.html +626 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/ShortPut.ts.html +305 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/index.html +216 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/index.html +186 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/index.html +261 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/index.ts.html +278 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ChannelId.ts.html +242 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ChannelKeys.ts.html +407 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentNumber.ts.html +362 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentSecret.ts.html +203 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentSecretStore.ts.html +332 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/Htlc.ts.html +236 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/HtlcDirection.ts.html +131 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ScriptFactory.ts.html +530 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/TxFactory.ts.html +1094 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/index.html +231 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/BigIntUtils.ts.html +272 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/Precision.ts.html +149 -0
- package/.yalc/@node-dlc/{messaging/coverage/lcov-report/lib/serde → core/coverage/lcov-report/lib/utils}/index.html +37 -22
- package/.yalc/@node-dlc/core/coverage/lcov-report/prettify.css +1 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/prettify.js +2 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.yalc/@node-dlc/core/coverage/lcov-report/sorter.js +170 -0
- package/.yalc/@node-dlc/core/coverage/lcov.info +2426 -0
- package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.d.ts +22 -0
- package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.js +55 -0
- package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/Base32.d.ts +1 -0
- package/.yalc/@node-dlc/core/dist/Base32.js +7 -0
- package/.yalc/@node-dlc/core/dist/Base32.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/BigIntUtils.d.ts +1 -0
- package/.yalc/@node-dlc/core/dist/BigIntUtils.js +8 -0
- package/.yalc/@node-dlc/core/dist/BigIntUtils.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/BitField.d.ts +1 -0
- package/.yalc/@node-dlc/core/dist/BitField.js +7 -0
- package/.yalc/@node-dlc/core/dist/BitField.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/ChannelId.d.ts +1 -0
- package/.yalc/@node-dlc/core/dist/ChannelId.js +7 -0
- package/.yalc/@node-dlc/core/dist/ChannelId.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/LinkedList.d.ts +30 -0
- package/.yalc/@node-dlc/core/dist/LinkedList.js +104 -0
- package/.yalc/@node-dlc/core/dist/LinkedList.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/LinkedListNode.d.ts +9 -0
- package/.yalc/@node-dlc/core/dist/LinkedListNode.js +15 -0
- package/.yalc/@node-dlc/core/dist/LinkedListNode.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/Queue.d.ts +22 -0
- package/.yalc/@node-dlc/core/dist/Queue.js +38 -0
- package/.yalc/@node-dlc/core/dist/Queue.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/ShortChannelId.d.ts +1 -0
- package/.yalc/@node-dlc/core/dist/ShortChannelId.js +7 -0
- package/.yalc/@node-dlc/core/dist/ShortChannelId.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.d.ts +1 -0
- package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.js +12 -0
- package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.d.ts +50 -0
- package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.js +332 -0
- package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.d.ts +23 -0
- package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.js +77 -0
- package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.d.ts +20 -0
- package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.js +117 -0
- package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.d.ts +5 -0
- package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.js +3 -0
- package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.d.ts +52 -0
- package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.js +173 -0
- package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.d.ts +55 -0
- package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.js +217 -0
- package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.d.ts +40 -0
- package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.js +146 -0
- package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.d.ts +193 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.js +422 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.d.ts +13 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.js +67 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.d.ts +114 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.js +290 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.d.ts +6 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.js +79 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.d.ts +13 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.js +47 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.d.ts +13 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.js +47 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.d.ts +20 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.js +101 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.d.ts +12 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.js +46 -0
- package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/index.d.ts +39 -0
- package/.yalc/@node-dlc/core/dist/index.js +78 -0
- package/.yalc/@node-dlc/core/dist/index.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/ChannelId.d.ts +31 -0
- package/.yalc/@node-dlc/core/dist/lightning/ChannelId.js +52 -0
- package/.yalc/@node-dlc/core/dist/lightning/ChannelId.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.d.ts +55 -0
- package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.js +105 -0
- package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.d.ts +55 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.js +76 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.d.ts +26 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.js +44 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.d.ts +41 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.js +79 -0
- package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/Htlc.d.ts +46 -0
- package/.yalc/@node-dlc/core/dist/lightning/Htlc.js +46 -0
- package/.yalc/@node-dlc/core/dist/lightning/Htlc.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.d.ts +16 -0
- package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.js +21 -0
- package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.d.ts +76 -0
- package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.js +102 -0
- package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/lightning/TxFactory.d.ts +83 -0
- package/.yalc/@node-dlc/core/dist/lightning/TxFactory.js +222 -0
- package/.yalc/@node-dlc/core/dist/lightning/TxFactory.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.d.ts +9 -0
- package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.js +59 -0
- package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.js.map +1 -0
- package/.yalc/@node-dlc/core/dist/utils/Precision.d.ts +13 -0
- package/.yalc/@node-dlc/core/dist/utils/Precision.js +28 -0
- package/.yalc/@node-dlc/core/dist/utils/Precision.js.map +1 -0
- package/.yalc/@node-dlc/core/lib/AsyncProcessingQueue.ts +63 -0
- package/.yalc/@node-dlc/core/lib/Base32.ts +2 -0
- package/.yalc/@node-dlc/core/lib/BigIntUtils.ts +2 -0
- package/.yalc/@node-dlc/core/lib/BitField.ts +2 -0
- package/.yalc/@node-dlc/core/lib/ChannelId.ts +2 -0
- package/.yalc/@node-dlc/core/lib/LinkedList.ts +111 -0
- package/.yalc/@node-dlc/core/lib/LinkedListNode.ts +14 -0
- package/.yalc/@node-dlc/core/lib/Queue.ts +36 -0
- package/.yalc/@node-dlc/core/lib/ShortChannelId.ts +2 -0
- package/.yalc/@node-dlc/core/lib/ShortChannelIdUtils.ts +9 -0
- package/.yalc/@node-dlc/core/lib/dlc/CETCalculator.ts +450 -0
- package/.yalc/@node-dlc/core/lib/dlc/CoinSelect.ts +117 -0
- package/.yalc/@node-dlc/core/lib/dlc/HyperbolaPayoutCurve.ts +188 -0
- package/.yalc/@node-dlc/core/lib/dlc/PayoutCurve.ts +6 -0
- package/.yalc/@node-dlc/core/lib/dlc/PolynomialPayoutCurve.ts +266 -0
- package/.yalc/@node-dlc/core/lib/dlc/TxBuilder.ts +336 -0
- package/.yalc/@node-dlc/core/lib/dlc/TxFinalizer.ts +217 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/Builder.ts +730 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/CoveredCall.ts +110 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/CsoInfo.ts +498 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/LinearPayout.ts +94 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/LongCall.ts +74 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/LongPut.ts +74 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/OptionInfo.ts +182 -0
- package/.yalc/@node-dlc/core/lib/dlc/finance/ShortPut.ts +75 -0
- package/.yalc/@node-dlc/core/lib/index.ts +66 -0
- package/.yalc/@node-dlc/core/lib/lightning/ChannelId.ts +54 -0
- package/.yalc/@node-dlc/core/lib/lightning/ChannelKeys.ts +109 -0
- package/.yalc/@node-dlc/core/lib/lightning/CommitmentNumber.ts +94 -0
- package/.yalc/@node-dlc/core/lib/lightning/CommitmentSecret.ts +41 -0
- package/.yalc/@node-dlc/core/lib/lightning/CommitmentSecretStore.ts +84 -0
- package/.yalc/@node-dlc/core/lib/lightning/Htlc.ts +52 -0
- package/.yalc/@node-dlc/core/lib/lightning/HtlcDirection.ts +17 -0
- package/.yalc/@node-dlc/core/lib/lightning/ScriptFactory.ts +150 -0
- package/.yalc/@node-dlc/core/lib/lightning/TxFactory.ts +338 -0
- package/.yalc/@node-dlc/core/lib/utils/BigIntUtils.ts +64 -0
- package/.yalc/@node-dlc/core/lib/utils/Precision.ts +23 -0
- package/.yalc/@node-dlc/core/package.json +38 -0
- package/.yalc/@node-dlc/core/tsconfig.json +8 -0
- package/.yalc/@node-dlc/core/yalc.sig +1 -0
- package/.yalc/@node-dlc/crypto/.eslintrc +6 -0
- package/.yalc/@node-dlc/crypto/.nyc_output/de03e0b4-d482-4f61-b680-59411360f56e.json +1 -0
- package/.yalc/@node-dlc/crypto/.nyc_output/processinfo/de03e0b4-d482-4f61-b680-59411360f56e.json +1 -0
- package/.yalc/@node-dlc/crypto/.nyc_output/processinfo/index.json +1 -0
- package/.yalc/@node-dlc/crypto/README.md +13 -0
- package/.yalc/@node-dlc/crypto/__tests__/chacha.spec.ts +29 -0
- package/.yalc/@node-dlc/crypto/__tests__/chachapoly.spec.ts +78 -0
- package/.yalc/@node-dlc/crypto/__tests__/hkdf.spec.ts +131 -0
- package/.yalc/@node-dlc/crypto/__tests__/key.spec.ts +125 -0
- package/.yalc/@node-dlc/crypto/__tests__/secp256k1.spec.ts +194 -0
- package/.yalc/@node-dlc/crypto/__tests__/xor.spec.ts +28 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/base.css +224 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/block-navigation.js +79 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/chacha.ts.html +119 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/chachapoly.ts.html +275 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/favicon.png +0 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/hkdf.ts.html +236 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/index.html +186 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/key.ts.html +272 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/prettify.css +1 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/prettify.js +2 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/secp256k1.ts.html +680 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/sorter.js +170 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov-report/xor.ts.html +116 -0
- package/.yalc/@node-dlc/crypto/coverage/lcov.info +221 -0
- package/.yalc/@node-dlc/crypto/dist/aes-key.d.ts +6 -0
- package/.yalc/@node-dlc/crypto/dist/aes-key.js +3 -0
- package/.yalc/@node-dlc/crypto/dist/aes-key.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/aes.d.ts +34 -0
- package/.yalc/@node-dlc/crypto/dist/aes.js +62 -0
- package/.yalc/@node-dlc/crypto/dist/aes.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/chacha.d.ts +4 -0
- package/.yalc/@node-dlc/crypto/dist/chacha.js +40 -0
- package/.yalc/@node-dlc/crypto/dist/chacha.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/chachapoly.d.ts +24 -0
- package/.yalc/@node-dlc/crypto/dist/chachapoly.js +61 -0
- package/.yalc/@node-dlc/crypto/dist/chachapoly.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/hash.d.ts +29 -0
- package/.yalc/@node-dlc/crypto/dist/hash.js +51 -0
- package/.yalc/@node-dlc/crypto/dist/hash.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/hkdf.d.ts +20 -0
- package/.yalc/@node-dlc/crypto/dist/hkdf.js +50 -0
- package/.yalc/@node-dlc/crypto/dist/hkdf.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/hmac.d.ts +3 -0
- package/.yalc/@node-dlc/crypto/dist/hmac.js +14 -0
- package/.yalc/@node-dlc/crypto/dist/hmac.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/index.d.ts +11 -0
- package/.yalc/@node-dlc/crypto/dist/index.js +30 -0
- package/.yalc/@node-dlc/crypto/dist/index.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/key.d.ts +37 -0
- package/.yalc/@node-dlc/crypto/dist/key.js +72 -0
- package/.yalc/@node-dlc/crypto/dist/key.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/secp256k1.d.ts +120 -0
- package/.yalc/@node-dlc/crypto/dist/secp256k1.js +184 -0
- package/.yalc/@node-dlc/crypto/dist/secp256k1.js.map +1 -0
- package/.yalc/@node-dlc/crypto/dist/xor.d.ts +8 -0
- package/.yalc/@node-dlc/crypto/dist/xor.js +17 -0
- package/.yalc/@node-dlc/crypto/dist/xor.js.map +1 -0
- package/.yalc/@node-dlc/crypto/lib/aes-key.ts +4 -0
- package/.yalc/@node-dlc/crypto/lib/aes.ts +81 -0
- package/.yalc/@node-dlc/crypto/lib/chacha.ts +13 -0
- package/.yalc/@node-dlc/crypto/lib/chachapoly.ts +65 -0
- package/.yalc/@node-dlc/crypto/lib/hash.ts +44 -0
- package/.yalc/@node-dlc/crypto/lib/hkdf.ts +52 -0
- package/.yalc/@node-dlc/crypto/lib/hmac.ts +7 -0
- package/.yalc/@node-dlc/crypto/lib/index.ts +11 -0
- package/.yalc/@node-dlc/crypto/lib/key.ts +64 -0
- package/.yalc/@node-dlc/crypto/lib/secp256k1.ts +200 -0
- package/.yalc/@node-dlc/crypto/lib/xor.ts +12 -0
- package/.yalc/@node-dlc/crypto/package.json +34 -0
- package/.yalc/@node-dlc/crypto/tsconfig-build.json +7 -0
- package/.yalc/@node-dlc/crypto/tsconfig.json +4 -0
- package/.yalc/@node-dlc/crypto/yalc.sig +1 -0
- package/.yalc/@node-dlc/messaging/.nyc_output/83d37f9d-cecf-4c52-a753-115ff80bbca0.json +1 -0
- package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/83d37f9d-cecf-4c52-a753-115ff80bbca0.json +1 -0
- package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/index.json +1 -1
- package/.yalc/@node-dlc/messaging/__tests__/_test-utils.ts +1 -0
- package/.yalc/@node-dlc/messaging/__tests__/compatibility/dlcspecs-compatibility.spec.ts +13 -47
- package/.yalc/@node-dlc/messaging/__tests__/compatibility/rust-dlc-cross-language.spec.ts +166 -253
- package/.yalc/@node-dlc/messaging/__tests__/compatibility/true-serialization-compatibility.spec.ts +214 -483
- package/.yalc/@node-dlc/messaging/__tests__/messages/ContractDescriptor.spec.ts +3 -1
- package/.yalc/@node-dlc/messaging/__tests__/messages/ContractInfo.spec.ts +1 -1
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcAccept.spec.ts +72 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcInput.spec.ts +111 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcOffer.spec.ts +99 -37
- package/.yalc/@node-dlc/messaging/__tests__/messages/FundingInput.spec.ts +148 -63
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAttestation.spec.ts +2 -4
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderAccept.spec.ts +7 -9
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderNegotiationFields.spec.ts +135 -52
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderPositionInfo.spec.ts +6 -6
- package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutCurvePiece.spec.ts +1 -1
- package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutFunction.spec.ts +1 -1
- package/.yalc/@node-dlc/messaging/__tests__/serialize/F64.spec.ts +1 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/index.html +31 -31
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/MessageType.ts.html +11 -5
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainManager.ts.html +6 -3
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainMemoryStore.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/index.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/Address.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/index.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.html +9 -9
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.ts.html +11 -8
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/IrcMessage.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/index.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/AddressCache.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/BatchFundingGroup.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignatures.ts.html +22 -22
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignaturesV0.ts.html +46 -37
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CloseTLV.ts.html +344 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractDescriptor.ts.html +61 -70
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractInfo.ts.html +59 -44
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcAccept.ts.html +251 -119
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCancel.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcClose.ts.html +12 -3
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCloseMetadata.ts.html +2 -11
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcIds.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInfo.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInput.ts.html +581 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcMessage.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcOffer.ts.html +307 -127
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcSign.ts.html +61 -46
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcTransactions.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/EventDescriptor.ts.html +67 -52
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingInput.ts.html +202 -70
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignatures.ts.html +15 -15
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignaturesV0.ts.html +47 -77
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NegotiationFields.ts.html +16 -4
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NodeAnnouncementMessage.ts.html +3 -3
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncement.ts.html +22 -22
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncementV0.ts.html +48 -270
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestation.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestationV0.ts.html +113 -404
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEvent.ts.html +49 -49
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainer.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainerV0.ts.html +22 -22
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventV0.ts.html +61 -385
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifier.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifierV0.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfo.ts.html +46 -25
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfoV0.ts.html +55 -1378
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderAccept.ts.html +68 -23
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderIrcInfo.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderMetadata.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderNegotiationFields.ts.html +266 -107
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderOffer.ts.html +31 -34
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderPositionInfo.ts.html +19 -88
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutCurvePiece.ts.html +36 -21
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutFunction.ts.html +34 -28
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervals.ts.html +18 -15
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervalsV0.ts.html +75 -129
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ScriptWitnessV0.ts.html +6 -6
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/index.html +84 -69
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/F64.ts.html +8 -53
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/deserializeTlv.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/getTlv.ts.html +9 -9
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/index.html +15 -15
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/util.ts.html +22 -10
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/index.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/validate.ts.html +1 -1
- package/.yalc/@node-dlc/messaging/coverage/lcov.info +3049 -2826
- package/.yalc/@node-dlc/messaging/dist/MessageType.d.ts +2 -1
- package/.yalc/@node-dlc/messaging/dist/MessageType.js +2 -1
- package/.yalc/@node-dlc/messaging/dist/MessageType.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js +1 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/index.d.ts +5 -4
- package/.yalc/@node-dlc/messaging/dist/index.js +5 -4
- package/.yalc/@node-dlc/messaging/dist/index.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.d.ts +42 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.js +68 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.d.ts +38 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.js +59 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.d.ts +11 -12
- package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js +0 -1
- package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.d.ts +10 -10
- package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js +5 -1
- package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.d.ts +15 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js +46 -5
- package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js +6 -2
- package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.d.ts +56 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.js +135 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.d.ts +16 -1
- package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js +50 -5
- package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js +11 -3
- package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.d.ts +7 -6
- package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js +3 -0
- package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.d.ts +7 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js +31 -1
- package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.d.ts +34 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.js +72 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.d.ts +2 -2
- package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js +4 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.d.ts +47 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.js +76 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.d.ts +48 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.js +100 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.d.ts +32 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.js +67 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.d.ts +54 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.js +100 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.d.ts +8 -6
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js +3 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.d.ts +15 -141
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js +21 -350
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.d.ts +3 -2
- package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js +22 -7
- package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.d.ts +48 -36
- package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js +97 -50
- package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.d.ts +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.d.ts +7 -13
- package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js +11 -25
- package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js +5 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js +4 -1
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.d.ts +47 -0
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.js +86 -0
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/F64.d.ts +0 -8
- package/.yalc/@node-dlc/messaging/dist/serialize/F64.js +0 -13
- package/.yalc/@node-dlc/messaging/dist/serialize/F64.js.map +1 -1
- package/.yalc/@node-dlc/messaging/dist/util.d.ts +1 -1
- package/.yalc/@node-dlc/messaging/dist/util.js +2 -0
- package/.yalc/@node-dlc/messaging/dist/util.js.map +1 -1
- package/.yalc/@node-dlc/messaging/lib/MessageType.ts +3 -1
- package/.yalc/@node-dlc/messaging/lib/chain/ChainManager.ts +1 -0
- package/.yalc/@node-dlc/messaging/lib/index.ts +5 -4
- package/.yalc/@node-dlc/messaging/lib/messages/ContractDescriptor.ts +15 -16
- package/.yalc/@node-dlc/messaging/lib/messages/ContractInfo.ts +17 -12
- package/.yalc/@node-dlc/messaging/lib/messages/DlcAccept.ts +50 -6
- package/.yalc/@node-dlc/messaging/lib/messages/DlcClose.ts +4 -1
- package/.yalc/@node-dlc/messaging/lib/messages/DlcCloseMetadata.ts +0 -3
- package/.yalc/@node-dlc/messaging/lib/messages/DlcInput.ts +167 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcOffer.ts +67 -7
- package/.yalc/@node-dlc/messaging/lib/messages/DlcSign.ts +5 -0
- package/.yalc/@node-dlc/messaging/lib/messages/EventDescriptor.ts +12 -7
- package/.yalc/@node-dlc/messaging/lib/messages/FundingInput.ts +45 -1
- package/.yalc/@node-dlc/messaging/lib/messages/NegotiationFields.ts +6 -2
- package/.yalc/@node-dlc/messaging/lib/messages/NodeAnnouncementMessage.ts +2 -2
- package/.yalc/@node-dlc/messaging/lib/messages/OracleInfo.ts +15 -8
- package/.yalc/@node-dlc/messaging/lib/messages/OrderAccept.ts +28 -13
- package/.yalc/@node-dlc/messaging/lib/messages/OrderNegotiationFields.ts +127 -74
- package/.yalc/@node-dlc/messaging/lib/messages/OrderOffer.ts +2 -3
- package/.yalc/@node-dlc/messaging/lib/messages/OrderPositionInfo.ts +10 -33
- package/.yalc/@node-dlc/messaging/lib/messages/PayoutCurvePiece.ts +5 -0
- package/.yalc/@node-dlc/messaging/lib/messages/PayoutFunction.ts +2 -0
- package/.yalc/@node-dlc/messaging/lib/messages/RoundingIntervals.ts +1 -0
- package/.yalc/@node-dlc/messaging/lib/serialize/F64.ts +0 -15
- package/.yalc/@node-dlc/messaging/lib/serialize/readTlvs.ts +1 -1
- package/.yalc/@node-dlc/messaging/lib/util.ts +5 -1
- package/.yalc/@node-dlc/messaging/package.json +8 -8
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_3_test.json +76 -74
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_5_test.json +90 -88
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_3_of_5_test.json +162 -160
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_5_of_5_test.json +162 -160
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_3_of_5_test.json +164 -162
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_5_of_5_test.json +164 -162
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_single_oracle_test.json +60 -58
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_hyperbola_test.json +71 -69
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_test.json +71 -69
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_five_oracle_numerical_with_diff_test.json +119 -117
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_test.json +95 -93
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_with_diff_test.json +97 -95
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_test.json +117 -115
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_with_diff_test.json +119 -117
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_3_of_3_test.json +210 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_3_of_5_test.json +468 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_3_of_5_test.json +1517 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_5_of_5_test.json +545 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_with_diff_3_of_5_test.json +4761 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_with_diff_5_of_5_test.json +2169 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_single_oracle_test.json +164 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/single_oracle_numerical_hyperbola_test.json +502 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/single_oracle_numerical_test.json +262 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_five_oracle_numerical_with_diff_test.json +4382 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_three_oracle_numerical_test.json +324 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_three_oracle_numerical_with_diff_test.json +652 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/two_of_five_oracle_numerical_test.json +1138 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/two_of_five_oracle_numerical_with_diff_test.json +2222 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_3_of_3_test.json +212 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_3_of_5_test.json +470 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_3_of_5_test.json +1519 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_5_of_5_test.json +547 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_with_diff_3_of_5_test.json +4763 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_with_diff_5_of_5_test.json +2171 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_single_oracle_test.json +166 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/single_oracle_numerical_hyperbola_test.json +504 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/single_oracle_numerical_test.json +264 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_five_oracle_numerical_with_diff_test.json +4384 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_three_oracle_numerical_test.json +326 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_three_oracle_numerical_with_diff_test.json +654 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/two_of_five_oracle_numerical_test.json +1140 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/two_of_five_oracle_numerical_with_diff_test.json +2224 -0
- package/.yalc/@node-dlc/messaging/yalc.sig +1 -1
- package/CHANGELOG.md +58 -5
- package/README.md +48 -0
- package/dist/BitcoinDlcProvider.d.ts +34 -5
- package/dist/BitcoinDlcProvider.js +622 -155
- package/dist/BitcoinDlcProvider.js.map +1 -1
- package/dist/utils/Utils.js +5 -1
- package/dist/utils/Utils.js.map +1 -1
- package/lib/BitcoinDlcProvider.ts +899 -204
- package/lib/utils/Utils.ts +2 -0
- package/package.json +10 -10
- package/yalc.lock +22 -2
- package/.yalc/@node-dlc/messaging/.nyc_output/2cf48009-1094-4275-bb91-c164c932feb6.json +0 -1
- package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/2cf48009-1094-4275-bb91-c164c932feb6.json +0 -1
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AddSignaturesToRefundTxResponse,
|
|
7
7
|
AddSignatureToFundTransactionRequest,
|
|
8
8
|
AddSignatureToFundTransactionResponse,
|
|
9
|
+
Amount,
|
|
9
10
|
CalculateEcSignatureRequest,
|
|
10
11
|
CreateBatchDlcTransactionsRequest,
|
|
11
12
|
CreateBatchDlcTransactionsResponse,
|
|
@@ -25,7 +26,12 @@ import {
|
|
|
25
26
|
CreateRefundTransactionRequest,
|
|
26
27
|
CreateRefundTransactionResponse,
|
|
27
28
|
CreateSignatureHashRequest,
|
|
29
|
+
CreateSplicedDlcTransactionsRequest,
|
|
30
|
+
CreateSplicedDlcTransactionsResponse,
|
|
31
|
+
DlcInputInfoRequest,
|
|
28
32
|
DlcProvider,
|
|
33
|
+
GetRawDlcFundingInputSignatureRequest,
|
|
34
|
+
GetRawDlcFundingInputSignatureResponse,
|
|
29
35
|
GetRawFundTxSignatureRequest,
|
|
30
36
|
GetRawFundTxSignatureResponse,
|
|
31
37
|
GetRawRefundTxSignatureRequest,
|
|
@@ -35,6 +41,8 @@ import {
|
|
|
35
41
|
PayoutRequest,
|
|
36
42
|
SignCetRequest,
|
|
37
43
|
SignCetResponse,
|
|
44
|
+
SignDlcFundingInputRequest,
|
|
45
|
+
SignDlcFundingInputResponse,
|
|
38
46
|
SignFundTransactionRequest,
|
|
39
47
|
SignFundTransactionResponse,
|
|
40
48
|
Utxo,
|
|
@@ -42,15 +50,22 @@ import {
|
|
|
42
50
|
VerifyCetAdaptorSignatureResponse,
|
|
43
51
|
VerifyCetAdaptorSignaturesRequest,
|
|
44
52
|
VerifyCetAdaptorSignaturesResponse,
|
|
53
|
+
VerifyDlcFundingInputSignatureRequest,
|
|
54
|
+
VerifyDlcFundingInputSignatureResponse,
|
|
45
55
|
VerifyFundTxSignatureRequest,
|
|
46
56
|
VerifyFundTxSignatureResponse,
|
|
47
57
|
VerifyRefundTxSignatureRequest,
|
|
48
58
|
VerifyRefundTxSignatureResponse,
|
|
49
59
|
VerifySignatureRequest,
|
|
50
60
|
} from '@atomicfinance/types';
|
|
61
|
+
import {
|
|
62
|
+
DlcInputInfo,
|
|
63
|
+
InputSupplementationMode,
|
|
64
|
+
} from '@atomicfinance/types/lib/models/Input';
|
|
51
65
|
import { sleep } from '@atomicfinance/utils';
|
|
52
66
|
import { Script, Sequence, Tx } from '@node-dlc/bitcoin';
|
|
53
67
|
import { StreamReader } from '@node-dlc/bufio';
|
|
68
|
+
import { BatchDlcTxBuilder } from '@node-dlc/core';
|
|
54
69
|
import {
|
|
55
70
|
DualClosingTxFinalizer,
|
|
56
71
|
DualFundingTxFinalizer,
|
|
@@ -71,6 +86,7 @@ import {
|
|
|
71
86
|
DlcAccept,
|
|
72
87
|
DlcClose,
|
|
73
88
|
DlcCloseMetadata,
|
|
89
|
+
DlcInput,
|
|
74
90
|
DlcOffer,
|
|
75
91
|
DlcSign,
|
|
76
92
|
DlcTransactions,
|
|
@@ -115,8 +131,10 @@ export default class BitcoinDlcProvider
|
|
|
115
131
|
implements Partial<DlcProvider>
|
|
116
132
|
{
|
|
117
133
|
_network: BitcoinNetwork;
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
135
|
_cfdDlcJs: any;
|
|
119
136
|
|
|
137
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
120
138
|
constructor(network: BitcoinNetwork, cfdDlcJs?: any) {
|
|
121
139
|
super();
|
|
122
140
|
|
|
@@ -130,22 +148,110 @@ export default class BitcoinDlcProvider
|
|
|
130
148
|
}
|
|
131
149
|
}
|
|
132
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Find private key for DLC funding pubkey by deriving wallet addresses
|
|
153
|
+
*/
|
|
154
|
+
private async findDlcFundingPrivateKey(
|
|
155
|
+
localFundPubkey: string,
|
|
156
|
+
remoteFundPubkey: string,
|
|
157
|
+
): Promise<string> {
|
|
158
|
+
const targetPubkeys = [localFundPubkey, remoteFundPubkey];
|
|
159
|
+
|
|
160
|
+
// First check existing wallet addresses
|
|
161
|
+
const addresses = await this.getMethod('getAddresses')();
|
|
162
|
+
|
|
163
|
+
for (const addressInfo of addresses) {
|
|
164
|
+
if (addressInfo.derivationPath) {
|
|
165
|
+
try {
|
|
166
|
+
const keyPair = await this.getMethod('keyPair')(
|
|
167
|
+
addressInfo.derivationPath,
|
|
168
|
+
);
|
|
169
|
+
const pubkey = Buffer.from(keyPair.publicKey);
|
|
170
|
+
const pubkeyHex = pubkey.toString('hex');
|
|
171
|
+
|
|
172
|
+
if (targetPubkeys.includes(pubkeyHex)) {
|
|
173
|
+
return Buffer.from(keyPair.privateKey).toString('hex');
|
|
174
|
+
}
|
|
175
|
+
} catch (error) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// If not found in existing addresses, do comprehensive search
|
|
182
|
+
// For DLC splicing, funding pubkeys can be at much higher derivation paths
|
|
183
|
+
console.log('Searching extensively for DLC funding private key...');
|
|
184
|
+
|
|
185
|
+
for (const isChange of [false, true]) {
|
|
186
|
+
for (let i = 0; i < 1000; i++) {
|
|
187
|
+
// Search up to 1000 addresses for DLC keys
|
|
188
|
+
try {
|
|
189
|
+
const address = await this.client.wallet.getAddresses(i, 1, isChange);
|
|
190
|
+
if (address && address.length > 0) {
|
|
191
|
+
const addressInfo = address[0];
|
|
192
|
+
|
|
193
|
+
if (addressInfo.derivationPath) {
|
|
194
|
+
const keyPair = await this.getMethod('keyPair')(
|
|
195
|
+
addressInfo.derivationPath,
|
|
196
|
+
);
|
|
197
|
+
const pubkey = Buffer.from(keyPair.publicKey);
|
|
198
|
+
const pubkeyHex = pubkey.toString('hex');
|
|
199
|
+
|
|
200
|
+
if (targetPubkeys.includes(pubkeyHex)) {
|
|
201
|
+
console.log(
|
|
202
|
+
`Found DLC funding key at derivation path: ${addressInfo.derivationPath}`,
|
|
203
|
+
);
|
|
204
|
+
return Buffer.from(keyPair.privateKey).toString('hex');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
} catch (error) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
throw new Error(
|
|
215
|
+
`Could not find private key for DLC funding pubkeys: local=${localFundPubkey}, remote=${remoteFundPubkey}`,
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
|
|
133
219
|
private async GetPrivKeysForInputs(inputs: Input[]): Promise<string[]> {
|
|
134
220
|
const privKeys: string[] = [];
|
|
135
221
|
|
|
136
222
|
for (let i = 0; i < inputs.length; i++) {
|
|
137
223
|
const input = inputs[i];
|
|
138
|
-
let derivationPath = input.derivationPath;
|
|
139
224
|
|
|
140
|
-
if (
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
225
|
+
if (input.isDlcInput()) {
|
|
226
|
+
// Handle DLC input - use the dedicated method to find the funding private key
|
|
227
|
+
const dlcInput = input.dlcInput!;
|
|
228
|
+
const foundPrivKey = await this.findDlcFundingPrivateKey(
|
|
229
|
+
dlcInput.localFundPubkey,
|
|
230
|
+
dlcInput.remoteFundPubkey,
|
|
231
|
+
);
|
|
232
|
+
privKeys.push(foundPrivKey);
|
|
233
|
+
} else {
|
|
234
|
+
// Handle regular input
|
|
235
|
+
let derivationPath = input.derivationPath;
|
|
236
|
+
|
|
237
|
+
if (!derivationPath) {
|
|
238
|
+
try {
|
|
239
|
+
derivationPath = (
|
|
240
|
+
await this.getMethod('getWalletAddress')(input.address)
|
|
241
|
+
).derivationPath;
|
|
242
|
+
} catch (error) {
|
|
243
|
+
throw new Error(
|
|
244
|
+
`Unable to find address ${input.address} in wallet. ` +
|
|
245
|
+
`This may happen when using derivation paths outside the normal range. ` +
|
|
246
|
+
`Error: ${error.message}`,
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
145
250
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
251
|
+
const keyPair = await this.getMethod('keyPair')(derivationPath);
|
|
252
|
+
const privKey = Buffer.from(keyPair.__D).toString('hex');
|
|
253
|
+
privKeys.push(privKey);
|
|
254
|
+
}
|
|
149
255
|
}
|
|
150
256
|
|
|
151
257
|
return privKeys;
|
|
@@ -164,6 +270,46 @@ export default class BitcoinDlcProvider
|
|
|
164
270
|
}
|
|
165
271
|
}
|
|
166
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Get inputs for amount with explicit supplementation control
|
|
275
|
+
*/
|
|
276
|
+
async GetInputsForAmountWithMode(
|
|
277
|
+
amounts: bigint[],
|
|
278
|
+
feeRatePerVb: bigint,
|
|
279
|
+
fixedInputs: Input[] = [],
|
|
280
|
+
supplementation: InputSupplementationMode = InputSupplementationMode.Required,
|
|
281
|
+
): Promise<Input[]> {
|
|
282
|
+
if (amounts.length === 0) return [];
|
|
283
|
+
|
|
284
|
+
// For "none" mode, use exactly the provided inputs
|
|
285
|
+
if (supplementation === InputSupplementationMode.None) {
|
|
286
|
+
return fixedInputs;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// For "required" and "optional" modes, attempt supplementation
|
|
290
|
+
const fixedUtxos = fixedInputs.map((input) => input.toUtxo());
|
|
291
|
+
|
|
292
|
+
try {
|
|
293
|
+
const inputsForAmount: InputsForDualAmountResponse = await this.getMethod(
|
|
294
|
+
'getInputsForDualFunding',
|
|
295
|
+
)(amounts, feeRatePerVb, fixedUtxos);
|
|
296
|
+
|
|
297
|
+
// Convert UTXO objects to Input class instances
|
|
298
|
+
return inputsForAmount.inputs.map((utxo) => Input.fromUTXO(utxo));
|
|
299
|
+
} catch (e) {
|
|
300
|
+
const errorMessage = e instanceof Error ? e.message : 'Unknown error';
|
|
301
|
+
|
|
302
|
+
if (supplementation === InputSupplementationMode.Required) {
|
|
303
|
+
throw Error(
|
|
304
|
+
`Not enough balance GetInputsForAmountWithMode. Error: ${errorMessage}`,
|
|
305
|
+
);
|
|
306
|
+
} else {
|
|
307
|
+
// Optional mode: fallback to provided inputs
|
|
308
|
+
return fixedInputs;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
167
313
|
async GetInputsForAmount(
|
|
168
314
|
amounts: bigint[],
|
|
169
315
|
feeRatePerVb: bigint,
|
|
@@ -179,7 +325,8 @@ export default class BitcoinDlcProvider
|
|
|
179
325
|
'getInputsForDualFunding',
|
|
180
326
|
)(amounts, feeRatePerVb, fixedUtxos);
|
|
181
327
|
|
|
182
|
-
|
|
328
|
+
// Convert UTXO objects to Input class instances
|
|
329
|
+
inputs = inputsForAmount.inputs.map((utxo) => Input.fromUTXO(utxo));
|
|
183
330
|
} catch (e) {
|
|
184
331
|
const errorMessage = e instanceof Error ? e.message : 'Unknown error';
|
|
185
332
|
if (fixedInputs.length === 0) {
|
|
@@ -198,6 +345,7 @@ export default class BitcoinDlcProvider
|
|
|
198
345
|
collateral: bigint,
|
|
199
346
|
feeRatePerVb: bigint,
|
|
200
347
|
fixedInputs: Input[],
|
|
348
|
+
inputSupplementationMode: InputSupplementationMode = InputSupplementationMode.Required,
|
|
201
349
|
): Promise<InitializeResponse> {
|
|
202
350
|
const network = await this.getConnectedNetwork();
|
|
203
351
|
const payoutAddress: Address =
|
|
@@ -220,10 +368,11 @@ export default class BitcoinDlcProvider
|
|
|
220
368
|
if (fundingAddress.address === payoutAddress.address)
|
|
221
369
|
throw Error('Address reuse');
|
|
222
370
|
|
|
223
|
-
const inputs: Input[] = await this.
|
|
371
|
+
const inputs: Input[] = await this.GetInputsForAmountWithMode(
|
|
224
372
|
[collateral],
|
|
225
373
|
feeRatePerVb,
|
|
226
374
|
fixedInputs,
|
|
375
|
+
inputSupplementationMode,
|
|
227
376
|
);
|
|
228
377
|
const fundingInputs: FundingInput[] = await Promise.all(
|
|
229
378
|
inputs.map(async (input) => {
|
|
@@ -251,10 +400,11 @@ export default class BitcoinDlcProvider
|
|
|
251
400
|
): Promise<BatchInitializeResponse> {
|
|
252
401
|
const network = await this.getConnectedNetwork();
|
|
253
402
|
|
|
254
|
-
const inputs: Input[] = await this.
|
|
403
|
+
const inputs: Input[] = await this.GetInputsForAmountWithMode(
|
|
255
404
|
collaterals,
|
|
256
405
|
feeRatePerVb,
|
|
257
406
|
fixedInputs,
|
|
407
|
+
InputSupplementationMode.Required,
|
|
258
408
|
);
|
|
259
409
|
|
|
260
410
|
const fundingInputs: FundingInput[] = await Promise.all(
|
|
@@ -556,13 +706,45 @@ export default class BitcoinDlcProvider
|
|
|
556
706
|
const localChangeScriptPubkey = dlcOffer.changeSpk.toString('hex');
|
|
557
707
|
const remoteChangeScriptPubkey = dlcAccept.changeSpk.toString('hex');
|
|
558
708
|
|
|
559
|
-
|
|
560
|
-
|
|
709
|
+
// Separate regular inputs from DLC inputs (only from offeror side)
|
|
710
|
+
const localRegularInputs: Utxo[] = [];
|
|
711
|
+
const localDlcInputs: {
|
|
712
|
+
fundTxid: string;
|
|
713
|
+
fundVout: number;
|
|
714
|
+
fundAmount: number;
|
|
715
|
+
localFundPubkey: string;
|
|
716
|
+
remoteFundPubkey: string;
|
|
717
|
+
contractId: string;
|
|
718
|
+
maxWitnessLength: number;
|
|
719
|
+
inputSerialId?: bigint;
|
|
720
|
+
}[] = [];
|
|
721
|
+
|
|
722
|
+
for (const fundingInput of dlcOffer.fundingInputs) {
|
|
723
|
+
if (fundingInput.dlcInput) {
|
|
724
|
+
// This is a DLC input for splicing
|
|
725
|
+
// The pubkeys should be from the original DLC to correctly spend its funding output
|
|
726
|
+
localDlcInputs.push({
|
|
727
|
+
fundTxid: fundingInput.prevTx.txId.toString(),
|
|
728
|
+
fundVout: fundingInput.prevTxVout,
|
|
729
|
+
fundAmount: Number(
|
|
730
|
+
fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
|
|
731
|
+
),
|
|
732
|
+
localFundPubkey:
|
|
733
|
+
fundingInput.dlcInput.localFundPubkey.toString('hex'),
|
|
734
|
+
remoteFundPubkey:
|
|
735
|
+
fundingInput.dlcInput.remoteFundPubkey.toString('hex'),
|
|
736
|
+
contractId: fundingInput.dlcInput.contractId.toString('hex'),
|
|
737
|
+
maxWitnessLength: fundingInput.maxWitnessLen,
|
|
738
|
+
inputSerialId: fundingInput.inputSerialId,
|
|
739
|
+
});
|
|
740
|
+
} else {
|
|
741
|
+
// Regular input
|
|
561
742
|
const input = await this.fundingInputToInput(fundingInput, false);
|
|
562
|
-
|
|
563
|
-
}
|
|
564
|
-
|
|
743
|
+
localRegularInputs.push(input.toUtxo());
|
|
744
|
+
}
|
|
745
|
+
}
|
|
565
746
|
|
|
747
|
+
// Process remote inputs (no DLC inputs from acceptor side)
|
|
566
748
|
const remoteInputs: Utxo[] = await Promise.all(
|
|
567
749
|
dlcAccept.fundingInputs.map(async (fundingInput) => {
|
|
568
750
|
const input = await this.fundingInputToInput(fundingInput, false);
|
|
@@ -570,7 +752,8 @@ export default class BitcoinDlcProvider
|
|
|
570
752
|
}),
|
|
571
753
|
);
|
|
572
754
|
|
|
573
|
-
|
|
755
|
+
// Calculate input amounts
|
|
756
|
+
const localInputAmount = localRegularInputs.reduce<number>(
|
|
574
757
|
(prev, cur) => prev + cur.amount.GetSatoshiAmount(),
|
|
575
758
|
0,
|
|
576
759
|
);
|
|
@@ -609,47 +792,117 @@ export default class BitcoinDlcProvider
|
|
|
609
792
|
messagesList = tempMessagesList;
|
|
610
793
|
}
|
|
611
794
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
795
|
+
// Determine whether to use regular or spliced DLC transactions
|
|
796
|
+
const hasDlcInputs = localDlcInputs.length > 0;
|
|
797
|
+
|
|
798
|
+
let dlcTxs:
|
|
799
|
+
| CreateDlcTransactionsResponse
|
|
800
|
+
| CreateSplicedDlcTransactionsResponse;
|
|
801
|
+
|
|
802
|
+
if (hasDlcInputs) {
|
|
803
|
+
// Use spliced DLC transactions when DLC inputs are present
|
|
804
|
+
const splicedDlcTxRequest: CreateSplicedDlcTransactionsRequest = {
|
|
805
|
+
payouts,
|
|
806
|
+
localFundPubkey,
|
|
807
|
+
localFinalScriptPubkey,
|
|
808
|
+
remoteFundPubkey,
|
|
809
|
+
remoteFinalScriptPubkey,
|
|
810
|
+
localInputAmount,
|
|
811
|
+
localCollateralAmount: dlcOffer.offerCollateral,
|
|
812
|
+
localPayoutSerialId: dlcOffer.payoutSerialId,
|
|
813
|
+
localChangeSerialId: dlcOffer.changeSerialId,
|
|
814
|
+
remoteInputAmount,
|
|
815
|
+
remoteCollateralAmount: dlcAccept.acceptCollateral,
|
|
816
|
+
remotePayoutSerialId: dlcAccept.payoutSerialId,
|
|
817
|
+
remoteChangeSerialId: dlcAccept.changeSerialId,
|
|
818
|
+
refundLocktime: dlcOffer.refundLocktime,
|
|
819
|
+
localInputs: localRegularInputs,
|
|
820
|
+
localDlcInputs: localDlcInputs,
|
|
821
|
+
remoteInputs,
|
|
822
|
+
localChangeScriptPubkey,
|
|
823
|
+
remoteChangeScriptPubkey,
|
|
824
|
+
feeRate: Number(dlcOffer.feeRatePerVb),
|
|
825
|
+
cetLockTime: dlcOffer.cetLocktime,
|
|
826
|
+
fundOutputSerialId: dlcOffer.fundOutputSerialId,
|
|
827
|
+
};
|
|
828
|
+
|
|
829
|
+
dlcTxs = await this.CreateSplicedDlcTransactions(splicedDlcTxRequest);
|
|
830
|
+
} else {
|
|
831
|
+
// Use regular DLC transactions when no DLC inputs
|
|
832
|
+
const dlcTxRequest: CreateDlcTransactionsRequest = {
|
|
833
|
+
payouts,
|
|
834
|
+
localFundPubkey,
|
|
835
|
+
localFinalScriptPubkey,
|
|
836
|
+
remoteFundPubkey,
|
|
837
|
+
remoteFinalScriptPubkey,
|
|
838
|
+
localInputAmount,
|
|
839
|
+
localCollateralAmount: dlcOffer.offerCollateral,
|
|
840
|
+
localPayoutSerialId: dlcOffer.payoutSerialId,
|
|
841
|
+
localChangeSerialId: dlcOffer.changeSerialId,
|
|
842
|
+
remoteInputAmount,
|
|
843
|
+
remoteCollateralAmount: dlcAccept.acceptCollateral,
|
|
844
|
+
remotePayoutSerialId: dlcAccept.payoutSerialId,
|
|
845
|
+
remoteChangeSerialId: dlcAccept.changeSerialId,
|
|
846
|
+
refundLocktime: dlcOffer.refundLocktime,
|
|
847
|
+
localInputs: localRegularInputs,
|
|
848
|
+
remoteInputs,
|
|
849
|
+
localChangeScriptPubkey,
|
|
850
|
+
remoteChangeScriptPubkey,
|
|
851
|
+
feeRate: Number(dlcOffer.feeRatePerVb),
|
|
852
|
+
cetLockTime: dlcOffer.cetLocktime,
|
|
853
|
+
fundOutputSerialId: dlcOffer.fundOutputSerialId,
|
|
854
|
+
};
|
|
635
855
|
|
|
636
|
-
|
|
856
|
+
dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
|
|
857
|
+
}
|
|
637
858
|
|
|
638
859
|
const dlcTransactions = new DlcTransactions();
|
|
639
860
|
dlcTransactions.fundTx = Tx.decode(StreamReader.fromHex(dlcTxs.fundTxHex));
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
861
|
+
|
|
862
|
+
// Build serial IDs based on actual outputs in the transaction
|
|
863
|
+
const actualOutputs = dlcTransactions.fundTx.outputs;
|
|
864
|
+
const serialIds: bigint[] = [];
|
|
865
|
+
|
|
866
|
+
// Always include the funding output serial ID
|
|
867
|
+
serialIds.push(BigInt(dlcOffer.fundOutputSerialId));
|
|
868
|
+
|
|
869
|
+
// Only include change serial IDs if there are actually change outputs
|
|
870
|
+
// For exact amount DLCs with no change, there will be only 1 output (the funding output)
|
|
871
|
+
if (actualOutputs.length > 1) {
|
|
872
|
+
// Multiple outputs means there are change outputs
|
|
873
|
+
if (dlcOffer.offerCollateral > 0n) {
|
|
874
|
+
serialIds.push(BigInt(dlcOffer.changeSerialId));
|
|
875
|
+
}
|
|
876
|
+
if (dlcAccept.acceptCollateral > 0n) {
|
|
877
|
+
serialIds.push(BigInt(dlcAccept.changeSerialId));
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
dlcTransactions.fundTxVout = serialIds
|
|
645
882
|
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
|
|
646
|
-
.findIndex((i) => BigInt(i) === BigInt(
|
|
883
|
+
.findIndex((i) => BigInt(i) === BigInt(dlcOffer.fundOutputSerialId));
|
|
884
|
+
|
|
885
|
+
// Validate that the calculated fundTxVout is valid
|
|
886
|
+
if (
|
|
887
|
+
dlcTransactions.fundTxVout < 0 ||
|
|
888
|
+
dlcTransactions.fundTxVout >= dlcTransactions.fundTx.outputs.length
|
|
889
|
+
) {
|
|
890
|
+
throw new Error(
|
|
891
|
+
`Invalid fundTxVout calculation: calculated=${dlcTransactions.fundTxVout}, ` +
|
|
892
|
+
`fundTx.outputs.length=${dlcTransactions.fundTx.outputs.length}, ` +
|
|
893
|
+
`fundOutputSerialId=${dlcOffer.fundOutputSerialId}, ` +
|
|
894
|
+
`serialIds=[${serialIds.join(', ')}], ` +
|
|
895
|
+
`offerCollateral=${dlcOffer.offerCollateral}, ` +
|
|
896
|
+
`acceptCollateral=${dlcAccept.acceptCollateral}`,
|
|
897
|
+
);
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) =>
|
|
901
|
+
Tx.decode(StreamReader.fromHex(cetHex)),
|
|
902
|
+
);
|
|
647
903
|
dlcTransactions.refundTx = Tx.decode(
|
|
648
904
|
StreamReader.fromHex(dlcTxs.refundTxHex),
|
|
649
905
|
);
|
|
650
|
-
dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => {
|
|
651
|
-
return Tx.decode(StreamReader.fromHex(cetHex));
|
|
652
|
-
});
|
|
653
906
|
|
|
654
907
|
return { dlcTransactions, messagesList };
|
|
655
908
|
}
|
|
@@ -877,6 +1130,19 @@ export default class BitcoinDlcProvider
|
|
|
877
1130
|
}
|
|
878
1131
|
}
|
|
879
1132
|
|
|
1133
|
+
private getFundOutputValueSats(dlcTxs: DlcTransactions): bigint {
|
|
1134
|
+
const fundOutput = dlcTxs.fundTx.outputs[dlcTxs.fundTxVout];
|
|
1135
|
+
if (!fundOutput || !fundOutput.value) {
|
|
1136
|
+
throw new Error(
|
|
1137
|
+
`Invalid fund output at vout ${dlcTxs.fundTxVout}: ` +
|
|
1138
|
+
`outputs.length=${dlcTxs.fundTx.outputs.length}, ` +
|
|
1139
|
+
`output exists=${!!fundOutput}, ` +
|
|
1140
|
+
`output.value exists=${!!(fundOutput && fundOutput.value)}`,
|
|
1141
|
+
);
|
|
1142
|
+
}
|
|
1143
|
+
return fundOutput.value.sats;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
880
1146
|
private async CreateCetAdaptorAndRefundSigs(
|
|
881
1147
|
_dlcOffer: DlcOffer,
|
|
882
1148
|
_dlcAccept: DlcAccept,
|
|
@@ -922,7 +1188,7 @@ export default class BitcoinDlcProvider
|
|
|
922
1188
|
(dlcOffer.contractInfo as SingleContractInfo).contractDescriptor.type ===
|
|
923
1189
|
MessageType.ContractDescriptorV0
|
|
924
1190
|
) {
|
|
925
|
-
for (const
|
|
1191
|
+
for (const { oracleInfo } of contractOraclePairs) {
|
|
926
1192
|
if (oracleInfo.type !== MessageType.SingleOracleInfo) {
|
|
927
1193
|
throw new Error('Only SingleOracleInfo supported in this context');
|
|
928
1194
|
}
|
|
@@ -942,7 +1208,7 @@ export default class BitcoinDlcProvider
|
|
|
942
1208
|
fundVout: dlcTxs.fundTxVout,
|
|
943
1209
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
944
1210
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
945
|
-
fundInputAmount:
|
|
1211
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
946
1212
|
oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
|
|
947
1213
|
oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map(
|
|
948
1214
|
(nonce) => nonce.toString('hex'),
|
|
@@ -1004,8 +1270,7 @@ export default class BitcoinDlcProvider
|
|
|
1004
1270
|
fundVout: dlcTxs.fundTxVout,
|
|
1005
1271
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
1006
1272
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1007
|
-
fundInputAmount:
|
|
1008
|
-
dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
|
|
1273
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1009
1274
|
oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
|
|
1010
1275
|
oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map(
|
|
1011
1276
|
(nonce) => nonce.toString('hex'),
|
|
@@ -1043,7 +1308,7 @@ export default class BitcoinDlcProvider
|
|
|
1043
1308
|
fundVout: dlcTxs.fundTxVout,
|
|
1044
1309
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
1045
1310
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1046
|
-
fundInputAmount:
|
|
1311
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1047
1312
|
};
|
|
1048
1313
|
|
|
1049
1314
|
const refundSignature = Buffer.from(
|
|
@@ -1083,7 +1348,7 @@ export default class BitcoinDlcProvider
|
|
|
1083
1348
|
(dlcOffer.contractInfo as SingleContractInfo).contractDescriptor.type ===
|
|
1084
1349
|
MessageType.ContractDescriptorV0
|
|
1085
1350
|
) {
|
|
1086
|
-
for (const
|
|
1351
|
+
for (const { oracleInfo } of contractOraclePairs) {
|
|
1087
1352
|
if (oracleInfo.type !== MessageType.SingleOracleInfo) {
|
|
1088
1353
|
throw new Error('Only SingleOracleInfo supported in this context');
|
|
1089
1354
|
}
|
|
@@ -1120,8 +1385,7 @@ export default class BitcoinDlcProvider
|
|
|
1120
1385
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1121
1386
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
1122
1387
|
fundVout: dlcTxs.fundTxVout,
|
|
1123
|
-
fundInputAmount:
|
|
1124
|
-
dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
|
|
1388
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1125
1389
|
verifyRemote: isOfferer,
|
|
1126
1390
|
};
|
|
1127
1391
|
|
|
@@ -1145,7 +1409,7 @@ export default class BitcoinDlcProvider
|
|
|
1145
1409
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1146
1410
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
1147
1411
|
fundVout: dlcTxs.fundTxVout,
|
|
1148
|
-
fundInputAmount:
|
|
1412
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1149
1413
|
verifyRemote: isOfferer,
|
|
1150
1414
|
};
|
|
1151
1415
|
|
|
@@ -1209,8 +1473,7 @@ export default class BitcoinDlcProvider
|
|
|
1209
1473
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1210
1474
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
1211
1475
|
fundVout: dlcTxs.fundTxVout,
|
|
1212
|
-
fundInputAmount:
|
|
1213
|
-
dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
|
|
1476
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1214
1477
|
verifyRemote: isOfferer,
|
|
1215
1478
|
};
|
|
1216
1479
|
|
|
@@ -1235,7 +1498,7 @@ export default class BitcoinDlcProvider
|
|
|
1235
1498
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1236
1499
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
1237
1500
|
fundVout: dlcTxs.fundTxVout,
|
|
1238
|
-
fundInputAmount:
|
|
1501
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1239
1502
|
verifyRemote: isOfferer,
|
|
1240
1503
|
};
|
|
1241
1504
|
|
|
@@ -1276,15 +1539,34 @@ export default class BitcoinDlcProvider
|
|
|
1276
1539
|
|
|
1277
1540
|
const fundTxSigs = await Promise.all(
|
|
1278
1541
|
inputs.map(async (input, index) => {
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1542
|
+
// Use DLC-specific signing for DLC inputs
|
|
1543
|
+
if (input.isDlcInput()) {
|
|
1544
|
+
const dlcInputInfo = input.dlcInput!;
|
|
1545
|
+
|
|
1546
|
+
const dlcSignRequest: GetRawDlcFundingInputSignatureRequest = {
|
|
1547
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
1548
|
+
fundTxid: input.txid,
|
|
1549
|
+
fundVout: input.vout,
|
|
1550
|
+
fundAmount: input.value,
|
|
1551
|
+
localFundPubkey: dlcInputInfo.localFundPubkey,
|
|
1552
|
+
remoteFundPubkey: dlcInputInfo.remoteFundPubkey,
|
|
1553
|
+
privkey: inputPrivKeys[index],
|
|
1554
|
+
};
|
|
1555
|
+
|
|
1556
|
+
return (await this.GetRawDlcFundingInputSignature(dlcSignRequest))
|
|
1557
|
+
.hex;
|
|
1558
|
+
} else {
|
|
1559
|
+
// Use regular signing for non-DLC inputs
|
|
1560
|
+
const fundTxSignRequest: GetRawFundTxSignatureRequest = {
|
|
1561
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
1562
|
+
privkey: inputPrivKeys[index],
|
|
1563
|
+
prevTxId: input.txid,
|
|
1564
|
+
prevVout: input.vout,
|
|
1565
|
+
amount: input.value,
|
|
1566
|
+
};
|
|
1286
1567
|
|
|
1287
|
-
|
|
1568
|
+
return (await this.GetRawFundTxSignature(fundTxSignRequest)).hex;
|
|
1569
|
+
}
|
|
1288
1570
|
}),
|
|
1289
1571
|
);
|
|
1290
1572
|
|
|
@@ -1332,23 +1614,49 @@ export default class BitcoinDlcProvider
|
|
|
1332
1614
|
? (dlcAccept.fundingInputs[i] as FundingInput)
|
|
1333
1615
|
: (dlcOffer.fundingInputs[i] as FundingInput);
|
|
1334
1616
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1617
|
+
// Check if this is a DLC input and use appropriate verification
|
|
1618
|
+
if (fundingInput.dlcInput) {
|
|
1619
|
+
const dlcInput = fundingInput.dlcInput;
|
|
1620
|
+
const verifyDlcSigRequest: VerifyDlcFundingInputSignatureRequest = {
|
|
1621
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
1622
|
+
fundTxid: fundingInput.prevTx.txId.toString(),
|
|
1623
|
+
fundVout: fundingInput.prevTxVout,
|
|
1624
|
+
fundAmount: Number(
|
|
1625
|
+
fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
|
|
1626
|
+
),
|
|
1627
|
+
localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
|
|
1628
|
+
remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
|
|
1629
|
+
signature,
|
|
1630
|
+
pubkey,
|
|
1631
|
+
};
|
|
1344
1632
|
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1633
|
+
sigsValidity.push(
|
|
1634
|
+
(async () => {
|
|
1635
|
+
const response =
|
|
1636
|
+
await this.VerifyDlcFundingInputSignature(verifyDlcSigRequest);
|
|
1637
|
+
return response.valid;
|
|
1638
|
+
})(),
|
|
1639
|
+
);
|
|
1640
|
+
} else {
|
|
1641
|
+
// Regular input verification
|
|
1642
|
+
const verifyFundSigRequest: VerifyFundTxSignatureRequest = {
|
|
1643
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
1644
|
+
signature,
|
|
1645
|
+
pubkey,
|
|
1646
|
+
prevTxId: fundingInput.prevTx.txId.toString(),
|
|
1647
|
+
prevVout: fundingInput.prevTxVout,
|
|
1648
|
+
fundInputAmount:
|
|
1649
|
+
fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
|
|
1650
|
+
};
|
|
1651
|
+
|
|
1652
|
+
sigsValidity.push(
|
|
1653
|
+
(async () => {
|
|
1654
|
+
const response =
|
|
1655
|
+
await this.VerifyFundTxSignature(verifyFundSigRequest);
|
|
1656
|
+
return response.valid;
|
|
1657
|
+
})(),
|
|
1658
|
+
);
|
|
1659
|
+
}
|
|
1352
1660
|
}
|
|
1353
1661
|
|
|
1354
1662
|
const areSigsValid = (await Promise.all(sigsValidity)).every((b) => b);
|
|
@@ -1376,6 +1684,9 @@ export default class BitcoinDlcProvider
|
|
|
1376
1684
|
|
|
1377
1685
|
let fundTxHex = dlcTxs.fundTx.serialize().toString('hex');
|
|
1378
1686
|
|
|
1687
|
+
// Track processed DLC inputs to avoid double processing
|
|
1688
|
+
const processedDlcInputs = new Set<string>();
|
|
1689
|
+
|
|
1379
1690
|
await asyncForEach(
|
|
1380
1691
|
witnessElements,
|
|
1381
1692
|
async (witnessElement: ScriptWitnessV0, i: number) => {
|
|
@@ -1383,16 +1694,49 @@ export default class BitcoinDlcProvider
|
|
|
1383
1694
|
const pubkey = witnessElement[1].witness.toString('hex');
|
|
1384
1695
|
|
|
1385
1696
|
const fundingInput = fundingInputs[i] as FundingInput;
|
|
1697
|
+
const inputKey = `${fundingInput.prevTx.txId.toString()}:${fundingInput.prevTxVout}`;
|
|
1386
1698
|
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1699
|
+
// Check if this is a DLC input
|
|
1700
|
+
if (fundingInput.dlcInput && !processedDlcInputs.has(inputKey)) {
|
|
1701
|
+
// Mark as processed to avoid double processing
|
|
1702
|
+
processedDlcInputs.add(inputKey);
|
|
1703
|
+
|
|
1704
|
+
// For DLC inputs, use SignDlcFundingInput which properly combines signatures
|
|
1705
|
+
// This is the correct CFD method for DLC funding inputs
|
|
1706
|
+
const dlcInput = fundingInput.dlcInput;
|
|
1707
|
+
|
|
1708
|
+
// Find the private key for this DLC input
|
|
1709
|
+
const privateKey = await this.findDlcFundingPrivateKey(
|
|
1710
|
+
dlcInput.localFundPubkey.toString('hex'),
|
|
1711
|
+
dlcInput.remoteFundPubkey.toString('hex'),
|
|
1712
|
+
);
|
|
1713
|
+
|
|
1714
|
+
const signDlcRequest: SignDlcFundingInputRequest = {
|
|
1715
|
+
fundTxHex,
|
|
1716
|
+
fundTxid: fundingInput.prevTx.txId.toString(),
|
|
1717
|
+
fundVout: fundingInput.prevTxVout,
|
|
1718
|
+
fundAmount: Number(
|
|
1719
|
+
fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
|
|
1720
|
+
),
|
|
1721
|
+
localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
|
|
1722
|
+
remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
|
|
1723
|
+
localPrivkey: privateKey,
|
|
1724
|
+
remoteSignature: signature,
|
|
1725
|
+
};
|
|
1726
|
+
fundTxHex = (await this.SignDlcFundingInput(signDlcRequest)).hex;
|
|
1727
|
+
} else if (!fundingInput.dlcInput) {
|
|
1728
|
+
// Regular input - use standard signing
|
|
1729
|
+
const addSignRequest: AddSignatureToFundTransactionRequest = {
|
|
1730
|
+
fundTxHex,
|
|
1731
|
+
signature,
|
|
1732
|
+
prevTxId: fundingInput.prevTx.txId.toString(),
|
|
1733
|
+
prevVout: fundingInput.prevTxVout,
|
|
1734
|
+
pubkey,
|
|
1735
|
+
};
|
|
1736
|
+
fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
|
|
1737
|
+
.hex;
|
|
1738
|
+
}
|
|
1739
|
+
// If it's a DLC input but already processed, skip it
|
|
1396
1740
|
},
|
|
1397
1741
|
);
|
|
1398
1742
|
|
|
@@ -1570,7 +1914,7 @@ Payout Group not found',
|
|
|
1570
1914
|
index = 0;
|
|
1571
1915
|
groupLength = 0;
|
|
1572
1916
|
|
|
1573
|
-
for (const [
|
|
1917
|
+
for (const [, payoutGroup] of payoutGroups.entries()) {
|
|
1574
1918
|
groupIndex = payoutGroup.groups.findIndex((group) => {
|
|
1575
1919
|
return group.every((msg, j) => msg === outcomesFormatted[j]);
|
|
1576
1920
|
});
|
|
@@ -1794,7 +2138,7 @@ Payout Group not found even with brute force search',
|
|
|
1794
2138
|
oracleSignatures: oracleAttestation.signatures.map((sig) =>
|
|
1795
2139
|
sig.toString('hex'),
|
|
1796
2140
|
),
|
|
1797
|
-
fundInputAmount:
|
|
2141
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1798
2142
|
adaptorSignature: isOfferer
|
|
1799
2143
|
? dlcAccept.cetAdaptorSignatures.sigs[
|
|
1800
2144
|
outcomeIndex
|
|
@@ -1824,7 +2168,7 @@ Payout Group not found even with brute force search',
|
|
|
1824
2168
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
1825
2169
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1826
2170
|
oracleSignatures: oracleSignatures.map((sig) => sig.toString('hex')),
|
|
1827
|
-
fundInputAmount:
|
|
2171
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1828
2172
|
adaptorSignature: isOfferer
|
|
1829
2173
|
? dlcAccept.cetAdaptorSignatures.sigs[
|
|
1830
2174
|
outcomeIndex
|
|
@@ -2044,7 +2388,7 @@ Payout Group not found even with brute force search',
|
|
|
2044
2388
|
hex: paymentVariant.redeem.output.toString('hex'),
|
|
2045
2389
|
type: 'redeem_script',
|
|
2046
2390
|
},
|
|
2047
|
-
amount: Number(
|
|
2391
|
+
amount: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
2048
2392
|
hashType: 'p2wsh',
|
|
2049
2393
|
sighashType: 'all',
|
|
2050
2394
|
sighashAnyoneCanPay: false,
|
|
@@ -2159,7 +2503,7 @@ Payout Group not found even with brute force search',
|
|
|
2159
2503
|
hashType: 'p2wsh',
|
|
2160
2504
|
sighashType: 'all',
|
|
2161
2505
|
sighashAnyoneCanPay: false,
|
|
2162
|
-
amount: Number(
|
|
2506
|
+
amount: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
2163
2507
|
},
|
|
2164
2508
|
};
|
|
2165
2509
|
|
|
@@ -2229,6 +2573,7 @@ Payout Group not found even with brute force search',
|
|
|
2229
2573
|
* @param feeRatePerVb Fee rate in satoshi per virtual byte that both sides use to compute fees in funding tx
|
|
2230
2574
|
* @param cetLocktime The nLockTime to be put on CETs
|
|
2231
2575
|
* @param refundLocktime The nLockTime to be put on the refund transaction
|
|
2576
|
+
* @param fixedInputs Optional fixed inputs - can be Input[] for regular inputs or FundingInput[] for DLC inputs
|
|
2232
2577
|
* @returns {Promise<DlcOffer>}
|
|
2233
2578
|
*/
|
|
2234
2579
|
async createDlcOffer(
|
|
@@ -2237,7 +2582,8 @@ Payout Group not found even with brute force search',
|
|
|
2237
2582
|
feeRatePerVb: bigint,
|
|
2238
2583
|
cetLocktime: number,
|
|
2239
2584
|
refundLocktime: number,
|
|
2240
|
-
fixedInputs?: Input[],
|
|
2585
|
+
fixedInputs?: Input[] | FundingInput[],
|
|
2586
|
+
inputSupplementationMode?: InputSupplementationMode,
|
|
2241
2587
|
): Promise<DlcOffer> {
|
|
2242
2588
|
contractInfo.validate();
|
|
2243
2589
|
const network = await this.getConnectedNetwork();
|
|
@@ -2247,18 +2593,56 @@ Payout Group not found even with brute force search',
|
|
|
2247
2593
|
// Generate a random 32-byte temporary contract ID
|
|
2248
2594
|
dlcOffer.temporaryContractId = crypto.randomBytes(32);
|
|
2249
2595
|
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
)
|
|
2596
|
+
// Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
|
|
2597
|
+
const hasFundingInputs =
|
|
2598
|
+
fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
|
|
2599
|
+
|
|
2600
|
+
let fundingPubKey: Buffer;
|
|
2601
|
+
let payoutSPK: Buffer;
|
|
2602
|
+
let payoutSerialId: bigint;
|
|
2603
|
+
let _fundingInputs: FundingInput[];
|
|
2604
|
+
let changeSPK: Buffer;
|
|
2605
|
+
let changeSerialId: bigint;
|
|
2606
|
+
|
|
2607
|
+
if (hasFundingInputs) {
|
|
2608
|
+
// Handle FundingInput[] directly (for DLC inputs)
|
|
2609
|
+
const fundingInputs = fixedInputs as FundingInput[];
|
|
2610
|
+
|
|
2611
|
+
// Generate addresses directly since we're bypassing Initialize()
|
|
2612
|
+
const payoutAddress: Address =
|
|
2613
|
+
await this.client.wallet.getUnusedAddress(false);
|
|
2614
|
+
payoutSPK = address.toOutputScript(payoutAddress.address, network);
|
|
2615
|
+
|
|
2616
|
+
const changeAddress: Address =
|
|
2617
|
+
await this.client.wallet.getUnusedAddress(true);
|
|
2618
|
+
changeSPK = address.toOutputScript(changeAddress.address, network);
|
|
2619
|
+
|
|
2620
|
+
const fundingAddress: Address =
|
|
2621
|
+
await this.client.wallet.getUnusedAddress(false);
|
|
2622
|
+
fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
2623
|
+
|
|
2624
|
+
if (fundingAddress.address === payoutAddress.address)
|
|
2625
|
+
throw Error('Address reuse');
|
|
2626
|
+
|
|
2627
|
+
payoutSerialId = generateSerialId();
|
|
2628
|
+
changeSerialId = generateSerialId();
|
|
2629
|
+
_fundingInputs = fundingInputs;
|
|
2630
|
+
} else {
|
|
2631
|
+
// Handle Input[] through existing Initialize() flow
|
|
2632
|
+
const initResult = await this.Initialize(
|
|
2633
|
+
offerCollateralSatoshis,
|
|
2634
|
+
feeRatePerVb,
|
|
2635
|
+
fixedInputs as Input[],
|
|
2636
|
+
inputSupplementationMode || InputSupplementationMode.Required,
|
|
2637
|
+
);
|
|
2638
|
+
|
|
2639
|
+
fundingPubKey = initResult.fundingPubKey;
|
|
2640
|
+
payoutSPK = initResult.payoutSPK;
|
|
2641
|
+
payoutSerialId = initResult.payoutSerialId;
|
|
2642
|
+
_fundingInputs = initResult.fundingInputs;
|
|
2643
|
+
changeSPK = initResult.changeSPK;
|
|
2644
|
+
changeSerialId = initResult.changeSerialId;
|
|
2645
|
+
}
|
|
2262
2646
|
|
|
2263
2647
|
_fundingInputs.forEach((input) =>
|
|
2264
2648
|
assert(
|
|
@@ -2298,6 +2682,10 @@ Payout Group not found even with brute force search',
|
|
|
2298
2682
|
dlcOffer.cetLocktime = cetLocktime;
|
|
2299
2683
|
dlcOffer.refundLocktime = refundLocktime;
|
|
2300
2684
|
|
|
2685
|
+
if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
|
|
2686
|
+
dlcOffer.markAsSingleFunded();
|
|
2687
|
+
}
|
|
2688
|
+
|
|
2301
2689
|
assert(
|
|
2302
2690
|
(() => {
|
|
2303
2691
|
const finalizer = new DualFundingTxFinalizer(
|
|
@@ -2400,6 +2788,10 @@ Payout Group not found even with brute force search',
|
|
|
2400
2788
|
dlcOffer.cetLocktime = cetLocktime;
|
|
2401
2789
|
dlcOffer.refundLocktime = refundLocktime;
|
|
2402
2790
|
|
|
2791
|
+
if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
|
|
2792
|
+
dlcOffer.markAsSingleFunded();
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2403
2795
|
assert(
|
|
2404
2796
|
(() => {
|
|
2405
2797
|
const finalizer = new DualFundingTxFinalizer(
|
|
@@ -2429,14 +2821,14 @@ Payout Group not found even with brute force search',
|
|
|
2429
2821
|
}
|
|
2430
2822
|
|
|
2431
2823
|
/**
|
|
2432
|
-
* Accept DLC Offer
|
|
2824
|
+
* Accept DLC Offer (supports single-funded DLCs when accept collateral is 0)
|
|
2433
2825
|
* @param _dlcOffer Dlc Offer Message
|
|
2434
2826
|
* @param fixedInputs Optional inputs to use for Funding Inputs
|
|
2435
2827
|
* @returns {Promise<AcceptDlcOfferResponse}
|
|
2436
2828
|
*/
|
|
2437
2829
|
async acceptDlcOffer(
|
|
2438
2830
|
_dlcOffer: DlcOffer,
|
|
2439
|
-
fixedInputs?: Input[],
|
|
2831
|
+
fixedInputs?: Input[] | FundingInput[],
|
|
2440
2832
|
): Promise<AcceptDlcOfferResponse> {
|
|
2441
2833
|
const { dlcOffer } = checkTypes({ _dlcOffer });
|
|
2442
2834
|
dlcOffer.validate();
|
|
@@ -2450,37 +2842,130 @@ Payout Group not found even with brute force search',
|
|
|
2450
2842
|
'acceptCollaterialSatoshis should equal totalCollateral - offerCollateralSatoshis',
|
|
2451
2843
|
);
|
|
2452
2844
|
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
changeSerialId,
|
|
2460
|
-
} = await this.Initialize(
|
|
2461
|
-
acceptCollateralSatoshis,
|
|
2462
|
-
dlcOffer.feeRatePerVb,
|
|
2463
|
-
fixedInputs,
|
|
2464
|
-
);
|
|
2845
|
+
let fundingPubKey: Buffer;
|
|
2846
|
+
let payoutSPK: Buffer;
|
|
2847
|
+
let payoutSerialId: bigint;
|
|
2848
|
+
let fundingInputs: FundingInput[];
|
|
2849
|
+
let changeSPK: Buffer;
|
|
2850
|
+
let changeSerialId: bigint;
|
|
2465
2851
|
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
);
|
|
2852
|
+
if (acceptCollateralSatoshis === BigInt(0)) {
|
|
2853
|
+
// Single-funded DLC: accept side provides no funding
|
|
2854
|
+
const network = await this.getConnectedNetwork();
|
|
2470
2855
|
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
),
|
|
2476
|
-
);
|
|
2856
|
+
// Still need payout address for receiving DLC outcomes
|
|
2857
|
+
const payoutAddress: Address =
|
|
2858
|
+
await this.client.wallet.getUnusedAddress(false);
|
|
2859
|
+
payoutSPK = address.toOutputScript(payoutAddress.address, network);
|
|
2477
2860
|
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2861
|
+
// Generate funding pubkey for DLC contract construction
|
|
2862
|
+
const fundingAddress: Address =
|
|
2863
|
+
await this.client.wallet.getUnusedAddress(false);
|
|
2864
|
+
fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
2481
2865
|
|
|
2482
|
-
|
|
2483
|
-
|
|
2866
|
+
// Generate change address (even though not used)
|
|
2867
|
+
const changeAddress: Address =
|
|
2868
|
+
await this.client.wallet.getUnusedAddress(true);
|
|
2869
|
+
changeSPK = address.toOutputScript(changeAddress.address, network);
|
|
2870
|
+
|
|
2871
|
+
if (fundingAddress.address === payoutAddress.address)
|
|
2872
|
+
throw Error('Address reuse');
|
|
2873
|
+
|
|
2874
|
+
// Generate serial IDs
|
|
2875
|
+
payoutSerialId = generateSerialId();
|
|
2876
|
+
changeSerialId = generateSerialId();
|
|
2877
|
+
|
|
2878
|
+
// No funding inputs for single-funded DLC
|
|
2879
|
+
fundingInputs = [];
|
|
2880
|
+
} else {
|
|
2881
|
+
// Standard DLC: accept side provides funding
|
|
2882
|
+
|
|
2883
|
+
// Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
|
|
2884
|
+
const hasFundingInputs =
|
|
2885
|
+
fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
|
|
2886
|
+
|
|
2887
|
+
let initResult: InitializeResponse;
|
|
2888
|
+
|
|
2889
|
+
if (hasFundingInputs) {
|
|
2890
|
+
// Handle FundingInput[] directly (for DLC inputs)
|
|
2891
|
+
const fundingInputs = fixedInputs as FundingInput[];
|
|
2892
|
+
const network = await this.getConnectedNetwork();
|
|
2893
|
+
|
|
2894
|
+
// Generate addresses directly since we're bypassing Initialize()
|
|
2895
|
+
const payoutAddress: Address =
|
|
2896
|
+
await this.client.wallet.getUnusedAddress(false);
|
|
2897
|
+
const payoutSPK = address.toOutputScript(
|
|
2898
|
+
payoutAddress.address,
|
|
2899
|
+
network,
|
|
2900
|
+
);
|
|
2901
|
+
|
|
2902
|
+
const changeAddress: Address =
|
|
2903
|
+
await this.client.wallet.getUnusedAddress(true);
|
|
2904
|
+
const changeSPK = address.toOutputScript(
|
|
2905
|
+
changeAddress.address,
|
|
2906
|
+
network,
|
|
2907
|
+
);
|
|
2908
|
+
|
|
2909
|
+
const fundingAddress: Address =
|
|
2910
|
+
await this.client.wallet.getUnusedAddress(false);
|
|
2911
|
+
const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
2912
|
+
|
|
2913
|
+
if (fundingAddress.address === payoutAddress.address)
|
|
2914
|
+
throw Error('Address reuse');
|
|
2915
|
+
|
|
2916
|
+
const payoutSerialId = generateSerialId();
|
|
2917
|
+
const changeSerialId = generateSerialId();
|
|
2918
|
+
|
|
2919
|
+
initResult = {
|
|
2920
|
+
fundingPubKey,
|
|
2921
|
+
payoutSPK,
|
|
2922
|
+
payoutSerialId,
|
|
2923
|
+
fundingInputs,
|
|
2924
|
+
changeSPK,
|
|
2925
|
+
changeSerialId,
|
|
2926
|
+
};
|
|
2927
|
+
} else {
|
|
2928
|
+
// Handle Input[] through existing Initialize() flow
|
|
2929
|
+
// Use InputSupplementationMode.None when fixed inputs are provided
|
|
2930
|
+
// to avoid wallet lookup issues with unusual addresses
|
|
2931
|
+
const supplementationMode =
|
|
2932
|
+
fixedInputs && fixedInputs.length > 0
|
|
2933
|
+
? InputSupplementationMode.None
|
|
2934
|
+
: InputSupplementationMode.Required;
|
|
2935
|
+
|
|
2936
|
+
initResult = await this.Initialize(
|
|
2937
|
+
acceptCollateralSatoshis,
|
|
2938
|
+
dlcOffer.feeRatePerVb,
|
|
2939
|
+
fixedInputs as Input[],
|
|
2940
|
+
supplementationMode,
|
|
2941
|
+
);
|
|
2942
|
+
}
|
|
2943
|
+
|
|
2944
|
+
fundingPubKey = initResult.fundingPubKey;
|
|
2945
|
+
payoutSPK = initResult.payoutSPK;
|
|
2946
|
+
payoutSerialId = initResult.payoutSerialId;
|
|
2947
|
+
changeSPK = initResult.changeSPK;
|
|
2948
|
+
changeSerialId = initResult.changeSerialId;
|
|
2949
|
+
|
|
2950
|
+
const _fundingInputs = initResult.fundingInputs;
|
|
2951
|
+
|
|
2952
|
+
_fundingInputs.forEach((input) =>
|
|
2953
|
+
assert(
|
|
2954
|
+
input.type === MessageType.FundingInput,
|
|
2955
|
+
'FundingInput must be V0',
|
|
2956
|
+
),
|
|
2957
|
+
);
|
|
2958
|
+
|
|
2959
|
+
fundingInputs = _fundingInputs.map((input) => input as FundingInput);
|
|
2960
|
+
|
|
2961
|
+
fundingInputs.sort(
|
|
2962
|
+
(a, b) => Number(a.inputSerialId) - Number(b.inputSerialId),
|
|
2963
|
+
);
|
|
2964
|
+
}
|
|
2965
|
+
|
|
2966
|
+
assert(
|
|
2967
|
+
Buffer.compare(dlcOffer.fundingPubkey, fundingPubKey) !== 0,
|
|
2968
|
+
'DlcOffer and DlcAccept FundingPubKey cannot be the same',
|
|
2484
2969
|
);
|
|
2485
2970
|
|
|
2486
2971
|
const dlcAccept = new DlcAccept();
|
|
@@ -2516,27 +3001,32 @@ Payout Group not found even with brute force search',
|
|
|
2516
3001
|
'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique',
|
|
2517
3002
|
);
|
|
2518
3003
|
|
|
3004
|
+
if (dlcOffer.singleFunded) dlcAccept.markAsSingleFunded();
|
|
3005
|
+
|
|
2519
3006
|
dlcAccept.validate();
|
|
2520
3007
|
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
3008
|
+
// Only validate funding requirements if accept side is providing collateral
|
|
3009
|
+
if (acceptCollateralSatoshis > BigInt(0)) {
|
|
3010
|
+
assert(
|
|
3011
|
+
(() => {
|
|
3012
|
+
const finalizer = new DualFundingTxFinalizer(
|
|
3013
|
+
dlcOffer.fundingInputs,
|
|
3014
|
+
dlcOffer.payoutSpk,
|
|
3015
|
+
dlcOffer.changeSpk,
|
|
3016
|
+
dlcAccept.fundingInputs,
|
|
3017
|
+
dlcAccept.payoutSpk,
|
|
3018
|
+
dlcAccept.changeSpk,
|
|
3019
|
+
dlcOffer.feeRatePerVb,
|
|
3020
|
+
);
|
|
3021
|
+
const funding = fundingInputs.reduce((total, input) => {
|
|
3022
|
+
return total + input.prevTx.outputs[input.prevTxVout].value.sats;
|
|
3023
|
+
}, BigInt(0));
|
|
2535
3024
|
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
3025
|
+
return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
|
|
3026
|
+
})(),
|
|
3027
|
+
'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees',
|
|
3028
|
+
);
|
|
3029
|
+
}
|
|
2540
3030
|
|
|
2541
3031
|
const { dlcTransactions, messagesList } = await this.createDlcTxs(
|
|
2542
3032
|
dlcOffer,
|
|
@@ -2725,13 +3215,9 @@ Payout Group not found even with brute force search',
|
|
|
2725
3215
|
* @returns {Promise<SignDlcAcceptResponse}
|
|
2726
3216
|
*/
|
|
2727
3217
|
async signDlcAccept(
|
|
2728
|
-
|
|
2729
|
-
|
|
3218
|
+
dlcOffer: DlcOffer,
|
|
3219
|
+
dlcAccept: DlcAccept,
|
|
2730
3220
|
): Promise<SignDlcAcceptResponse> {
|
|
2731
|
-
const { dlcOffer, dlcAccept } = checkTypes({
|
|
2732
|
-
_dlcOffer,
|
|
2733
|
-
_dlcAccept,
|
|
2734
|
-
});
|
|
2735
3221
|
dlcOffer.validate();
|
|
2736
3222
|
dlcAccept.validate();
|
|
2737
3223
|
|
|
@@ -3144,28 +3630,46 @@ Payout Group not found even with brute force search',
|
|
|
3144
3630
|
// Initiate and build PSBT
|
|
3145
3631
|
let inputs: Input[] = _inputs;
|
|
3146
3632
|
if (!_inputs) {
|
|
3147
|
-
const tempInputs = await this.
|
|
3633
|
+
const tempInputs = await this.GetInputsForAmountWithMode(
|
|
3148
3634
|
[BigInt(20000)],
|
|
3149
3635
|
dlcOffer.feeRatePerVb,
|
|
3150
|
-
_inputs,
|
|
3636
|
+
_inputs || [],
|
|
3637
|
+
InputSupplementationMode.Required,
|
|
3151
3638
|
);
|
|
3152
3639
|
_inputs = tempInputs;
|
|
3153
3640
|
}
|
|
3154
|
-
inputs
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3641
|
+
// Ensure all inputs have derivation paths by fetching from wallet
|
|
3642
|
+
const inputsWithPaths: { input: Input; address: Address }[] =
|
|
3643
|
+
await Promise.all(
|
|
3644
|
+
_inputs.map(async (input) => {
|
|
3645
|
+
const address: Address = await this.getMethod('getWalletAddress')(
|
|
3646
|
+
input.address,
|
|
3647
|
+
);
|
|
3648
|
+
const inputWithPath = new Input(
|
|
3649
|
+
input.txid,
|
|
3650
|
+
input.vout,
|
|
3651
|
+
input.address,
|
|
3652
|
+
input.amount,
|
|
3653
|
+
input.value,
|
|
3654
|
+
input.derivationPath || address.derivationPath, // Use derivationPath from wallet if not set
|
|
3655
|
+
input.maxWitnessLength,
|
|
3656
|
+
input.redeemScript,
|
|
3657
|
+
input.inputSerialId || generateSerialId(),
|
|
3658
|
+
input.scriptPubKey,
|
|
3659
|
+
input.label,
|
|
3660
|
+
input.confirmations,
|
|
3661
|
+
input.spendable,
|
|
3662
|
+
input.solvable,
|
|
3663
|
+
input.safe,
|
|
3664
|
+
input.dlcInput,
|
|
3665
|
+
);
|
|
3666
|
+
return { input: inputWithPath, address };
|
|
3667
|
+
}),
|
|
3668
|
+
);
|
|
3161
3669
|
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
|
|
3165
|
-
input.address,
|
|
3166
|
-
);
|
|
3167
|
-
return Buffer.from(address.publicKey, 'hex');
|
|
3168
|
-
}),
|
|
3670
|
+
inputs = inputsWithPaths.map((item) => item.input);
|
|
3671
|
+
const pubkeys: Buffer[] = inputsWithPaths.map((item) =>
|
|
3672
|
+
Buffer.from(item.address.publicKey, 'hex'),
|
|
3169
3673
|
);
|
|
3170
3674
|
|
|
3171
3675
|
const fundingInputSerialId = generateSerialId();
|
|
@@ -3179,7 +3683,7 @@ Payout Group not found even with brute force search',
|
|
|
3179
3683
|
sequence: 0,
|
|
3180
3684
|
witnessUtxo: {
|
|
3181
3685
|
script: paymentVariant.output,
|
|
3182
|
-
value: Number(
|
|
3686
|
+
value: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
3183
3687
|
},
|
|
3184
3688
|
witnessScript: paymentVariant.redeem.output,
|
|
3185
3689
|
inputSerialId: fundingInputSerialId,
|
|
@@ -3217,7 +3721,7 @@ Payout Group not found even with brute force search',
|
|
|
3217
3721
|
);
|
|
3218
3722
|
|
|
3219
3723
|
// add to psbt
|
|
3220
|
-
sortedPsbtInputs.forEach((input
|
|
3724
|
+
sortedPsbtInputs.forEach((input) => psbt.addInput(input));
|
|
3221
3725
|
|
|
3222
3726
|
const fundingInputs: FundingInput[] = await Promise.all(
|
|
3223
3727
|
inputs.map(async (input) => {
|
|
@@ -3282,6 +3786,9 @@ Payout Group not found even with brute force search',
|
|
|
3282
3786
|
if (i === fundingInputIndex) return;
|
|
3283
3787
|
|
|
3284
3788
|
// derive keypair
|
|
3789
|
+
if (!input.derivationPath) {
|
|
3790
|
+
throw new Error(`Missing derivation path for input ${i}`);
|
|
3791
|
+
}
|
|
3285
3792
|
const keyPair = await this.getMethod('keyPair')(input.derivationPath);
|
|
3286
3793
|
psbt.signInput(i, keyPair);
|
|
3287
3794
|
}),
|
|
@@ -3581,14 +4088,14 @@ Payout Group not found even with brute force search',
|
|
|
3581
4088
|
sequence: 0,
|
|
3582
4089
|
witnessUtxo: {
|
|
3583
4090
|
script: paymentVariant.output,
|
|
3584
|
-
value: Number(
|
|
4091
|
+
value: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
3585
4092
|
},
|
|
3586
4093
|
witnessScript: paymentVariant.redeem.output,
|
|
3587
4094
|
inputSerialId: dlcClose.fundInputSerialId,
|
|
3588
4095
|
});
|
|
3589
4096
|
|
|
3590
4097
|
// add all dlc close inputs
|
|
3591
|
-
dlcClose.fundingInputs.forEach((input
|
|
4098
|
+
dlcClose.fundingInputs.forEach((input) => {
|
|
3592
4099
|
psbtInputs.push({
|
|
3593
4100
|
hash: input.prevTx.txId.serialize(),
|
|
3594
4101
|
index: input.prevTxVout,
|
|
@@ -3643,7 +4150,7 @@ Payout Group not found even with brute force search',
|
|
|
3643
4150
|
});
|
|
3644
4151
|
|
|
3645
4152
|
// add to psbt
|
|
3646
|
-
sortedPsbtInputs.forEach((input
|
|
4153
|
+
sortedPsbtInputs.forEach((input) => psbt.addInput(input));
|
|
3647
4154
|
|
|
3648
4155
|
const offerer = await this.isOfferer(dlcOffer, dlcAccept);
|
|
3649
4156
|
|
|
@@ -3839,6 +4346,38 @@ Payout Group not found even with brute force search',
|
|
|
3839
4346
|
return this._cfdDlcJs.VerifyRefundTxSignature(jsonObject);
|
|
3840
4347
|
}
|
|
3841
4348
|
|
|
4349
|
+
async CreateSplicedDlcTransactions(
|
|
4350
|
+
jsonObject: CreateSplicedDlcTransactionsRequest,
|
|
4351
|
+
): Promise<CreateSplicedDlcTransactionsResponse> {
|
|
4352
|
+
await this.CfdLoaded();
|
|
4353
|
+
|
|
4354
|
+
return this._cfdDlcJs.CreateSplicedDlcTransactions(jsonObject);
|
|
4355
|
+
}
|
|
4356
|
+
|
|
4357
|
+
async GetRawDlcFundingInputSignature(
|
|
4358
|
+
jsonObject: GetRawDlcFundingInputSignatureRequest,
|
|
4359
|
+
): Promise<GetRawDlcFundingInputSignatureResponse> {
|
|
4360
|
+
await this.CfdLoaded();
|
|
4361
|
+
|
|
4362
|
+
return this._cfdDlcJs.GetRawDlcFundingInputSignature(jsonObject);
|
|
4363
|
+
}
|
|
4364
|
+
|
|
4365
|
+
async SignDlcFundingInput(
|
|
4366
|
+
jsonObject: SignDlcFundingInputRequest,
|
|
4367
|
+
): Promise<SignDlcFundingInputResponse> {
|
|
4368
|
+
await this.CfdLoaded();
|
|
4369
|
+
|
|
4370
|
+
return this._cfdDlcJs.SignDlcFundingInput(jsonObject);
|
|
4371
|
+
}
|
|
4372
|
+
|
|
4373
|
+
async VerifyDlcFundingInputSignature(
|
|
4374
|
+
jsonObject: VerifyDlcFundingInputSignatureRequest,
|
|
4375
|
+
): Promise<VerifyDlcFundingInputSignatureResponse> {
|
|
4376
|
+
await this.CfdLoaded();
|
|
4377
|
+
|
|
4378
|
+
return this._cfdDlcJs.VerifyDlcFundingInputSignature(jsonObject);
|
|
4379
|
+
}
|
|
4380
|
+
|
|
3842
4381
|
async fundingInputToInput(
|
|
3843
4382
|
_input: FundingInput,
|
|
3844
4383
|
findDerivationPath = true,
|
|
@@ -3861,21 +4400,36 @@ Payout Group not found even with brute force search',
|
|
|
3861
4400
|
}
|
|
3862
4401
|
}
|
|
3863
4402
|
|
|
3864
|
-
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
4403
|
+
// Check if this FundingInput has DLC input information to preserve
|
|
4404
|
+
const dlcInputMessage = input.dlcInput;
|
|
4405
|
+
|
|
4406
|
+
let dlcInputInfo: DlcInputInfo | undefined;
|
|
4407
|
+
if (dlcInputMessage) {
|
|
4408
|
+
dlcInputInfo = {
|
|
4409
|
+
localFundPubkey: dlcInputMessage.localFundPubkey.toString('hex'),
|
|
4410
|
+
remoteFundPubkey: dlcInputMessage.remoteFundPubkey.toString('hex'),
|
|
4411
|
+
contractId: dlcInputMessage.contractId.toString('hex'),
|
|
4412
|
+
};
|
|
4413
|
+
}
|
|
4414
|
+
|
|
4415
|
+
return new Input(
|
|
4416
|
+
prevTx.txId.toString(),
|
|
4417
|
+
input.prevTxVout,
|
|
4418
|
+
_address,
|
|
4419
|
+
prevTxOut.value.bitcoin,
|
|
4420
|
+
Number(prevTxOut.value.sats),
|
|
3870
4421
|
derivationPath,
|
|
3871
|
-
|
|
3872
|
-
redeemScript
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
4422
|
+
input.maxWitnessLen,
|
|
4423
|
+
input.redeemScript ? input.redeemScript.toString('hex') : '',
|
|
4424
|
+
input.inputSerialId,
|
|
4425
|
+
scriptPubKey.toString('hex'),
|
|
4426
|
+
undefined, // label
|
|
4427
|
+
undefined, // confirmations
|
|
4428
|
+
undefined, // spendable
|
|
4429
|
+
undefined, // solvable
|
|
4430
|
+
undefined, // safe
|
|
4431
|
+
dlcInputInfo, // Preserve DLC input information if present
|
|
4432
|
+
);
|
|
3879
4433
|
}
|
|
3880
4434
|
|
|
3881
4435
|
async inputToFundingInput(input: Input): Promise<FundingInput> {
|
|
@@ -3910,12 +4464,155 @@ Payout Group not found even with brute force search',
|
|
|
3910
4464
|
? input.inputSerialId
|
|
3911
4465
|
: generateSerialId();
|
|
3912
4466
|
|
|
4467
|
+
// Preserve DLC input information if present
|
|
4468
|
+
if (input.isDlcInput()) {
|
|
4469
|
+
const dlcInputInfo = input.dlcInput!;
|
|
4470
|
+
const dlcInput = new DlcInput();
|
|
4471
|
+
dlcInput.localFundPubkey = Buffer.from(
|
|
4472
|
+
dlcInputInfo.localFundPubkey,
|
|
4473
|
+
'hex',
|
|
4474
|
+
);
|
|
4475
|
+
dlcInput.remoteFundPubkey = Buffer.from(
|
|
4476
|
+
dlcInputInfo.remoteFundPubkey,
|
|
4477
|
+
'hex',
|
|
4478
|
+
);
|
|
4479
|
+
dlcInput.contractId = Buffer.alloc(32); // Placeholder contract ID
|
|
4480
|
+
|
|
4481
|
+
fundingInput.dlcInput = dlcInput;
|
|
4482
|
+
}
|
|
4483
|
+
|
|
3913
4484
|
return fundingInput;
|
|
3914
4485
|
}
|
|
3915
4486
|
|
|
3916
4487
|
async getConnectedNetwork(): Promise<BitcoinNetwork> {
|
|
3917
4488
|
return this._network;
|
|
3918
4489
|
}
|
|
4490
|
+
|
|
4491
|
+
/**
|
|
4492
|
+
* Calculate the maximum collateral possible with given inputs
|
|
4493
|
+
* @param inputs Array of Input objects to use for funding
|
|
4494
|
+
* @param feeRatePerVb Fee rate in satoshis per virtual byte
|
|
4495
|
+
* @param contractCount Number of DLC contracts (default: 1)
|
|
4496
|
+
* @returns Maximum collateral amount in satoshis
|
|
4497
|
+
*/
|
|
4498
|
+
async calculateMaxCollateral(
|
|
4499
|
+
inputs: Input[],
|
|
4500
|
+
feeRatePerVb: bigint,
|
|
4501
|
+
contractCount: number = 1,
|
|
4502
|
+
): Promise<bigint> {
|
|
4503
|
+
if (inputs.length === 0) {
|
|
4504
|
+
return BigInt(0);
|
|
4505
|
+
}
|
|
4506
|
+
|
|
4507
|
+
try {
|
|
4508
|
+
// Convert Input[] to FundingInput[]
|
|
4509
|
+
const fundingInputs = await Promise.all(
|
|
4510
|
+
inputs.map((input) => this.inputToFundingInput(input)),
|
|
4511
|
+
);
|
|
4512
|
+
|
|
4513
|
+
// Use node-dlc's calculateMaxCollateral function
|
|
4514
|
+
// For single-funded DLC, pass only offerer inputs and fee rate
|
|
4515
|
+
return BatchDlcTxBuilder.calculateMaxCollateral(
|
|
4516
|
+
fundingInputs,
|
|
4517
|
+
feeRatePerVb,
|
|
4518
|
+
contractCount,
|
|
4519
|
+
);
|
|
4520
|
+
} catch (error) {
|
|
4521
|
+
// If calculation fails, return 0 to indicate insufficient funds
|
|
4522
|
+
console.warn('calculateMaxCollateral failed:', error);
|
|
4523
|
+
return BigInt(0);
|
|
4524
|
+
}
|
|
4525
|
+
}
|
|
4526
|
+
|
|
4527
|
+
/**
|
|
4528
|
+
* Create a funding input with DLC input information for splicing
|
|
4529
|
+
* @param dlcInputInfo DLC input information
|
|
4530
|
+
* @param fundingTxHex Raw transaction hex of the funding transaction
|
|
4531
|
+
*/
|
|
4532
|
+
async createDlcFundingInput(
|
|
4533
|
+
dlcInputInfo: DlcInputInfoRequest,
|
|
4534
|
+
fundingTxHex: string,
|
|
4535
|
+
): Promise<FundingInput> {
|
|
4536
|
+
const fundingInput = new FundingInput();
|
|
4537
|
+
const tx = Tx.decode(StreamReader.fromHex(fundingTxHex));
|
|
4538
|
+
|
|
4539
|
+
fundingInput.prevTx = tx;
|
|
4540
|
+
fundingInput.prevTxVout = dlcInputInfo.fundVout;
|
|
4541
|
+
fundingInput.sequence = Sequence.default();
|
|
4542
|
+
fundingInput.maxWitnessLen = dlcInputInfo.maxWitnessLength || 220;
|
|
4543
|
+
fundingInput.redeemScript = Buffer.from('', 'hex'); // Empty for P2WSH
|
|
4544
|
+
fundingInput.inputSerialId = BigInt(
|
|
4545
|
+
dlcInputInfo.inputSerialId || generateSerialId(),
|
|
4546
|
+
);
|
|
4547
|
+
|
|
4548
|
+
// Create the DLC multisig script for address generation
|
|
4549
|
+
const localPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
|
|
4550
|
+
const remotePubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
|
|
4551
|
+
|
|
4552
|
+
// Use the same deterministic ordering as cfd-dlc-js: lexicographic by hex
|
|
4553
|
+
// This matches GetOrderedPubkeys() in cfddlc_transactions.cpp
|
|
4554
|
+
const orderedPubkeys =
|
|
4555
|
+
dlcInputInfo.localFundPubkey < dlcInputInfo.remoteFundPubkey
|
|
4556
|
+
? [localPubkey, remotePubkey]
|
|
4557
|
+
: [remotePubkey, localPubkey];
|
|
4558
|
+
|
|
4559
|
+
const network = await this.getConnectedNetwork();
|
|
4560
|
+
|
|
4561
|
+
// Create 2-of-2 multisig payment using deterministic ordering
|
|
4562
|
+
const p2ms = payments.p2ms({
|
|
4563
|
+
m: 2,
|
|
4564
|
+
pubkeys: orderedPubkeys,
|
|
4565
|
+
network,
|
|
4566
|
+
});
|
|
4567
|
+
|
|
4568
|
+
const paymentVariant = payments.p2wsh({
|
|
4569
|
+
redeem: p2ms,
|
|
4570
|
+
network,
|
|
4571
|
+
});
|
|
4572
|
+
|
|
4573
|
+
const multisigAddress = paymentVariant.address!;
|
|
4574
|
+
|
|
4575
|
+
// Verify this matches the actual funding output address
|
|
4576
|
+
const actualFundingOutput = tx.outputs[dlcInputInfo.fundVout];
|
|
4577
|
+
const actualFundingAddress = address.fromOutputScript(
|
|
4578
|
+
actualFundingOutput.scriptPubKey.serialize().slice(1),
|
|
4579
|
+
network,
|
|
4580
|
+
);
|
|
4581
|
+
|
|
4582
|
+
if (actualFundingAddress !== multisigAddress) {
|
|
4583
|
+
throw new Error(
|
|
4584
|
+
`DLC funding address mismatch. ` +
|
|
4585
|
+
`Expected: ${actualFundingAddress}, ` +
|
|
4586
|
+
`Constructed: ${multisigAddress}`,
|
|
4587
|
+
);
|
|
4588
|
+
}
|
|
4589
|
+
|
|
4590
|
+
// Add toUtxo method that's expected by GetInputsForAmount
|
|
4591
|
+
(fundingInput as FundingInput & { toUtxo: () => Utxo }).toUtxo = () => {
|
|
4592
|
+
return new Utxo(
|
|
4593
|
+
dlcInputInfo.fundTxid,
|
|
4594
|
+
dlcInputInfo.fundVout,
|
|
4595
|
+
Amount.FromSatoshis(Number(dlcInputInfo.fundAmount)),
|
|
4596
|
+
multisigAddress,
|
|
4597
|
+
dlcInputInfo.maxWitnessLength || 220,
|
|
4598
|
+
undefined, // DLC inputs don't have derivation paths
|
|
4599
|
+
fundingInput.inputSerialId,
|
|
4600
|
+
);
|
|
4601
|
+
};
|
|
4602
|
+
|
|
4603
|
+
// Create proper DlcInput object for splicing detection and signing
|
|
4604
|
+
const dlcInput = new DlcInput();
|
|
4605
|
+
dlcInput.localFundPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
|
|
4606
|
+
dlcInput.remoteFundPubkey = Buffer.from(
|
|
4607
|
+
dlcInputInfo.remoteFundPubkey,
|
|
4608
|
+
'hex',
|
|
4609
|
+
);
|
|
4610
|
+
dlcInput.contractId = Buffer.from(dlcInputInfo.contractId, 'hex');
|
|
4611
|
+
|
|
4612
|
+
fundingInput.dlcInput = dlcInput;
|
|
4613
|
+
|
|
4614
|
+
return fundingInput;
|
|
4615
|
+
}
|
|
3919
4616
|
}
|
|
3920
4617
|
|
|
3921
4618
|
export interface BasicInitializeResponse {
|
|
@@ -4019,5 +4716,3 @@ export interface InputsForDualAmountResponse {
|
|
|
4019
4716
|
inputs: Input[];
|
|
4020
4717
|
fee: number;
|
|
4021
4718
|
}
|
|
4022
|
-
|
|
4023
|
-
const BurnAddress = 'bcrt1qxcjufgh2jarkp2qkx68azh08w9v5gah8u6es8s';
|