@atomicfinance/bitcoin-dlc-provider 4.0.0 → 4.0.1
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 +47 -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
|
@@ -28,10 +28,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
const provider_1 = __importDefault(require("@atomicfinance/provider"));
|
|
30
30
|
const types_1 = require("@atomicfinance/types");
|
|
31
|
+
const Input_1 = require("@atomicfinance/types/lib/models/Input");
|
|
31
32
|
const utils_1 = require("@atomicfinance/utils");
|
|
32
33
|
const bitcoin_1 = require("@node-dlc/bitcoin");
|
|
33
34
|
const bufio_1 = require("@node-dlc/bufio");
|
|
34
35
|
const core_1 = require("@node-dlc/core");
|
|
36
|
+
const core_2 = require("@node-dlc/core");
|
|
35
37
|
const crypto_1 = require("@node-dlc/crypto");
|
|
36
38
|
const messaging_1 = require("@node-dlc/messaging");
|
|
37
39
|
const assert_1 = __importDefault(require("assert"));
|
|
@@ -42,6 +44,7 @@ const crypto_2 = __importDefault(require("crypto"));
|
|
|
42
44
|
const ecc = __importStar(require("tiny-secp256k1"));
|
|
43
45
|
const Utils_1 = require("./utils/Utils");
|
|
44
46
|
class BitcoinDlcProvider extends provider_1.default {
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
48
|
constructor(network, cfdDlcJs) {
|
|
46
49
|
super();
|
|
47
50
|
this._network = network;
|
|
@@ -52,17 +55,83 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
52
55
|
await (0, utils_1.sleep)(10);
|
|
53
56
|
}
|
|
54
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Find private key for DLC funding pubkey by deriving wallet addresses
|
|
60
|
+
*/
|
|
61
|
+
async findDlcFundingPrivateKey(localFundPubkey, remoteFundPubkey) {
|
|
62
|
+
const targetPubkeys = [localFundPubkey, remoteFundPubkey];
|
|
63
|
+
// First check existing wallet addresses
|
|
64
|
+
const addresses = await this.getMethod('getAddresses')();
|
|
65
|
+
for (const addressInfo of addresses) {
|
|
66
|
+
if (addressInfo.derivationPath) {
|
|
67
|
+
try {
|
|
68
|
+
const keyPair = await this.getMethod('keyPair')(addressInfo.derivationPath);
|
|
69
|
+
const pubkey = Buffer.from(keyPair.publicKey);
|
|
70
|
+
const pubkeyHex = pubkey.toString('hex');
|
|
71
|
+
if (targetPubkeys.includes(pubkeyHex)) {
|
|
72
|
+
return Buffer.from(keyPair.privateKey).toString('hex');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// If not found in existing addresses, do comprehensive search
|
|
81
|
+
// For DLC splicing, funding pubkeys can be at much higher derivation paths
|
|
82
|
+
console.log('Searching extensively for DLC funding private key...');
|
|
83
|
+
for (const isChange of [false, true]) {
|
|
84
|
+
for (let i = 0; i < 1000; i++) {
|
|
85
|
+
// Search up to 1000 addresses for DLC keys
|
|
86
|
+
try {
|
|
87
|
+
const address = await this.client.wallet.getAddresses(i, 1, isChange);
|
|
88
|
+
if (address && address.length > 0) {
|
|
89
|
+
const addressInfo = address[0];
|
|
90
|
+
if (addressInfo.derivationPath) {
|
|
91
|
+
const keyPair = await this.getMethod('keyPair')(addressInfo.derivationPath);
|
|
92
|
+
const pubkey = Buffer.from(keyPair.publicKey);
|
|
93
|
+
const pubkeyHex = pubkey.toString('hex');
|
|
94
|
+
if (targetPubkeys.includes(pubkeyHex)) {
|
|
95
|
+
console.log(`Found DLC funding key at derivation path: ${addressInfo.derivationPath}`);
|
|
96
|
+
return Buffer.from(keyPair.privateKey).toString('hex');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
throw new Error(`Could not find private key for DLC funding pubkeys: local=${localFundPubkey}, remote=${remoteFundPubkey}`);
|
|
107
|
+
}
|
|
55
108
|
async GetPrivKeysForInputs(inputs) {
|
|
56
109
|
const privKeys = [];
|
|
57
110
|
for (let i = 0; i < inputs.length; i++) {
|
|
58
111
|
const input = inputs[i];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
112
|
+
if (input.isDlcInput()) {
|
|
113
|
+
// Handle DLC input - use the dedicated method to find the funding private key
|
|
114
|
+
const dlcInput = input.dlcInput;
|
|
115
|
+
const foundPrivKey = await this.findDlcFundingPrivateKey(dlcInput.localFundPubkey, dlcInput.remoteFundPubkey);
|
|
116
|
+
privKeys.push(foundPrivKey);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Handle regular input
|
|
120
|
+
let derivationPath = input.derivationPath;
|
|
121
|
+
if (!derivationPath) {
|
|
122
|
+
try {
|
|
123
|
+
derivationPath = (await this.getMethod('getWalletAddress')(input.address)).derivationPath;
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new Error(`Unable to find address ${input.address} in wallet. ` +
|
|
127
|
+
`This may happen when using derivation paths outside the normal range. ` +
|
|
128
|
+
`Error: ${error.message}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const keyPair = await this.getMethod('keyPair')(derivationPath);
|
|
132
|
+
const privKey = Buffer.from(keyPair.__D).toString('hex');
|
|
133
|
+
privKeys.push(privKey);
|
|
62
134
|
}
|
|
63
|
-
const keyPair = await this.getMethod('keyPair')(derivationPath);
|
|
64
|
-
const privKey = Buffer.from(keyPair.__D).toString('hex');
|
|
65
|
-
privKeys.push(privKey);
|
|
66
135
|
}
|
|
67
136
|
return privKeys;
|
|
68
137
|
}
|
|
@@ -77,6 +146,34 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
77
146
|
return 'bitcoin';
|
|
78
147
|
}
|
|
79
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Get inputs for amount with explicit supplementation control
|
|
151
|
+
*/
|
|
152
|
+
async GetInputsForAmountWithMode(amounts, feeRatePerVb, fixedInputs = [], supplementation = Input_1.InputSupplementationMode.Required) {
|
|
153
|
+
if (amounts.length === 0)
|
|
154
|
+
return [];
|
|
155
|
+
// For "none" mode, use exactly the provided inputs
|
|
156
|
+
if (supplementation === Input_1.InputSupplementationMode.None) {
|
|
157
|
+
return fixedInputs;
|
|
158
|
+
}
|
|
159
|
+
// For "required" and "optional" modes, attempt supplementation
|
|
160
|
+
const fixedUtxos = fixedInputs.map((input) => input.toUtxo());
|
|
161
|
+
try {
|
|
162
|
+
const inputsForAmount = await this.getMethod('getInputsForDualFunding')(amounts, feeRatePerVb, fixedUtxos);
|
|
163
|
+
// Convert UTXO objects to Input class instances
|
|
164
|
+
return inputsForAmount.inputs.map((utxo) => types_1.Input.fromUTXO(utxo));
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
const errorMessage = e instanceof Error ? e.message : 'Unknown error';
|
|
168
|
+
if (supplementation === Input_1.InputSupplementationMode.Required) {
|
|
169
|
+
throw Error(`Not enough balance GetInputsForAmountWithMode. Error: ${errorMessage}`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// Optional mode: fallback to provided inputs
|
|
173
|
+
return fixedInputs;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
80
177
|
async GetInputsForAmount(amounts, feeRatePerVb, fixedInputs = []) {
|
|
81
178
|
if (amounts.length === 0)
|
|
82
179
|
return [];
|
|
@@ -84,7 +181,8 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
84
181
|
let inputs;
|
|
85
182
|
try {
|
|
86
183
|
const inputsForAmount = await this.getMethod('getInputsForDualFunding')(amounts, feeRatePerVb, fixedUtxos);
|
|
87
|
-
|
|
184
|
+
// Convert UTXO objects to Input class instances
|
|
185
|
+
inputs = inputsForAmount.inputs.map((utxo) => types_1.Input.fromUTXO(utxo));
|
|
88
186
|
}
|
|
89
187
|
catch (e) {
|
|
90
188
|
const errorMessage = e instanceof Error ? e.message : 'Unknown error';
|
|
@@ -97,7 +195,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
97
195
|
}
|
|
98
196
|
return inputs;
|
|
99
197
|
}
|
|
100
|
-
async Initialize(collateral, feeRatePerVb, fixedInputs) {
|
|
198
|
+
async Initialize(collateral, feeRatePerVb, fixedInputs, inputSupplementationMode = Input_1.InputSupplementationMode.Required) {
|
|
101
199
|
const network = await this.getConnectedNetwork();
|
|
102
200
|
const payoutAddress = await this.client.wallet.getUnusedAddress(false);
|
|
103
201
|
const payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
|
|
@@ -107,7 +205,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
107
205
|
const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
108
206
|
if (fundingAddress.address === payoutAddress.address)
|
|
109
207
|
throw Error('Address reuse');
|
|
110
|
-
const inputs = await this.
|
|
208
|
+
const inputs = await this.GetInputsForAmountWithMode([collateral], feeRatePerVb, fixedInputs, inputSupplementationMode);
|
|
111
209
|
const fundingInputs = await Promise.all(inputs.map(async (input) => {
|
|
112
210
|
return this.inputToFundingInput(input);
|
|
113
211
|
}));
|
|
@@ -124,7 +222,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
124
222
|
}
|
|
125
223
|
async BatchInitialize(collaterals, feeRatePerVb, fixedInputs) {
|
|
126
224
|
const network = await this.getConnectedNetwork();
|
|
127
|
-
const inputs = await this.
|
|
225
|
+
const inputs = await this.GetInputsForAmountWithMode(collaterals, feeRatePerVb, fixedInputs, Input_1.InputSupplementationMode.Required);
|
|
128
226
|
const fundingInputs = await Promise.all(inputs.map(async (input) => {
|
|
129
227
|
return this.inputToFundingInput(input);
|
|
130
228
|
}));
|
|
@@ -175,12 +273,12 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
175
273
|
if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptor)
|
|
176
274
|
throw Error('Only DigitDecomposition Oracle Events supported');
|
|
177
275
|
const roundingIntervals = contractDescriptor.roundingIntervals;
|
|
178
|
-
const cetPayouts =
|
|
276
|
+
const cetPayouts = core_2.HyperbolaPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
|
|
179
277
|
const payoutGroups = [];
|
|
180
278
|
cetPayouts.forEach((p) => {
|
|
181
279
|
payoutGroups.push({
|
|
182
280
|
payout: p.payout,
|
|
183
|
-
groups: (0,
|
|
281
|
+
groups: (0, core_2.groupByIgnoringDigits)(p.indexFrom, p.indexTo, eventDescriptor.base, contractDescriptor.numDigits),
|
|
184
282
|
});
|
|
185
283
|
});
|
|
186
284
|
const rValuesMessagesList = this.GenerateMessages(singleOracleInfo);
|
|
@@ -200,12 +298,12 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
200
298
|
if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptor)
|
|
201
299
|
throw Error('Only DigitDecomposition Oracle Events supported');
|
|
202
300
|
const roundingIntervals = contractDescriptor.roundingIntervals;
|
|
203
|
-
const cetPayouts =
|
|
301
|
+
const cetPayouts = core_2.PolynomialPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
|
|
204
302
|
const payoutGroups = [];
|
|
205
303
|
cetPayouts.forEach((p) => {
|
|
206
304
|
payoutGroups.push({
|
|
207
305
|
payout: p.payout,
|
|
208
|
-
groups: (0,
|
|
306
|
+
groups: (0, core_2.groupByIgnoringDigits)(p.indexFrom, p.indexTo, eventDescriptor.base, contractDescriptor.numDigits),
|
|
209
307
|
});
|
|
210
308
|
});
|
|
211
309
|
const rValuesMessagesList = this.GenerateMessages(oracleInfo);
|
|
@@ -278,15 +376,37 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
278
376
|
const remoteFinalScriptPubkey = dlcAccept.payoutSpk.toString('hex');
|
|
279
377
|
const localChangeScriptPubkey = dlcOffer.changeSpk.toString('hex');
|
|
280
378
|
const remoteChangeScriptPubkey = dlcAccept.changeSpk.toString('hex');
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
379
|
+
// Separate regular inputs from DLC inputs (only from offeror side)
|
|
380
|
+
const localRegularInputs = [];
|
|
381
|
+
const localDlcInputs = [];
|
|
382
|
+
for (const fundingInput of dlcOffer.fundingInputs) {
|
|
383
|
+
if (fundingInput.dlcInput) {
|
|
384
|
+
// This is a DLC input for splicing
|
|
385
|
+
// The pubkeys should be from the original DLC to correctly spend its funding output
|
|
386
|
+
localDlcInputs.push({
|
|
387
|
+
fundTxid: fundingInput.prevTx.txId.toString(),
|
|
388
|
+
fundVout: fundingInput.prevTxVout,
|
|
389
|
+
fundAmount: Number(fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats),
|
|
390
|
+
localFundPubkey: fundingInput.dlcInput.localFundPubkey.toString('hex'),
|
|
391
|
+
remoteFundPubkey: fundingInput.dlcInput.remoteFundPubkey.toString('hex'),
|
|
392
|
+
contractId: fundingInput.dlcInput.contractId.toString('hex'),
|
|
393
|
+
maxWitnessLength: fundingInput.maxWitnessLen,
|
|
394
|
+
inputSerialId: fundingInput.inputSerialId,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
// Regular input
|
|
399
|
+
const input = await this.fundingInputToInput(fundingInput, false);
|
|
400
|
+
localRegularInputs.push(input.toUtxo());
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// Process remote inputs (no DLC inputs from acceptor side)
|
|
285
404
|
const remoteInputs = await Promise.all(dlcAccept.fundingInputs.map(async (fundingInput) => {
|
|
286
405
|
const input = await this.fundingInputToInput(fundingInput, false);
|
|
287
406
|
return input.toUtxo();
|
|
288
407
|
}));
|
|
289
|
-
|
|
408
|
+
// Calculate input amounts
|
|
409
|
+
const localInputAmount = localRegularInputs.reduce((prev, cur) => prev + cur.amount.GetSatoshiAmount(), 0);
|
|
290
410
|
const remoteInputAmount = remoteInputs.reduce((prev, cur) => prev + cur.amount.GetSatoshiAmount(), 0);
|
|
291
411
|
let payouts = [];
|
|
292
412
|
let messagesList = [];
|
|
@@ -310,43 +430,97 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
310
430
|
payouts = tempPayouts;
|
|
311
431
|
messagesList = tempMessagesList;
|
|
312
432
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
433
|
+
// Determine whether to use regular or spliced DLC transactions
|
|
434
|
+
const hasDlcInputs = localDlcInputs.length > 0;
|
|
435
|
+
let dlcTxs;
|
|
436
|
+
if (hasDlcInputs) {
|
|
437
|
+
// Use spliced DLC transactions when DLC inputs are present
|
|
438
|
+
const splicedDlcTxRequest = {
|
|
439
|
+
payouts,
|
|
440
|
+
localFundPubkey,
|
|
441
|
+
localFinalScriptPubkey,
|
|
442
|
+
remoteFundPubkey,
|
|
443
|
+
remoteFinalScriptPubkey,
|
|
444
|
+
localInputAmount,
|
|
445
|
+
localCollateralAmount: dlcOffer.offerCollateral,
|
|
446
|
+
localPayoutSerialId: dlcOffer.payoutSerialId,
|
|
447
|
+
localChangeSerialId: dlcOffer.changeSerialId,
|
|
448
|
+
remoteInputAmount,
|
|
449
|
+
remoteCollateralAmount: dlcAccept.acceptCollateral,
|
|
450
|
+
remotePayoutSerialId: dlcAccept.payoutSerialId,
|
|
451
|
+
remoteChangeSerialId: dlcAccept.changeSerialId,
|
|
452
|
+
refundLocktime: dlcOffer.refundLocktime,
|
|
453
|
+
localInputs: localRegularInputs,
|
|
454
|
+
localDlcInputs: localDlcInputs,
|
|
455
|
+
remoteInputs,
|
|
456
|
+
localChangeScriptPubkey,
|
|
457
|
+
remoteChangeScriptPubkey,
|
|
458
|
+
feeRate: Number(dlcOffer.feeRatePerVb),
|
|
459
|
+
cetLockTime: dlcOffer.cetLocktime,
|
|
460
|
+
fundOutputSerialId: dlcOffer.fundOutputSerialId,
|
|
461
|
+
};
|
|
462
|
+
dlcTxs = await this.CreateSplicedDlcTransactions(splicedDlcTxRequest);
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
// Use regular DLC transactions when no DLC inputs
|
|
466
|
+
const dlcTxRequest = {
|
|
467
|
+
payouts,
|
|
468
|
+
localFundPubkey,
|
|
469
|
+
localFinalScriptPubkey,
|
|
470
|
+
remoteFundPubkey,
|
|
471
|
+
remoteFinalScriptPubkey,
|
|
472
|
+
localInputAmount,
|
|
473
|
+
localCollateralAmount: dlcOffer.offerCollateral,
|
|
474
|
+
localPayoutSerialId: dlcOffer.payoutSerialId,
|
|
475
|
+
localChangeSerialId: dlcOffer.changeSerialId,
|
|
476
|
+
remoteInputAmount,
|
|
477
|
+
remoteCollateralAmount: dlcAccept.acceptCollateral,
|
|
478
|
+
remotePayoutSerialId: dlcAccept.payoutSerialId,
|
|
479
|
+
remoteChangeSerialId: dlcAccept.changeSerialId,
|
|
480
|
+
refundLocktime: dlcOffer.refundLocktime,
|
|
481
|
+
localInputs: localRegularInputs,
|
|
482
|
+
remoteInputs,
|
|
483
|
+
localChangeScriptPubkey,
|
|
484
|
+
remoteChangeScriptPubkey,
|
|
485
|
+
feeRate: Number(dlcOffer.feeRatePerVb),
|
|
486
|
+
cetLockTime: dlcOffer.cetLocktime,
|
|
487
|
+
fundOutputSerialId: dlcOffer.fundOutputSerialId,
|
|
488
|
+
};
|
|
489
|
+
dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
|
|
490
|
+
}
|
|
337
491
|
const dlcTransactions = new messaging_1.DlcTransactions();
|
|
338
492
|
dlcTransactions.fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.fundTxHex));
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
493
|
+
// Build serial IDs based on actual outputs in the transaction
|
|
494
|
+
const actualOutputs = dlcTransactions.fundTx.outputs;
|
|
495
|
+
const serialIds = [];
|
|
496
|
+
// Always include the funding output serial ID
|
|
497
|
+
serialIds.push(BigInt(dlcOffer.fundOutputSerialId));
|
|
498
|
+
// Only include change serial IDs if there are actually change outputs
|
|
499
|
+
// For exact amount DLCs with no change, there will be only 1 output (the funding output)
|
|
500
|
+
if (actualOutputs.length > 1) {
|
|
501
|
+
// Multiple outputs means there are change outputs
|
|
502
|
+
if (dlcOffer.offerCollateral > 0n) {
|
|
503
|
+
serialIds.push(BigInt(dlcOffer.changeSerialId));
|
|
504
|
+
}
|
|
505
|
+
if (dlcAccept.acceptCollateral > 0n) {
|
|
506
|
+
serialIds.push(BigInt(dlcAccept.changeSerialId));
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
dlcTransactions.fundTxVout = serialIds
|
|
344
510
|
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
|
|
345
|
-
.findIndex((i) => BigInt(i) === BigInt(
|
|
511
|
+
.findIndex((i) => BigInt(i) === BigInt(dlcOffer.fundOutputSerialId));
|
|
512
|
+
// Validate that the calculated fundTxVout is valid
|
|
513
|
+
if (dlcTransactions.fundTxVout < 0 ||
|
|
514
|
+
dlcTransactions.fundTxVout >= dlcTransactions.fundTx.outputs.length) {
|
|
515
|
+
throw new Error(`Invalid fundTxVout calculation: calculated=${dlcTransactions.fundTxVout}, ` +
|
|
516
|
+
`fundTx.outputs.length=${dlcTransactions.fundTx.outputs.length}, ` +
|
|
517
|
+
`fundOutputSerialId=${dlcOffer.fundOutputSerialId}, ` +
|
|
518
|
+
`serialIds=[${serialIds.join(', ')}], ` +
|
|
519
|
+
`offerCollateral=${dlcOffer.offerCollateral}, ` +
|
|
520
|
+
`acceptCollateral=${dlcAccept.acceptCollateral}`);
|
|
521
|
+
}
|
|
522
|
+
dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(cetHex)));
|
|
346
523
|
dlcTransactions.refundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.refundTxHex));
|
|
347
|
-
dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => {
|
|
348
|
-
return bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(cetHex));
|
|
349
|
-
});
|
|
350
524
|
return { dlcTransactions, messagesList };
|
|
351
525
|
}
|
|
352
526
|
async createBatchDlcTxs(dlcOffers, dlcAccepts) {
|
|
@@ -501,6 +675,16 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
501
675
|
throw Error('ContractInfo must be Single or Disjoint');
|
|
502
676
|
}
|
|
503
677
|
}
|
|
678
|
+
getFundOutputValueSats(dlcTxs) {
|
|
679
|
+
const fundOutput = dlcTxs.fundTx.outputs[dlcTxs.fundTxVout];
|
|
680
|
+
if (!fundOutput || !fundOutput.value) {
|
|
681
|
+
throw new Error(`Invalid fund output at vout ${dlcTxs.fundTxVout}: ` +
|
|
682
|
+
`outputs.length=${dlcTxs.fundTx.outputs.length}, ` +
|
|
683
|
+
`output exists=${!!fundOutput}, ` +
|
|
684
|
+
`output.value exists=${!!(fundOutput && fundOutput.value)}`);
|
|
685
|
+
}
|
|
686
|
+
return fundOutput.value.sats;
|
|
687
|
+
}
|
|
504
688
|
async CreateCetAdaptorAndRefundSigs(_dlcOffer, _dlcAccept, _dlcTxs, messagesList, isOfferer) {
|
|
505
689
|
const { dlcOffer, dlcAccept, dlcTxs } = (0, Utils_1.checkTypes)({
|
|
506
690
|
_dlcOffer,
|
|
@@ -523,7 +707,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
523
707
|
if (dlcOffer.contractInfo.contractInfoType === messaging_1.ContractInfoType.Single &&
|
|
524
708
|
dlcOffer.contractInfo.contractDescriptor.type ===
|
|
525
709
|
messaging_1.MessageType.ContractDescriptorV0) {
|
|
526
|
-
for (const
|
|
710
|
+
for (const { oracleInfo } of contractOraclePairs) {
|
|
527
711
|
if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
|
|
528
712
|
throw new Error('Only SingleOracleInfo supported in this context');
|
|
529
713
|
}
|
|
@@ -540,7 +724,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
540
724
|
fundVout: dlcTxs.fundTxVout,
|
|
541
725
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
542
726
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
543
|
-
fundInputAmount:
|
|
727
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
544
728
|
oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
|
|
545
729
|
oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
|
|
546
730
|
};
|
|
@@ -581,7 +765,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
581
765
|
fundVout: dlcTxs.fundTxVout,
|
|
582
766
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
583
767
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
584
|
-
fundInputAmount:
|
|
768
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
585
769
|
oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
|
|
586
770
|
oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
|
|
587
771
|
};
|
|
@@ -606,7 +790,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
606
790
|
fundVout: dlcTxs.fundTxVout,
|
|
607
791
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
608
792
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
609
|
-
fundInputAmount:
|
|
793
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
610
794
|
};
|
|
611
795
|
const refundSignature = Buffer.from((await this.GetRawRefundTxSignature(refundSignRequest)).hex, 'hex');
|
|
612
796
|
const cetSignatures = new messaging_1.CetAdaptorSignatures();
|
|
@@ -625,7 +809,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
625
809
|
if (dlcOffer.contractInfo.type === messaging_1.MessageType.SingleContractInfo &&
|
|
626
810
|
dlcOffer.contractInfo.contractDescriptor.type ===
|
|
627
811
|
messaging_1.MessageType.ContractDescriptorV0) {
|
|
628
|
-
for (const
|
|
812
|
+
for (const { oracleInfo } of contractOraclePairs) {
|
|
629
813
|
if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
|
|
630
814
|
throw new Error('Only SingleOracleInfo supported in this context');
|
|
631
815
|
}
|
|
@@ -655,7 +839,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
655
839
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
656
840
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
657
841
|
fundVout: dlcTxs.fundTxVout,
|
|
658
|
-
fundInputAmount:
|
|
842
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
659
843
|
verifyRemote: isOfferer,
|
|
660
844
|
};
|
|
661
845
|
sigsValidity.push((async () => {
|
|
@@ -672,7 +856,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
672
856
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
673
857
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
674
858
|
fundVout: dlcTxs.fundTxVout,
|
|
675
|
-
fundInputAmount:
|
|
859
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
676
860
|
verifyRemote: isOfferer,
|
|
677
861
|
};
|
|
678
862
|
areSigsValid =
|
|
@@ -719,7 +903,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
719
903
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
720
904
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
721
905
|
fundVout: dlcTxs.fundTxVout,
|
|
722
|
-
fundInputAmount:
|
|
906
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
723
907
|
verifyRemote: isOfferer,
|
|
724
908
|
};
|
|
725
909
|
sigsValidity.push((async () => {
|
|
@@ -737,7 +921,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
737
921
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
738
922
|
fundTxId: dlcTxs.fundTx.txId.toString(),
|
|
739
923
|
fundVout: dlcTxs.fundTxVout,
|
|
740
|
-
fundInputAmount:
|
|
924
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
741
925
|
verifyRemote: isOfferer,
|
|
742
926
|
};
|
|
743
927
|
areSigsValid =
|
|
@@ -763,14 +947,32 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
763
947
|
}));
|
|
764
948
|
const inputPrivKeys = await this.GetPrivKeysForInputs(inputs);
|
|
765
949
|
const fundTxSigs = await Promise.all(inputs.map(async (input, index) => {
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
950
|
+
// Use DLC-specific signing for DLC inputs
|
|
951
|
+
if (input.isDlcInput()) {
|
|
952
|
+
const dlcInputInfo = input.dlcInput;
|
|
953
|
+
const dlcSignRequest = {
|
|
954
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
955
|
+
fundTxid: input.txid,
|
|
956
|
+
fundVout: input.vout,
|
|
957
|
+
fundAmount: input.value,
|
|
958
|
+
localFundPubkey: dlcInputInfo.localFundPubkey,
|
|
959
|
+
remoteFundPubkey: dlcInputInfo.remoteFundPubkey,
|
|
960
|
+
privkey: inputPrivKeys[index],
|
|
961
|
+
};
|
|
962
|
+
return (await this.GetRawDlcFundingInputSignature(dlcSignRequest))
|
|
963
|
+
.hex;
|
|
964
|
+
}
|
|
965
|
+
else {
|
|
966
|
+
// Use regular signing for non-DLC inputs
|
|
967
|
+
const fundTxSignRequest = {
|
|
968
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
969
|
+
privkey: inputPrivKeys[index],
|
|
970
|
+
prevTxId: input.txid,
|
|
971
|
+
prevVout: input.vout,
|
|
972
|
+
amount: input.value,
|
|
973
|
+
};
|
|
974
|
+
return (await this.GetRawFundTxSignature(fundTxSignRequest)).hex;
|
|
975
|
+
}
|
|
774
976
|
}));
|
|
775
977
|
const inputPubKeys = await Promise.all(inputPrivKeys.map(async (privkey) => {
|
|
776
978
|
const reqPrivKey = {
|
|
@@ -801,18 +1003,39 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
801
1003
|
const fundingInput = isOfferer
|
|
802
1004
|
? dlcAccept.fundingInputs[i]
|
|
803
1005
|
: dlcOffer.fundingInputs[i];
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
1006
|
+
// Check if this is a DLC input and use appropriate verification
|
|
1007
|
+
if (fundingInput.dlcInput) {
|
|
1008
|
+
const dlcInput = fundingInput.dlcInput;
|
|
1009
|
+
const verifyDlcSigRequest = {
|
|
1010
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
1011
|
+
fundTxid: fundingInput.prevTx.txId.toString(),
|
|
1012
|
+
fundVout: fundingInput.prevTxVout,
|
|
1013
|
+
fundAmount: Number(fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats),
|
|
1014
|
+
localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
|
|
1015
|
+
remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
|
|
1016
|
+
signature,
|
|
1017
|
+
pubkey,
|
|
1018
|
+
};
|
|
1019
|
+
sigsValidity.push((async () => {
|
|
1020
|
+
const response = await this.VerifyDlcFundingInputSignature(verifyDlcSigRequest);
|
|
1021
|
+
return response.valid;
|
|
1022
|
+
})());
|
|
1023
|
+
}
|
|
1024
|
+
else {
|
|
1025
|
+
// Regular input verification
|
|
1026
|
+
const verifyFundSigRequest = {
|
|
1027
|
+
fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
|
|
1028
|
+
signature,
|
|
1029
|
+
pubkey,
|
|
1030
|
+
prevTxId: fundingInput.prevTx.txId.toString(),
|
|
1031
|
+
prevVout: fundingInput.prevTxVout,
|
|
1032
|
+
fundInputAmount: fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
|
|
1033
|
+
};
|
|
1034
|
+
sigsValidity.push((async () => {
|
|
1035
|
+
const response = await this.VerifyFundTxSignature(verifyFundSigRequest);
|
|
1036
|
+
return response.valid;
|
|
1037
|
+
})());
|
|
1038
|
+
}
|
|
816
1039
|
}
|
|
817
1040
|
const areSigsValid = (await Promise.all(sigsValidity)).every((b) => b);
|
|
818
1041
|
if (!areSigsValid) {
|
|
@@ -829,25 +1052,53 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
829
1052
|
...dlcAccept.fundingInputs,
|
|
830
1053
|
];
|
|
831
1054
|
let fundTxHex = dlcTxs.fundTx.serialize().toString('hex');
|
|
1055
|
+
// Track processed DLC inputs to avoid double processing
|
|
1056
|
+
const processedDlcInputs = new Set();
|
|
832
1057
|
await (0, Utils_1.asyncForEach)(witnessElements, async (witnessElement, i) => {
|
|
833
1058
|
const signature = witnessElement[0].witness.toString('hex');
|
|
834
1059
|
const pubkey = witnessElement[1].witness.toString('hex');
|
|
835
1060
|
const fundingInput = fundingInputs[i];
|
|
836
|
-
const
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
1061
|
+
const inputKey = `${fundingInput.prevTx.txId.toString()}:${fundingInput.prevTxVout}`;
|
|
1062
|
+
// Check if this is a DLC input
|
|
1063
|
+
if (fundingInput.dlcInput && !processedDlcInputs.has(inputKey)) {
|
|
1064
|
+
// Mark as processed to avoid double processing
|
|
1065
|
+
processedDlcInputs.add(inputKey);
|
|
1066
|
+
// For DLC inputs, use SignDlcFundingInput which properly combines signatures
|
|
1067
|
+
// This is the correct CFD method for DLC funding inputs
|
|
1068
|
+
const dlcInput = fundingInput.dlcInput;
|
|
1069
|
+
// Find the private key for this DLC input
|
|
1070
|
+
const privateKey = await this.findDlcFundingPrivateKey(dlcInput.localFundPubkey.toString('hex'), dlcInput.remoteFundPubkey.toString('hex'));
|
|
1071
|
+
const signDlcRequest = {
|
|
1072
|
+
fundTxHex,
|
|
1073
|
+
fundTxid: fundingInput.prevTx.txId.toString(),
|
|
1074
|
+
fundVout: fundingInput.prevTxVout,
|
|
1075
|
+
fundAmount: Number(fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats),
|
|
1076
|
+
localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
|
|
1077
|
+
remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
|
|
1078
|
+
localPrivkey: privateKey,
|
|
1079
|
+
remoteSignature: signature,
|
|
1080
|
+
};
|
|
1081
|
+
fundTxHex = (await this.SignDlcFundingInput(signDlcRequest)).hex;
|
|
1082
|
+
}
|
|
1083
|
+
else if (!fundingInput.dlcInput) {
|
|
1084
|
+
// Regular input - use standard signing
|
|
1085
|
+
const addSignRequest = {
|
|
1086
|
+
fundTxHex,
|
|
1087
|
+
signature,
|
|
1088
|
+
prevTxId: fundingInput.prevTx.txId.toString(),
|
|
1089
|
+
prevVout: fundingInput.prevTxVout,
|
|
1090
|
+
pubkey,
|
|
1091
|
+
};
|
|
1092
|
+
fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
|
|
1093
|
+
.hex;
|
|
1094
|
+
}
|
|
1095
|
+
// If it's a DLC input but already processed, skip it
|
|
845
1096
|
});
|
|
846
1097
|
const fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(fundTxHex));
|
|
847
1098
|
return fundTx;
|
|
848
1099
|
}
|
|
849
1100
|
async FindOutcomeIndexFromPolynomialPayoutCurvePiece(dlcOffer, contractDescriptor, contractOraclePairIndex, polynomialPayoutCurvePiece, oracleAttestation, outcome) {
|
|
850
|
-
const polynomialCurve =
|
|
1101
|
+
const polynomialCurve = core_2.PolynomialPayoutCurve.fromPayoutCurvePiece(polynomialPayoutCurvePiece);
|
|
851
1102
|
const payouts = polynomialPayoutCurvePiece.points.map((point) => Number(point.outcomePayout));
|
|
852
1103
|
const minPayout = Math.min(...payouts);
|
|
853
1104
|
const maxPayout = Math.max(...payouts);
|
|
@@ -861,7 +1112,7 @@ class BitcoinDlcProvider extends provider_1.default {
|
|
|
861
1112
|
...contractDescriptor.roundingIntervals.intervals,
|
|
862
1113
|
].sort((a, b) => Number(b.beginInterval) - Number(a.beginInterval));
|
|
863
1114
|
const interval = intervalsSorted.find((interval) => Number(outcome) >= Number(interval.beginInterval));
|
|
864
|
-
const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0,
|
|
1115
|
+
const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0, core_2.roundPayout)(payout, interval.roundingMod).toString())).toString());
|
|
865
1116
|
const outcomesFormatted = oracleAttestation.outcomes.map((outcome) => parseInt(outcome));
|
|
866
1117
|
let index = 0;
|
|
867
1118
|
let groupIndex = -1;
|
|
@@ -889,7 +1140,7 @@ Payout Group not found');
|
|
|
889
1140
|
}
|
|
890
1141
|
async FindOutcomeIndexFromHyperbolaPayoutCurvePiece(_dlcOffer, contractDescriptor, contractOraclePairIndex, hyperbolaPayoutCurvePiece, oracleAttestation, outcome) {
|
|
891
1142
|
const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
|
|
892
|
-
const hyperbolaCurve =
|
|
1143
|
+
const hyperbolaCurve = core_2.HyperbolaPayoutCurve.fromPayoutCurvePiece(hyperbolaPayoutCurvePiece);
|
|
893
1144
|
const clampBN = (val) => bignumber_js_1.default.max(0, bignumber_js_1.default.min(val, dlcOffer.contractInfo.totalCollateral.toString()));
|
|
894
1145
|
const payout = clampBN(hyperbolaCurve.getPayout(outcome));
|
|
895
1146
|
const payoutResponses = this.GetPayouts(dlcOffer);
|
|
@@ -900,7 +1151,7 @@ Payout Group not found');
|
|
|
900
1151
|
...contractDescriptor.roundingIntervals.intervals,
|
|
901
1152
|
].sort((a, b) => Number(b.beginInterval) - Number(a.beginInterval));
|
|
902
1153
|
const interval = intervalsSorted.find((interval) => Number(outcome) >= Number(interval.beginInterval));
|
|
903
|
-
const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0,
|
|
1154
|
+
const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0, core_2.roundPayout)(payout, interval.roundingMod).toString())).toString());
|
|
904
1155
|
const outcomesFormatted = oracleAttestation.outcomes.map((outcome) => parseInt(outcome));
|
|
905
1156
|
let index = 0;
|
|
906
1157
|
let groupIndex = -1;
|
|
@@ -941,7 +1192,7 @@ Payout Group not found');
|
|
|
941
1192
|
// Fallback to brute force search if payout-based search fails
|
|
942
1193
|
index = 0;
|
|
943
1194
|
groupLength = 0;
|
|
944
|
-
for (const [
|
|
1195
|
+
for (const [, payoutGroup] of payoutGroups.entries()) {
|
|
945
1196
|
groupIndex = payoutGroup.groups.findIndex((group) => {
|
|
946
1197
|
return group.every((msg, j) => msg === outcomesFormatted[j]);
|
|
947
1198
|
});
|
|
@@ -1070,7 +1321,7 @@ Payout Group not found even with brute force search');
|
|
|
1070
1321
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
1071
1322
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1072
1323
|
oracleSignatures: oracleAttestation.signatures.map((sig) => sig.toString('hex')),
|
|
1073
|
-
fundInputAmount:
|
|
1324
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1074
1325
|
adaptorSignature: isOfferer
|
|
1075
1326
|
? dlcAccept.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
|
|
1076
1327
|
: dlcSign.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
|
|
@@ -1090,7 +1341,7 @@ Payout Group not found even with brute force search');
|
|
|
1090
1341
|
localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
|
|
1091
1342
|
remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
|
|
1092
1343
|
oracleSignatures: oracleSignatures.map((sig) => sig.toString('hex')),
|
|
1093
|
-
fundInputAmount:
|
|
1344
|
+
fundInputAmount: this.getFundOutputValueSats(dlcTxs),
|
|
1094
1345
|
adaptorSignature: isOfferer
|
|
1095
1346
|
? dlcAccept.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
|
|
1096
1347
|
: dlcSign.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
|
|
@@ -1121,7 +1372,7 @@ Payout Group not found even with brute force search');
|
|
|
1121
1372
|
const network = await this.getConnectedNetwork();
|
|
1122
1373
|
let finalizer;
|
|
1123
1374
|
if (_dlcCloses.length === 0) {
|
|
1124
|
-
finalizer = new
|
|
1375
|
+
finalizer = new core_2.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
|
|
1125
1376
|
}
|
|
1126
1377
|
const rawTransactionRequestPromises = [];
|
|
1127
1378
|
const rawCloseTxs = [];
|
|
@@ -1217,7 +1468,7 @@ Payout Group not found even with brute force search');
|
|
|
1217
1468
|
hex: paymentVariant.redeem.output.toString('hex'),
|
|
1218
1469
|
type: 'redeem_script',
|
|
1219
1470
|
},
|
|
1220
|
-
amount: Number(
|
|
1471
|
+
amount: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
1221
1472
|
hashType: 'p2wsh',
|
|
1222
1473
|
sighashType: 'all',
|
|
1223
1474
|
sighashAnyoneCanPay: false,
|
|
@@ -1290,7 +1541,7 @@ Payout Group not found even with brute force search');
|
|
|
1290
1541
|
hashType: 'p2wsh',
|
|
1291
1542
|
sighashType: 'all',
|
|
1292
1543
|
sighashAnyoneCanPay: false,
|
|
1293
|
-
amount: Number(
|
|
1544
|
+
amount: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
1294
1545
|
},
|
|
1295
1546
|
};
|
|
1296
1547
|
sigsValidity.push((async () => {
|
|
@@ -1340,15 +1591,49 @@ Payout Group not found even with brute force search');
|
|
|
1340
1591
|
* @param feeRatePerVb Fee rate in satoshi per virtual byte that both sides use to compute fees in funding tx
|
|
1341
1592
|
* @param cetLocktime The nLockTime to be put on CETs
|
|
1342
1593
|
* @param refundLocktime The nLockTime to be put on the refund transaction
|
|
1594
|
+
* @param fixedInputs Optional fixed inputs - can be Input[] for regular inputs or FundingInput[] for DLC inputs
|
|
1343
1595
|
* @returns {Promise<DlcOffer>}
|
|
1344
1596
|
*/
|
|
1345
|
-
async createDlcOffer(contractInfo, offerCollateralSatoshis, feeRatePerVb, cetLocktime, refundLocktime, fixedInputs) {
|
|
1597
|
+
async createDlcOffer(contractInfo, offerCollateralSatoshis, feeRatePerVb, cetLocktime, refundLocktime, fixedInputs, inputSupplementationMode) {
|
|
1346
1598
|
contractInfo.validate();
|
|
1347
1599
|
const network = await this.getConnectedNetwork();
|
|
1348
1600
|
const dlcOffer = new messaging_1.DlcOffer();
|
|
1349
1601
|
// Generate a random 32-byte temporary contract ID
|
|
1350
1602
|
dlcOffer.temporaryContractId = crypto_2.default.randomBytes(32);
|
|
1351
|
-
|
|
1603
|
+
// Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
|
|
1604
|
+
const hasFundingInputs = fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
|
|
1605
|
+
let fundingPubKey;
|
|
1606
|
+
let payoutSPK;
|
|
1607
|
+
let payoutSerialId;
|
|
1608
|
+
let _fundingInputs;
|
|
1609
|
+
let changeSPK;
|
|
1610
|
+
let changeSerialId;
|
|
1611
|
+
if (hasFundingInputs) {
|
|
1612
|
+
// Handle FundingInput[] directly (for DLC inputs)
|
|
1613
|
+
const fundingInputs = fixedInputs;
|
|
1614
|
+
// Generate addresses directly since we're bypassing Initialize()
|
|
1615
|
+
const payoutAddress = await this.client.wallet.getUnusedAddress(false);
|
|
1616
|
+
payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
|
|
1617
|
+
const changeAddress = await this.client.wallet.getUnusedAddress(true);
|
|
1618
|
+
changeSPK = bitcoinjs_lib_1.address.toOutputScript(changeAddress.address, network);
|
|
1619
|
+
const fundingAddress = await this.client.wallet.getUnusedAddress(false);
|
|
1620
|
+
fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
1621
|
+
if (fundingAddress.address === payoutAddress.address)
|
|
1622
|
+
throw Error('Address reuse');
|
|
1623
|
+
payoutSerialId = (0, Utils_1.generateSerialId)();
|
|
1624
|
+
changeSerialId = (0, Utils_1.generateSerialId)();
|
|
1625
|
+
_fundingInputs = fundingInputs;
|
|
1626
|
+
}
|
|
1627
|
+
else {
|
|
1628
|
+
// Handle Input[] through existing Initialize() flow
|
|
1629
|
+
const initResult = await this.Initialize(offerCollateralSatoshis, feeRatePerVb, fixedInputs, inputSupplementationMode || Input_1.InputSupplementationMode.Required);
|
|
1630
|
+
fundingPubKey = initResult.fundingPubKey;
|
|
1631
|
+
payoutSPK = initResult.payoutSPK;
|
|
1632
|
+
payoutSerialId = initResult.payoutSerialId;
|
|
1633
|
+
_fundingInputs = initResult.fundingInputs;
|
|
1634
|
+
changeSPK = initResult.changeSPK;
|
|
1635
|
+
changeSerialId = initResult.changeSerialId;
|
|
1636
|
+
}
|
|
1352
1637
|
_fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
|
|
1353
1638
|
const fundingInputs = _fundingInputs.map((input) => input);
|
|
1354
1639
|
fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
|
|
@@ -1369,8 +1654,11 @@ Payout Group not found even with brute force search');
|
|
|
1369
1654
|
dlcOffer.feeRatePerVb = feeRatePerVb;
|
|
1370
1655
|
dlcOffer.cetLocktime = cetLocktime;
|
|
1371
1656
|
dlcOffer.refundLocktime = refundLocktime;
|
|
1657
|
+
if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
|
|
1658
|
+
dlcOffer.markAsSingleFunded();
|
|
1659
|
+
}
|
|
1372
1660
|
(0, assert_1.default)((() => {
|
|
1373
|
-
const finalizer = new
|
|
1661
|
+
const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, null, null, null, dlcOffer.feeRatePerVb);
|
|
1374
1662
|
const funding = fundingInputs.reduce((total, input) => {
|
|
1375
1663
|
return total + input.prevTx.outputs[input.prevTxVout].value.sats;
|
|
1376
1664
|
}, BigInt(0));
|
|
@@ -1417,8 +1705,11 @@ Payout Group not found even with brute force search');
|
|
|
1417
1705
|
dlcOffer.feeRatePerVb = feeRatePerVb;
|
|
1418
1706
|
dlcOffer.cetLocktime = cetLocktime;
|
|
1419
1707
|
dlcOffer.refundLocktime = refundLocktime;
|
|
1708
|
+
if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
|
|
1709
|
+
dlcOffer.markAsSingleFunded();
|
|
1710
|
+
}
|
|
1420
1711
|
(0, assert_1.default)((() => {
|
|
1421
|
-
const finalizer = new
|
|
1712
|
+
const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, null, null, null, dlcOffer.feeRatePerVb);
|
|
1422
1713
|
const funding = fundingInputs.reduce((total, input) => {
|
|
1423
1714
|
return total + input.prevTx.outputs[input.prevTxVout].value.sats;
|
|
1424
1715
|
}, BigInt(0));
|
|
@@ -1430,7 +1721,7 @@ Payout Group not found even with brute force search');
|
|
|
1430
1721
|
return dlcOffers;
|
|
1431
1722
|
}
|
|
1432
1723
|
/**
|
|
1433
|
-
* Accept DLC Offer
|
|
1724
|
+
* Accept DLC Offer (supports single-funded DLCs when accept collateral is 0)
|
|
1434
1725
|
* @param _dlcOffer Dlc Offer Message
|
|
1435
1726
|
* @param fixedInputs Optional inputs to use for Funding Inputs
|
|
1436
1727
|
* @returns {Promise<AcceptDlcOfferResponse}
|
|
@@ -1441,11 +1732,81 @@ Payout Group not found even with brute force search');
|
|
|
1441
1732
|
const acceptCollateralSatoshis = dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral;
|
|
1442
1733
|
(0, assert_1.default)(acceptCollateralSatoshis ===
|
|
1443
1734
|
dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral, 'acceptCollaterialSatoshis should equal totalCollateral - offerCollateralSatoshis');
|
|
1444
|
-
|
|
1735
|
+
let fundingPubKey;
|
|
1736
|
+
let payoutSPK;
|
|
1737
|
+
let payoutSerialId;
|
|
1738
|
+
let fundingInputs;
|
|
1739
|
+
let changeSPK;
|
|
1740
|
+
let changeSerialId;
|
|
1741
|
+
if (acceptCollateralSatoshis === BigInt(0)) {
|
|
1742
|
+
// Single-funded DLC: accept side provides no funding
|
|
1743
|
+
const network = await this.getConnectedNetwork();
|
|
1744
|
+
// Still need payout address for receiving DLC outcomes
|
|
1745
|
+
const payoutAddress = await this.client.wallet.getUnusedAddress(false);
|
|
1746
|
+
payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
|
|
1747
|
+
// Generate funding pubkey for DLC contract construction
|
|
1748
|
+
const fundingAddress = await this.client.wallet.getUnusedAddress(false);
|
|
1749
|
+
fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
1750
|
+
// Generate change address (even though not used)
|
|
1751
|
+
const changeAddress = await this.client.wallet.getUnusedAddress(true);
|
|
1752
|
+
changeSPK = bitcoinjs_lib_1.address.toOutputScript(changeAddress.address, network);
|
|
1753
|
+
if (fundingAddress.address === payoutAddress.address)
|
|
1754
|
+
throw Error('Address reuse');
|
|
1755
|
+
// Generate serial IDs
|
|
1756
|
+
payoutSerialId = (0, Utils_1.generateSerialId)();
|
|
1757
|
+
changeSerialId = (0, Utils_1.generateSerialId)();
|
|
1758
|
+
// No funding inputs for single-funded DLC
|
|
1759
|
+
fundingInputs = [];
|
|
1760
|
+
}
|
|
1761
|
+
else {
|
|
1762
|
+
// Standard DLC: accept side provides funding
|
|
1763
|
+
// Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
|
|
1764
|
+
const hasFundingInputs = fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
|
|
1765
|
+
let initResult;
|
|
1766
|
+
if (hasFundingInputs) {
|
|
1767
|
+
// Handle FundingInput[] directly (for DLC inputs)
|
|
1768
|
+
const fundingInputs = fixedInputs;
|
|
1769
|
+
const network = await this.getConnectedNetwork();
|
|
1770
|
+
// Generate addresses directly since we're bypassing Initialize()
|
|
1771
|
+
const payoutAddress = await this.client.wallet.getUnusedAddress(false);
|
|
1772
|
+
const payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
|
|
1773
|
+
const changeAddress = await this.client.wallet.getUnusedAddress(true);
|
|
1774
|
+
const changeSPK = bitcoinjs_lib_1.address.toOutputScript(changeAddress.address, network);
|
|
1775
|
+
const fundingAddress = await this.client.wallet.getUnusedAddress(false);
|
|
1776
|
+
const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
|
|
1777
|
+
if (fundingAddress.address === payoutAddress.address)
|
|
1778
|
+
throw Error('Address reuse');
|
|
1779
|
+
const payoutSerialId = (0, Utils_1.generateSerialId)();
|
|
1780
|
+
const changeSerialId = (0, Utils_1.generateSerialId)();
|
|
1781
|
+
initResult = {
|
|
1782
|
+
fundingPubKey,
|
|
1783
|
+
payoutSPK,
|
|
1784
|
+
payoutSerialId,
|
|
1785
|
+
fundingInputs,
|
|
1786
|
+
changeSPK,
|
|
1787
|
+
changeSerialId,
|
|
1788
|
+
};
|
|
1789
|
+
}
|
|
1790
|
+
else {
|
|
1791
|
+
// Handle Input[] through existing Initialize() flow
|
|
1792
|
+
// Use InputSupplementationMode.None when fixed inputs are provided
|
|
1793
|
+
// to avoid wallet lookup issues with unusual addresses
|
|
1794
|
+
const supplementationMode = fixedInputs && fixedInputs.length > 0
|
|
1795
|
+
? Input_1.InputSupplementationMode.None
|
|
1796
|
+
: Input_1.InputSupplementationMode.Required;
|
|
1797
|
+
initResult = await this.Initialize(acceptCollateralSatoshis, dlcOffer.feeRatePerVb, fixedInputs, supplementationMode);
|
|
1798
|
+
}
|
|
1799
|
+
fundingPubKey = initResult.fundingPubKey;
|
|
1800
|
+
payoutSPK = initResult.payoutSPK;
|
|
1801
|
+
payoutSerialId = initResult.payoutSerialId;
|
|
1802
|
+
changeSPK = initResult.changeSPK;
|
|
1803
|
+
changeSerialId = initResult.changeSerialId;
|
|
1804
|
+
const _fundingInputs = initResult.fundingInputs;
|
|
1805
|
+
_fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
|
|
1806
|
+
fundingInputs = _fundingInputs.map((input) => input);
|
|
1807
|
+
fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
|
|
1808
|
+
}
|
|
1445
1809
|
(0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
|
|
1446
|
-
_fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
|
|
1447
|
-
const fundingInputs = _fundingInputs.map((input) => input);
|
|
1448
|
-
fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
|
|
1449
1810
|
const dlcAccept = new messaging_1.DlcAccept();
|
|
1450
1811
|
dlcAccept.temporaryContractId = (0, crypto_1.sha256)(dlcOffer.serialize());
|
|
1451
1812
|
dlcAccept.acceptCollateral = acceptCollateralSatoshis;
|
|
@@ -1465,14 +1826,19 @@ Payout Group not found even with brute force search');
|
|
|
1465
1826
|
];
|
|
1466
1827
|
return new Set(ids).size === ids.length;
|
|
1467
1828
|
})(), 'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique');
|
|
1829
|
+
if (dlcOffer.singleFunded)
|
|
1830
|
+
dlcAccept.markAsSingleFunded();
|
|
1468
1831
|
dlcAccept.validate();
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1832
|
+
// Only validate funding requirements if accept side is providing collateral
|
|
1833
|
+
if (acceptCollateralSatoshis > BigInt(0)) {
|
|
1834
|
+
(0, assert_1.default)((() => {
|
|
1835
|
+
const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, dlcAccept.fundingInputs, dlcAccept.payoutSpk, dlcAccept.changeSpk, dlcOffer.feeRatePerVb);
|
|
1836
|
+
const funding = fundingInputs.reduce((total, input) => {
|
|
1837
|
+
return total + input.prevTx.outputs[input.prevTxVout].value.sats;
|
|
1838
|
+
}, BigInt(0));
|
|
1839
|
+
return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
|
|
1840
|
+
})(), 'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees');
|
|
1841
|
+
}
|
|
1476
1842
|
const { dlcTransactions, messagesList } = await this.createDlcTxs(dlcOffer, dlcAccept);
|
|
1477
1843
|
const { cetSignatures, refundSignature } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, false);
|
|
1478
1844
|
const _dlcTransactions = dlcTransactions;
|
|
@@ -1525,7 +1891,7 @@ Payout Group not found even with brute force search');
|
|
|
1525
1891
|
})(), 'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique');
|
|
1526
1892
|
dlcAccept.validate();
|
|
1527
1893
|
(0, assert_1.default)((() => {
|
|
1528
|
-
const finalizer = new
|
|
1894
|
+
const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, dlcAccept.fundingInputs, dlcAccept.payoutSpk, dlcAccept.changeSpk, dlcOffer.feeRatePerVb);
|
|
1529
1895
|
const funding = fundingInputs.reduce((total, input) => {
|
|
1530
1896
|
return total + input.prevTx.outputs[input.prevTxVout].value.sats;
|
|
1531
1897
|
}, BigInt(0));
|
|
@@ -1554,11 +1920,7 @@ Payout Group not found even with brute force search');
|
|
|
1554
1920
|
* @param _dlcAccept Dlc Accept Message
|
|
1555
1921
|
* @returns {Promise<SignDlcAcceptResponse}
|
|
1556
1922
|
*/
|
|
1557
|
-
async signDlcAccept(
|
|
1558
|
-
const { dlcOffer, dlcAccept } = (0, Utils_1.checkTypes)({
|
|
1559
|
-
_dlcOffer,
|
|
1560
|
-
_dlcAccept,
|
|
1561
|
-
});
|
|
1923
|
+
async signDlcAccept(dlcOffer, dlcAccept) {
|
|
1562
1924
|
dlcOffer.validate();
|
|
1563
1925
|
dlcAccept.validate();
|
|
1564
1926
|
(0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
|
|
@@ -1764,20 +2126,18 @@ Payout Group not found even with brute force search');
|
|
|
1764
2126
|
// Initiate and build PSBT
|
|
1765
2127
|
let inputs = _inputs;
|
|
1766
2128
|
if (!_inputs) {
|
|
1767
|
-
const tempInputs = await this.
|
|
2129
|
+
const tempInputs = await this.GetInputsForAmountWithMode([BigInt(20000)], dlcOffer.feeRatePerVb, _inputs || [], Input_1.InputSupplementationMode.Required);
|
|
1768
2130
|
_inputs = tempInputs;
|
|
1769
2131
|
}
|
|
1770
|
-
inputs
|
|
1771
|
-
|
|
1772
|
-
...input,
|
|
1773
|
-
inputSerialId: input.inputSerialId || (0, Utils_1.generateSerialId)(),
|
|
1774
|
-
toUtxo: input.toUtxo,
|
|
1775
|
-
};
|
|
1776
|
-
});
|
|
1777
|
-
const pubkeys = await Promise.all(inputs.map(async (input) => {
|
|
2132
|
+
// Ensure all inputs have derivation paths by fetching from wallet
|
|
2133
|
+
const inputsWithPaths = await Promise.all(_inputs.map(async (input) => {
|
|
1778
2134
|
const address = await this.getMethod('getWalletAddress')(input.address);
|
|
1779
|
-
|
|
2135
|
+
const inputWithPath = new types_1.Input(input.txid, input.vout, input.address, input.amount, input.value, input.derivationPath || address.derivationPath, // Use derivationPath from wallet if not set
|
|
2136
|
+
input.maxWitnessLength, input.redeemScript, input.inputSerialId || (0, Utils_1.generateSerialId)(), input.scriptPubKey, input.label, input.confirmations, input.spendable, input.solvable, input.safe, input.dlcInput);
|
|
2137
|
+
return { input: inputWithPath, address };
|
|
1780
2138
|
}));
|
|
2139
|
+
inputs = inputsWithPaths.map((item) => item.input);
|
|
2140
|
+
const pubkeys = inputsWithPaths.map((item) => Buffer.from(item.address.publicKey, 'hex'));
|
|
1781
2141
|
const fundingInputSerialId = (0, Utils_1.generateSerialId)();
|
|
1782
2142
|
// Make temporary array to hold all inputs and then sort them
|
|
1783
2143
|
// this method can be improved later
|
|
@@ -1788,7 +2148,7 @@ Payout Group not found even with brute force search');
|
|
|
1788
2148
|
sequence: 0,
|
|
1789
2149
|
witnessUtxo: {
|
|
1790
2150
|
script: paymentVariant.output,
|
|
1791
|
-
value: Number(
|
|
2151
|
+
value: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
1792
2152
|
},
|
|
1793
2153
|
witnessScript: paymentVariant.redeem.output,
|
|
1794
2154
|
inputSerialId: fundingInputSerialId,
|
|
@@ -1817,11 +2177,11 @@ Payout Group not found even with brute force search');
|
|
|
1817
2177
|
// Get index of fundingInput
|
|
1818
2178
|
const fundingInputIndex = sortedPsbtInputs.findIndex((input) => input.inputSerialId === fundingInputSerialId);
|
|
1819
2179
|
// add to psbt
|
|
1820
|
-
sortedPsbtInputs.forEach((input
|
|
2180
|
+
sortedPsbtInputs.forEach((input) => psbt.addInput(input));
|
|
1821
2181
|
const fundingInputs = await Promise.all(inputs.map(async (input) => {
|
|
1822
2182
|
return this.inputToFundingInput(input);
|
|
1823
2183
|
}));
|
|
1824
|
-
const finalizer = new
|
|
2184
|
+
const finalizer = new core_2.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
|
|
1825
2185
|
const closeInputAmount = BigInt(inputs.reduce((acc, val) => acc + val.value, 0));
|
|
1826
2186
|
const offerPayoutValue = isOfferer
|
|
1827
2187
|
? closeInputAmount +
|
|
@@ -1851,6 +2211,9 @@ Payout Group not found even with brute force search');
|
|
|
1851
2211
|
if (i === fundingInputIndex)
|
|
1852
2212
|
return;
|
|
1853
2213
|
// derive keypair
|
|
2214
|
+
if (!input.derivationPath) {
|
|
2215
|
+
throw new Error(`Missing derivation path for input ${i}`);
|
|
2216
|
+
}
|
|
1854
2217
|
const keyPair = await this.getMethod('keyPair')(input.derivationPath);
|
|
1855
2218
|
psbt.signInput(i, keyPair);
|
|
1856
2219
|
}));
|
|
@@ -1909,7 +2272,7 @@ Payout Group not found even with brute force search');
|
|
|
1909
2272
|
throw Error('funding inputs not supported on BatchDlcClose'); // TODO support multiple funding inputs
|
|
1910
2273
|
const fundingInputSerialId = (0, Utils_1.generateSerialId)();
|
|
1911
2274
|
const fundingInputs = []; // TODO: support multiple funding inputs
|
|
1912
|
-
const finalizer = new
|
|
2275
|
+
const finalizer = new core_2.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
|
|
1913
2276
|
// Generate keypair to sign inputs
|
|
1914
2277
|
const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, isOfferer);
|
|
1915
2278
|
const closeInputAmount = BigInt(0); // TODO support multiple funding inputs
|
|
@@ -2021,13 +2384,13 @@ Payout Group not found even with brute force search');
|
|
|
2021
2384
|
sequence: 0,
|
|
2022
2385
|
witnessUtxo: {
|
|
2023
2386
|
script: paymentVariant.output,
|
|
2024
|
-
value: Number(
|
|
2387
|
+
value: Number(this.getFundOutputValueSats(dlcTxs)),
|
|
2025
2388
|
},
|
|
2026
2389
|
witnessScript: paymentVariant.redeem.output,
|
|
2027
2390
|
inputSerialId: dlcClose.fundInputSerialId,
|
|
2028
2391
|
});
|
|
2029
2392
|
// add all dlc close inputs
|
|
2030
|
-
dlcClose.fundingInputs.forEach((input
|
|
2393
|
+
dlcClose.fundingInputs.forEach((input) => {
|
|
2031
2394
|
psbtInputs.push({
|
|
2032
2395
|
hash: input.prevTx.txId.serialize(),
|
|
2033
2396
|
index: input.prevTxVout,
|
|
@@ -2062,7 +2425,7 @@ Payout Group not found even with brute force search');
|
|
|
2062
2425
|
address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcAccept.payoutSpk : dlcOffer.payoutSpk, network),
|
|
2063
2426
|
});
|
|
2064
2427
|
// add to psbt
|
|
2065
|
-
sortedPsbtInputs.forEach((input
|
|
2428
|
+
sortedPsbtInputs.forEach((input) => psbt.addInput(input));
|
|
2066
2429
|
const offerer = await this.isOfferer(dlcOffer, dlcAccept);
|
|
2067
2430
|
// Generate keypair to sign inputs
|
|
2068
2431
|
const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, offerer);
|
|
@@ -2167,6 +2530,22 @@ Payout Group not found even with brute force search');
|
|
|
2167
2530
|
await this.CfdLoaded();
|
|
2168
2531
|
return this._cfdDlcJs.VerifyRefundTxSignature(jsonObject);
|
|
2169
2532
|
}
|
|
2533
|
+
async CreateSplicedDlcTransactions(jsonObject) {
|
|
2534
|
+
await this.CfdLoaded();
|
|
2535
|
+
return this._cfdDlcJs.CreateSplicedDlcTransactions(jsonObject);
|
|
2536
|
+
}
|
|
2537
|
+
async GetRawDlcFundingInputSignature(jsonObject) {
|
|
2538
|
+
await this.CfdLoaded();
|
|
2539
|
+
return this._cfdDlcJs.GetRawDlcFundingInputSignature(jsonObject);
|
|
2540
|
+
}
|
|
2541
|
+
async SignDlcFundingInput(jsonObject) {
|
|
2542
|
+
await this.CfdLoaded();
|
|
2543
|
+
return this._cfdDlcJs.SignDlcFundingInput(jsonObject);
|
|
2544
|
+
}
|
|
2545
|
+
async VerifyDlcFundingInputSignature(jsonObject) {
|
|
2546
|
+
await this.CfdLoaded();
|
|
2547
|
+
return this._cfdDlcJs.VerifyDlcFundingInputSignature(jsonObject);
|
|
2548
|
+
}
|
|
2170
2549
|
async fundingInputToInput(_input, findDerivationPath = true) {
|
|
2171
2550
|
(0, assert_1.default)(_input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0');
|
|
2172
2551
|
const network = await this.getConnectedNetwork();
|
|
@@ -2184,21 +2563,22 @@ Payout Group not found even with brute force search');
|
|
|
2184
2563
|
derivationPath = inputAddress.derivationPath;
|
|
2185
2564
|
}
|
|
2186
2565
|
}
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2566
|
+
// Check if this FundingInput has DLC input information to preserve
|
|
2567
|
+
const dlcInputMessage = input.dlcInput;
|
|
2568
|
+
let dlcInputInfo;
|
|
2569
|
+
if (dlcInputMessage) {
|
|
2570
|
+
dlcInputInfo = {
|
|
2571
|
+
localFundPubkey: dlcInputMessage.localFundPubkey.toString('hex'),
|
|
2572
|
+
remoteFundPubkey: dlcInputMessage.remoteFundPubkey.toString('hex'),
|
|
2573
|
+
contractId: dlcInputMessage.contractId.toString('hex'),
|
|
2574
|
+
};
|
|
2575
|
+
}
|
|
2576
|
+
return new types_1.Input(prevTx.txId.toString(), input.prevTxVout, _address, prevTxOut.value.bitcoin, Number(prevTxOut.value.sats), derivationPath, input.maxWitnessLen, input.redeemScript ? input.redeemScript.toString('hex') : '', input.inputSerialId, scriptPubKey.toString('hex'), undefined, // label
|
|
2577
|
+
undefined, // confirmations
|
|
2578
|
+
undefined, // spendable
|
|
2579
|
+
undefined, // solvable
|
|
2580
|
+
undefined, // safe
|
|
2581
|
+
dlcInputInfo);
|
|
2202
2582
|
}
|
|
2203
2583
|
async inputToFundingInput(input) {
|
|
2204
2584
|
const fundingInput = new messaging_1.FundingInput();
|
|
@@ -2228,12 +2608,99 @@ Payout Group not found even with brute force search');
|
|
|
2228
2608
|
fundingInput.inputSerialId = input.inputSerialId
|
|
2229
2609
|
? input.inputSerialId
|
|
2230
2610
|
: (0, Utils_1.generateSerialId)();
|
|
2611
|
+
// Preserve DLC input information if present
|
|
2612
|
+
if (input.isDlcInput()) {
|
|
2613
|
+
const dlcInputInfo = input.dlcInput;
|
|
2614
|
+
const dlcInput = new messaging_1.DlcInput();
|
|
2615
|
+
dlcInput.localFundPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
|
|
2616
|
+
dlcInput.remoteFundPubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
|
|
2617
|
+
dlcInput.contractId = Buffer.alloc(32); // Placeholder contract ID
|
|
2618
|
+
fundingInput.dlcInput = dlcInput;
|
|
2619
|
+
}
|
|
2231
2620
|
return fundingInput;
|
|
2232
2621
|
}
|
|
2233
2622
|
async getConnectedNetwork() {
|
|
2234
2623
|
return this._network;
|
|
2235
2624
|
}
|
|
2625
|
+
/**
|
|
2626
|
+
* Calculate the maximum collateral possible with given inputs
|
|
2627
|
+
* @param inputs Array of Input objects to use for funding
|
|
2628
|
+
* @param feeRatePerVb Fee rate in satoshis per virtual byte
|
|
2629
|
+
* @param contractCount Number of DLC contracts (default: 1)
|
|
2630
|
+
* @returns Maximum collateral amount in satoshis
|
|
2631
|
+
*/
|
|
2632
|
+
async calculateMaxCollateral(inputs, feeRatePerVb, contractCount = 1) {
|
|
2633
|
+
if (inputs.length === 0) {
|
|
2634
|
+
return BigInt(0);
|
|
2635
|
+
}
|
|
2636
|
+
try {
|
|
2637
|
+
// Convert Input[] to FundingInput[]
|
|
2638
|
+
const fundingInputs = await Promise.all(inputs.map((input) => this.inputToFundingInput(input)));
|
|
2639
|
+
// Use node-dlc's calculateMaxCollateral function
|
|
2640
|
+
// For single-funded DLC, pass only offerer inputs and fee rate
|
|
2641
|
+
return core_1.BatchDlcTxBuilder.calculateMaxCollateral(fundingInputs, feeRatePerVb, contractCount);
|
|
2642
|
+
}
|
|
2643
|
+
catch (error) {
|
|
2644
|
+
// If calculation fails, return 0 to indicate insufficient funds
|
|
2645
|
+
console.warn('calculateMaxCollateral failed:', error);
|
|
2646
|
+
return BigInt(0);
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
/**
|
|
2650
|
+
* Create a funding input with DLC input information for splicing
|
|
2651
|
+
* @param dlcInputInfo DLC input information
|
|
2652
|
+
* @param fundingTxHex Raw transaction hex of the funding transaction
|
|
2653
|
+
*/
|
|
2654
|
+
async createDlcFundingInput(dlcInputInfo, fundingTxHex) {
|
|
2655
|
+
const fundingInput = new messaging_1.FundingInput();
|
|
2656
|
+
const tx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(fundingTxHex));
|
|
2657
|
+
fundingInput.prevTx = tx;
|
|
2658
|
+
fundingInput.prevTxVout = dlcInputInfo.fundVout;
|
|
2659
|
+
fundingInput.sequence = bitcoin_1.Sequence.default();
|
|
2660
|
+
fundingInput.maxWitnessLen = dlcInputInfo.maxWitnessLength || 220;
|
|
2661
|
+
fundingInput.redeemScript = Buffer.from('', 'hex'); // Empty for P2WSH
|
|
2662
|
+
fundingInput.inputSerialId = BigInt(dlcInputInfo.inputSerialId || (0, Utils_1.generateSerialId)());
|
|
2663
|
+
// Create the DLC multisig script for address generation
|
|
2664
|
+
const localPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
|
|
2665
|
+
const remotePubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
|
|
2666
|
+
// Use the same deterministic ordering as cfd-dlc-js: lexicographic by hex
|
|
2667
|
+
// This matches GetOrderedPubkeys() in cfddlc_transactions.cpp
|
|
2668
|
+
const orderedPubkeys = dlcInputInfo.localFundPubkey < dlcInputInfo.remoteFundPubkey
|
|
2669
|
+
? [localPubkey, remotePubkey]
|
|
2670
|
+
: [remotePubkey, localPubkey];
|
|
2671
|
+
const network = await this.getConnectedNetwork();
|
|
2672
|
+
// Create 2-of-2 multisig payment using deterministic ordering
|
|
2673
|
+
const p2ms = bitcoinjs_lib_1.payments.p2ms({
|
|
2674
|
+
m: 2,
|
|
2675
|
+
pubkeys: orderedPubkeys,
|
|
2676
|
+
network,
|
|
2677
|
+
});
|
|
2678
|
+
const paymentVariant = bitcoinjs_lib_1.payments.p2wsh({
|
|
2679
|
+
redeem: p2ms,
|
|
2680
|
+
network,
|
|
2681
|
+
});
|
|
2682
|
+
const multisigAddress = paymentVariant.address;
|
|
2683
|
+
// Verify this matches the actual funding output address
|
|
2684
|
+
const actualFundingOutput = tx.outputs[dlcInputInfo.fundVout];
|
|
2685
|
+
const actualFundingAddress = bitcoinjs_lib_1.address.fromOutputScript(actualFundingOutput.scriptPubKey.serialize().slice(1), network);
|
|
2686
|
+
if (actualFundingAddress !== multisigAddress) {
|
|
2687
|
+
throw new Error(`DLC funding address mismatch. ` +
|
|
2688
|
+
`Expected: ${actualFundingAddress}, ` +
|
|
2689
|
+
`Constructed: ${multisigAddress}`);
|
|
2690
|
+
}
|
|
2691
|
+
// Add toUtxo method that's expected by GetInputsForAmount
|
|
2692
|
+
fundingInput.toUtxo = () => {
|
|
2693
|
+
return new types_1.Utxo(dlcInputInfo.fundTxid, dlcInputInfo.fundVout, types_1.Amount.FromSatoshis(Number(dlcInputInfo.fundAmount)), multisigAddress, '', // DLC inputs don't have derivation paths
|
|
2694
|
+
dlcInputInfo.maxWitnessLength || 220, fundingInput.inputSerialId);
|
|
2695
|
+
};
|
|
2696
|
+
// Create proper DlcInput object for splicing detection and signing
|
|
2697
|
+
const dlcInput = new messaging_1.DlcInput();
|
|
2698
|
+
dlcInput.localFundPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
|
|
2699
|
+
dlcInput.remoteFundPubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
|
|
2700
|
+
dlcInput.contractId = Buffer.from(dlcInputInfo.contractId, 'hex');
|
|
2701
|
+
fundingInput.dlcInput = dlcInput;
|
|
2702
|
+
return fundingInput;
|
|
2703
|
+
}
|
|
2236
2704
|
}
|
|
2237
2705
|
exports.default = BitcoinDlcProvider;
|
|
2238
|
-
const BurnAddress = 'bcrt1qxcjufgh2jarkp2qkx68azh08w9v5gah8u6es8s';
|
|
2239
2706
|
//# sourceMappingURL=BitcoinDlcProvider.js.map
|