@btc-vision/bitcoin 6.5.6 → 7.0.0-alpha.0
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/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
- package/benchmark/psbt-2000-inputs.bench.ts +178 -0
- package/benchmark/signing.bench.ts +147 -0
- package/browser/address.d.ts +56 -9
- package/browser/address.d.ts.map +1 -0
- package/browser/bech32utils.d.ts +9 -1
- package/browser/bech32utils.d.ts.map +1 -0
- package/browser/bip66.d.ts +11 -6
- package/browser/bip66.d.ts.map +1 -0
- package/browser/block.d.ts +117 -11
- package/browser/block.d.ts.map +1 -0
- package/browser/branded.d.ts +20 -0
- package/browser/branded.d.ts.map +1 -0
- package/browser/crypto/crypto.d.ts +1 -0
- package/browser/crypto/crypto.d.ts.map +1 -0
- package/browser/crypto.d.ts +46 -7
- package/browser/crypto.d.ts.map +1 -0
- package/browser/ecc/context.d.ts +129 -0
- package/browser/ecc/context.d.ts.map +1 -0
- package/browser/ecc/index.d.ts +11 -0
- package/browser/ecc/index.d.ts.map +1 -0
- package/browser/ecc/types.d.ts +128 -0
- package/browser/ecc/types.d.ts.map +1 -0
- package/browser/ecpair.d.ts +99 -0
- package/browser/errors.d.ts +124 -0
- package/browser/errors.d.ts.map +1 -0
- package/browser/index.d.ts +32 -5
- package/browser/index.d.ts.map +1 -0
- package/browser/index.js +12482 -101
- package/browser/io/BinaryReader.d.ts +276 -0
- package/browser/io/BinaryReader.d.ts.map +1 -0
- package/browser/io/BinaryWriter.d.ts +391 -0
- package/browser/io/BinaryWriter.d.ts.map +1 -0
- package/browser/io/MemoryPool.d.ts +220 -0
- package/browser/io/MemoryPool.d.ts.map +1 -0
- package/browser/io/base64.d.ts +13 -0
- package/browser/io/base64.d.ts.map +1 -0
- package/browser/io/hex.d.ts +67 -0
- package/browser/io/hex.d.ts.map +1 -0
- package/browser/io/index.d.ts +17 -0
- package/browser/io/index.d.ts.map +1 -0
- package/browser/io/utils.d.ts +199 -0
- package/browser/io/utils.d.ts.map +1 -0
- package/browser/merkle.d.ts +10 -1
- package/browser/merkle.d.ts.map +1 -0
- package/browser/networks.d.ts +70 -9
- package/browser/networks.d.ts.map +1 -0
- package/browser/opcodes.d.ts +1 -0
- package/browser/opcodes.d.ts.map +1 -0
- package/browser/payments/bip341.d.ts +35 -9
- package/browser/payments/bip341.d.ts.map +1 -0
- package/browser/payments/embed.d.ts +112 -1
- package/browser/payments/embed.d.ts.map +1 -0
- package/browser/payments/index.d.ts +17 -10
- package/browser/payments/index.d.ts.map +1 -0
- package/browser/payments/p2ms.d.ts +150 -0
- package/browser/payments/p2ms.d.ts.map +1 -0
- package/browser/payments/p2op.d.ts +150 -24
- package/browser/payments/p2op.d.ts.map +1 -0
- package/browser/payments/p2pk.d.ts +154 -1
- package/browser/payments/p2pk.d.ts.map +1 -0
- package/browser/payments/p2pkh.d.ts +176 -1
- package/browser/payments/p2pkh.d.ts.map +1 -0
- package/browser/payments/p2sh.d.ts +150 -1
- package/browser/payments/p2sh.d.ts.map +1 -0
- package/browser/payments/p2tr.d.ts +185 -1
- package/browser/payments/p2tr.d.ts.map +1 -0
- package/browser/payments/p2wpkh.d.ts +161 -1
- package/browser/payments/p2wpkh.d.ts.map +1 -0
- package/browser/payments/p2wsh.d.ts +146 -1
- package/browser/payments/p2wsh.d.ts.map +1 -0
- package/browser/payments/types.d.ts +94 -64
- package/browser/payments/types.d.ts.map +1 -0
- package/browser/psbt/bip371.d.ts +34 -8
- package/browser/psbt/bip371.d.ts.map +1 -0
- package/browser/psbt/psbtutils.d.ts +56 -16
- package/browser/psbt/psbtutils.d.ts.map +1 -0
- package/browser/psbt/types.d.ts +245 -0
- package/browser/psbt/types.d.ts.map +1 -0
- package/browser/psbt/utils.d.ts +64 -0
- package/browser/psbt/utils.d.ts.map +1 -0
- package/browser/psbt/validation.d.ts +84 -0
- package/browser/psbt/validation.d.ts.map +1 -0
- package/browser/psbt.d.ts +82 -118
- package/browser/psbt.d.ts.map +1 -0
- package/browser/pubkey.d.ts +27 -6
- package/browser/pubkey.d.ts.map +1 -0
- package/browser/push_data.d.ts +24 -2
- package/browser/push_data.d.ts.map +1 -0
- package/browser/script.d.ts +33 -8
- package/browser/script.d.ts.map +1 -0
- package/browser/script_number.d.ts +17 -0
- package/browser/script_number.d.ts.map +1 -0
- package/browser/script_signature.d.ts +23 -5
- package/browser/script_signature.d.ts.map +1 -0
- package/browser/transaction.d.ts +160 -18
- package/browser/transaction.d.ts.map +1 -0
- package/browser/types.d.ts +36 -38
- package/browser/types.d.ts.map +1 -0
- package/browser/workers/WorkerSigningPool.d.ts +143 -0
- package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
- package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
- package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
- package/browser/workers/ecc-bundle.d.ts +25 -0
- package/browser/workers/ecc-bundle.d.ts.map +1 -0
- package/browser/workers/index.d.ts +91 -0
- package/browser/workers/index.d.ts.map +1 -0
- package/browser/workers/psbt-parallel.d.ts +88 -0
- package/browser/workers/psbt-parallel.d.ts.map +1 -0
- package/browser/workers/signing-worker.d.ts +37 -0
- package/browser/workers/signing-worker.d.ts.map +1 -0
- package/browser/workers/types.d.ts +365 -0
- package/browser/workers/types.d.ts.map +1 -0
- package/build/address.d.ts +57 -10
- package/build/address.d.ts.map +1 -0
- package/build/address.js +80 -24
- package/build/address.js.map +1 -0
- package/build/bech32utils.d.ts +9 -1
- package/build/bech32utils.d.ts.map +1 -0
- package/build/bech32utils.js +10 -2
- package/build/bech32utils.js.map +1 -0
- package/build/bip66.d.ts +11 -6
- package/build/bip66.d.ts.map +1 -0
- package/build/bip66.js +32 -3
- package/build/bip66.js.map +1 -0
- package/build/block.d.ts +117 -11
- package/build/block.d.ts.map +1 -0
- package/build/block.js +204 -72
- package/build/block.js.map +1 -0
- package/build/branded.d.ts +20 -0
- package/build/branded.d.ts.map +1 -0
- package/build/branded.js +7 -0
- package/build/branded.js.map +1 -0
- package/build/crypto/crypto.d.ts +1 -0
- package/build/crypto/crypto.d.ts.map +1 -0
- package/build/crypto/crypto.js +1 -0
- package/build/crypto/crypto.js.map +1 -0
- package/build/crypto.d.ts +46 -7
- package/build/crypto.d.ts.map +1 -0
- package/build/crypto.js +65 -20
- package/build/crypto.js.map +1 -0
- package/build/ecc/context.d.ts +135 -0
- package/build/ecc/context.d.ts.map +1 -0
- package/build/ecc/context.js +232 -0
- package/build/ecc/context.js.map +1 -0
- package/build/ecc/index.d.ts +11 -0
- package/build/ecc/index.d.ts.map +1 -0
- package/build/ecc/index.js +11 -0
- package/build/ecc/index.js.map +1 -0
- package/build/ecc/types.d.ts +134 -0
- package/build/ecc/types.d.ts.map +1 -0
- package/build/ecc/types.js +8 -0
- package/build/ecc/types.js.map +1 -0
- package/build/errors.d.ts +124 -0
- package/build/errors.d.ts.map +1 -0
- package/build/errors.js +155 -0
- package/build/errors.js.map +1 -0
- package/build/index.d.ts +32 -5
- package/build/index.d.ts.map +1 -0
- package/build/index.js +26 -3
- package/build/index.js.map +1 -0
- package/build/io/BinaryReader.d.ts +276 -0
- package/build/io/BinaryReader.d.ts.map +1 -0
- package/build/io/BinaryReader.js +425 -0
- package/build/io/BinaryReader.js.map +1 -0
- package/build/io/BinaryWriter.d.ts +391 -0
- package/build/io/BinaryWriter.d.ts.map +1 -0
- package/build/io/BinaryWriter.js +611 -0
- package/build/io/BinaryWriter.js.map +1 -0
- package/build/io/MemoryPool.d.ts +220 -0
- package/build/io/MemoryPool.d.ts.map +1 -0
- package/build/io/MemoryPool.js +309 -0
- package/build/io/MemoryPool.js.map +1 -0
- package/build/io/base64.d.ts +13 -0
- package/build/io/base64.d.ts.map +1 -0
- package/build/io/base64.js +20 -0
- package/build/io/base64.js.map +1 -0
- package/build/io/hex.d.ts +67 -0
- package/build/io/hex.d.ts.map +1 -0
- package/build/io/hex.js +138 -0
- package/build/io/hex.js.map +1 -0
- package/build/io/index.d.ts +17 -0
- package/build/io/index.d.ts.map +1 -0
- package/build/io/index.js +23 -0
- package/build/io/index.js.map +1 -0
- package/build/io/utils.d.ts +199 -0
- package/build/io/utils.d.ts.map +1 -0
- package/build/io/utils.js +271 -0
- package/build/io/utils.js.map +1 -0
- package/build/merkle.d.ts +10 -1
- package/build/merkle.d.ts.map +1 -0
- package/build/merkle.js +12 -1
- package/build/merkle.js.map +1 -0
- package/build/networks.d.ts +70 -9
- package/build/networks.d.ts.map +1 -0
- package/build/networks.js +90 -4
- package/build/networks.js.map +1 -0
- package/build/opcodes.d.ts +1 -0
- package/build/opcodes.d.ts.map +1 -0
- package/build/opcodes.js +1 -0
- package/build/opcodes.js.map +1 -0
- package/build/payments/bip341.d.ts +36 -9
- package/build/payments/bip341.d.ts.map +1 -0
- package/build/payments/bip341.js +35 -15
- package/build/payments/bip341.js.map +1 -0
- package/build/payments/embed.d.ts +120 -1
- package/build/payments/embed.d.ts.map +1 -0
- package/build/payments/embed.js +215 -34
- package/build/payments/embed.js.map +1 -0
- package/build/payments/index.d.ts +17 -10
- package/build/payments/index.d.ts.map +1 -0
- package/build/payments/index.js +20 -10
- package/build/payments/index.js.map +1 -0
- package/build/payments/p2ms.d.ts +159 -1
- package/build/payments/p2ms.d.ts.map +1 -0
- package/build/payments/p2ms.js +427 -108
- package/build/payments/p2ms.js.map +1 -0
- package/build/payments/p2op.d.ts +158 -24
- package/build/payments/p2op.d.ts.map +1 -0
- package/build/payments/p2op.js +379 -93
- package/build/payments/p2op.js.map +1 -0
- package/build/payments/p2pk.d.ts +162 -1
- package/build/payments/p2pk.d.ts.map +1 -0
- package/build/payments/p2pk.js +327 -58
- package/build/payments/p2pk.js.map +1 -0
- package/build/payments/p2pkh.d.ts +185 -1
- package/build/payments/p2pkh.d.ts.map +1 -0
- package/build/payments/p2pkh.js +467 -114
- package/build/payments/p2pkh.js.map +1 -0
- package/build/payments/p2sh.d.ts +159 -1
- package/build/payments/p2sh.d.ts.map +1 -0
- package/build/payments/p2sh.js +500 -152
- package/build/payments/p2sh.js.map +1 -0
- package/build/payments/p2tr.d.ts +193 -1
- package/build/payments/p2tr.d.ts.map +1 -0
- package/build/payments/p2tr.js +592 -174
- package/build/payments/p2tr.js.map +1 -0
- package/build/payments/p2wpkh.d.ts +170 -1
- package/build/payments/p2wpkh.d.ts.map +1 -0
- package/build/payments/p2wpkh.js +429 -104
- package/build/payments/p2wpkh.js.map +1 -0
- package/build/payments/p2wsh.d.ts +155 -1
- package/build/payments/p2wsh.d.ts.map +1 -0
- package/build/payments/p2wsh.js +466 -144
- package/build/payments/p2wsh.js.map +1 -0
- package/build/payments/types.d.ts +98 -64
- package/build/payments/types.d.ts.map +1 -0
- package/build/payments/types.js +17 -13
- package/build/payments/types.js.map +1 -0
- package/build/psbt/bip371.d.ts +35 -9
- package/build/psbt/bip371.d.ts.map +1 -0
- package/build/psbt/bip371.js +113 -28
- package/build/psbt/bip371.js.map +1 -0
- package/build/psbt/psbtutils.d.ts +56 -16
- package/build/psbt/psbtutils.d.ts.map +1 -0
- package/build/psbt/psbtutils.js +71 -16
- package/build/psbt/psbtutils.js.map +1 -0
- package/build/psbt/types.d.ts +249 -0
- package/build/psbt/types.d.ts.map +1 -0
- package/build/psbt/types.js +6 -0
- package/build/psbt/types.js.map +1 -0
- package/build/psbt/utils.d.ts +68 -0
- package/build/psbt/utils.d.ts.map +1 -0
- package/build/psbt/utils.js +171 -0
- package/build/psbt/utils.js.map +1 -0
- package/build/psbt/validation.d.ts +88 -0
- package/build/psbt/validation.d.ts.map +1 -0
- package/build/psbt/validation.js +149 -0
- package/build/psbt/validation.js.map +1 -0
- package/build/psbt.d.ts +84 -120
- package/build/psbt.d.ts.map +1 -0
- package/build/psbt.js +411 -412
- package/build/psbt.js.map +1 -0
- package/build/pubkey.d.ts +27 -6
- package/build/pubkey.d.ts.map +1 -0
- package/build/pubkey.js +36 -12
- package/build/pubkey.js.map +1 -0
- package/build/push_data.d.ts +24 -2
- package/build/push_data.d.ts.map +1 -0
- package/build/push_data.js +44 -12
- package/build/push_data.js.map +1 -0
- package/build/script.d.ts +33 -8
- package/build/script.d.ts.map +1 -0
- package/build/script.js +100 -36
- package/build/script.js.map +1 -0
- package/build/script_number.d.ts +17 -0
- package/build/script_number.d.ts.map +1 -0
- package/build/script_number.js +19 -0
- package/build/script_number.js.map +1 -0
- package/build/script_signature.d.ts +23 -5
- package/build/script_signature.d.ts.map +1 -0
- package/build/script_signature.js +48 -15
- package/build/script_signature.js.map +1 -0
- package/build/transaction.d.ts +160 -18
- package/build/transaction.d.ts.map +1 -0
- package/build/transaction.js +443 -176
- package/build/transaction.js.map +1 -0
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/types.d.ts +36 -38
- package/build/types.d.ts.map +1 -0
- package/build/types.js +175 -57
- package/build/types.js.map +1 -0
- package/build/workers/WorkerSigningPool.d.ts +174 -0
- package/build/workers/WorkerSigningPool.d.ts.map +1 -0
- package/build/workers/WorkerSigningPool.js +553 -0
- package/build/workers/WorkerSigningPool.js.map +1 -0
- package/build/workers/WorkerSigningPool.node.d.ts +124 -0
- package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
- package/build/workers/WorkerSigningPool.node.js +753 -0
- package/build/workers/WorkerSigningPool.node.js.map +1 -0
- package/build/workers/ecc-bundle.d.ts +25 -0
- package/build/workers/ecc-bundle.d.ts.map +1 -0
- package/build/workers/ecc-bundle.js +25 -0
- package/build/workers/ecc-bundle.js.map +1 -0
- package/build/workers/index.d.ts +91 -0
- package/build/workers/index.d.ts.map +1 -0
- package/build/workers/index.js +114 -0
- package/build/workers/index.js.map +1 -0
- package/build/workers/psbt-parallel.d.ts +117 -0
- package/build/workers/psbt-parallel.d.ts.map +1 -0
- package/build/workers/psbt-parallel.js +233 -0
- package/build/workers/psbt-parallel.js.map +1 -0
- package/build/workers/signing-worker.d.ts +37 -0
- package/build/workers/signing-worker.d.ts.map +1 -0
- package/build/workers/signing-worker.js +350 -0
- package/build/workers/signing-worker.js.map +1 -0
- package/build/workers/types.d.ts +365 -0
- package/build/workers/types.d.ts.map +1 -0
- package/build/workers/types.js +60 -0
- package/build/workers/types.js.map +1 -0
- package/package.json +66 -8
- package/scripts/bundle-ecc.ts +111 -0
- package/src/address.ts +81 -44
- package/src/bech32utils.ts +3 -3
- package/src/bip66.ts +34 -24
- package/src/block.ts +196 -84
- package/src/branded.ts +18 -0
- package/src/crypto.ts +64 -26
- package/src/ecc/context.ts +277 -0
- package/src/ecc/index.ts +14 -0
- package/src/ecc/types.ts +154 -0
- package/src/ecpair.d.ts +99 -0
- package/src/errors.ts +163 -0
- package/src/index.ts +113 -9
- package/src/io/BinaryReader.ts +461 -0
- package/src/io/BinaryWriter.ts +696 -0
- package/src/io/MemoryPool.ts +343 -0
- package/src/io/base64.ts +20 -0
- package/src/io/hex.ts +155 -0
- package/src/io/index.ts +41 -0
- package/src/io/utils.ts +283 -0
- package/src/merkle.ts +14 -9
- package/src/networks.ts +9 -9
- package/src/payments/bip341.ts +34 -33
- package/src/payments/embed.ts +244 -41
- package/src/payments/index.ts +12 -10
- package/src/payments/p2ms.ts +490 -118
- package/src/payments/p2op.ts +431 -133
- package/src/payments/p2pk.ts +370 -72
- package/src/payments/p2pkh.ts +524 -130
- package/src/payments/p2sh.ts +572 -172
- package/src/payments/p2tr.ts +686 -194
- package/src/payments/p2wpkh.ts +484 -107
- package/src/payments/p2wsh.ts +526 -164
- package/src/payments/types.ts +80 -66
- package/src/psbt/bip371.ts +68 -51
- package/src/psbt/psbtutils.ts +39 -40
- package/src/psbt/types.ts +331 -0
- package/src/psbt/utils.ts +188 -0
- package/src/psbt/validation.ts +192 -0
- package/src/psbt.ts +566 -809
- package/src/pubkey.ts +22 -23
- package/src/push_data.ts +18 -16
- package/src/script.ts +82 -64
- package/src/script_number.ts +6 -6
- package/src/script_signature.ts +33 -36
- package/src/transaction.ts +458 -238
- package/src/types.ts +231 -100
- package/src/workers/WorkerSigningPool.node.ts +887 -0
- package/src/workers/WorkerSigningPool.ts +670 -0
- package/src/workers/ecc-bundle.ts +26 -0
- package/src/workers/index.ts +165 -0
- package/src/workers/psbt-parallel.ts +332 -0
- package/src/workers/signing-worker.ts +353 -0
- package/src/workers/types.ts +413 -0
- package/test/address.spec.ts +9 -6
- package/test/bitcoin.core.spec.ts +16 -17
- package/test/block.spec.ts +8 -7
- package/test/bufferutils.spec.ts +228 -214
- package/test/crypto.spec.ts +19 -11
- package/test/fixtures/p2pk.json +0 -8
- package/test/fixtures/p2pkh.json +1 -1
- package/test/fixtures/p2sh.json +1 -1
- package/test/fixtures/script.json +1 -1
- package/test/fixtures/transaction.json +2 -2
- package/test/integration/_regtest.ts +25 -0
- package/test/integration/addresses.spec.ts +4 -3
- package/test/integration/bip32.spec.ts +2 -1
- package/test/integration/blocks.spec.ts +1 -1
- package/test/integration/cltv.spec.ts +18 -16
- package/test/integration/csv.spec.ts +37 -64
- package/test/integration/payments.spec.ts +5 -3
- package/test/integration/taproot.spec.ts +76 -83
- package/test/integration/transactions.spec.ts +38 -35
- package/test/payments.spec.ts +35 -13
- package/test/payments.utils.ts +17 -16
- package/test/psbt.spec.ts +111 -100
- package/test/script.spec.ts +11 -10
- package/test/script_signature.spec.ts +9 -11
- package/test/taproot-cache.spec.ts +694 -0
- package/test/transaction.spec.ts +32 -40
- package/test/types.spec.ts +74 -29
- package/test/workers-pool.spec.ts +963 -0
- package/test/workers-signing.spec.ts +635 -0
- package/test/workers.spec.ts +1390 -0
- package/tsconfig.base.json +34 -18
- package/tsconfig.browser.json +15 -0
- package/tsconfig.build.json +5 -0
- package/tsconfig.json +5 -14
- package/vite.config.browser.ts +3 -42
- package/vitest.config.integration.ts +2 -0
- package/browser/bufferutils.d.ts +0 -34
- package/browser/chunks/crypto-BhCpKpek.js +0 -2033
- package/browser/chunks/payments-B1wlSccx.js +0 -1089
- package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
- package/browser/chunks/script-DyPItFEl.js +0 -318
- package/browser/chunks/transaction-C_UbhMGn.js +0 -432
- package/browser/chunks/utils-DNZi-T5W.js +0 -761
- package/browser/ecc_lib.d.ts +0 -3
- package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
- package/browser/hooks/HookedSigner.d.ts +0 -4
- package/browser/hooks/SignatureManager.d.ts +0 -13
- package/browser/payments/lazy.d.ts +0 -2
- package/browser/typeforce.d.ts +0 -38
- package/build/bufferutils.d.ts +0 -34
- package/build/bufferutils.js +0 -141
- package/build/ecc_lib.d.ts +0 -3
- package/build/ecc_lib.js +0 -61
- package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
- package/build/hooks/AdvancedSignatureManager.js +0 -52
- package/build/hooks/HookedSigner.d.ts +0 -4
- package/build/hooks/HookedSigner.js +0 -64
- package/build/hooks/SignatureManager.d.ts +0 -13
- package/build/hooks/SignatureManager.js +0 -45
- package/build/payments/lazy.d.ts +0 -2
- package/build/payments/lazy.js +0 -28
- package/build/tsconfig.tsbuildinfo +0 -1
- package/src/bufferutils.ts +0 -188
- package/src/ecc_lib.ts +0 -94
- package/src/hooks/AdvancedSignatureManager.ts +0 -104
- package/src/hooks/HookedSigner.ts +0 -108
- package/src/hooks/SignatureManager.ts +0 -84
- package/src/payments/lazy.ts +0 -28
- package/src/typeforce.d.ts +0 -38
- package/tsconfig.webpack.json +0 -18
package/build/payments/p2op.js
CHANGED
|
@@ -1,133 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pay-to-OPNet (P2OP) payment class.
|
|
3
|
+
*
|
|
4
|
+
* P2OP is a custom witness version 16 output type for the OPNet network.
|
|
5
|
+
* The witness program contains a deployment version and hash160.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
1
9
|
import { bech32m } from 'bech32';
|
|
2
|
-
import { Buffer as NBuffer } from 'buffer';
|
|
3
10
|
import { fromBech32 } from '../bech32utils.js';
|
|
4
11
|
import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
|
|
5
12
|
import * as bscript from '../script.js';
|
|
6
|
-
import {
|
|
13
|
+
import { alloc, concat, equals } from '../io/index.js';
|
|
7
14
|
import { PaymentType } from './types.js';
|
|
8
|
-
import * as lazy from './lazy.js';
|
|
9
15
|
const OPS = bscript.opcodes;
|
|
10
16
|
const P2OP_WITNESS_VERSION = 0x10;
|
|
11
17
|
const MIN_SIZE = 2;
|
|
12
18
|
const MAX_SIZE = 40;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Pay-to-OPNet (P2OP) payment class.
|
|
21
|
+
*
|
|
22
|
+
* Creates locking scripts of the form: `OP_16 {program}`
|
|
23
|
+
* where program = `{deploymentVersion:uint8}{hash160:20-bytes|...}`
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { P2OP } from '@btc-vision/bitcoin';
|
|
28
|
+
*
|
|
29
|
+
* // Create from program
|
|
30
|
+
* const payment = P2OP.fromProgram(program);
|
|
31
|
+
* console.log(payment.address); // opnet address
|
|
32
|
+
*
|
|
33
|
+
* // Create from deployment version and hash160
|
|
34
|
+
* const fromParts = P2OP.fromParts(deploymentVersion, hash160);
|
|
35
|
+
*
|
|
36
|
+
* // Decode an existing output
|
|
37
|
+
* const decoded = P2OP.fromOutput(scriptPubKey);
|
|
38
|
+
* console.log(decoded.program);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class P2OP {
|
|
42
|
+
// Static public fields
|
|
43
|
+
static NAME = PaymentType.P2OP;
|
|
44
|
+
// Private instance fields
|
|
45
|
+
#network;
|
|
46
|
+
#opts;
|
|
47
|
+
// Input data (provided by user)
|
|
48
|
+
#inputAddress;
|
|
49
|
+
#inputProgram;
|
|
50
|
+
#inputDeploymentVersion;
|
|
51
|
+
#inputHash160;
|
|
52
|
+
#inputOutput;
|
|
53
|
+
// Cached computed values
|
|
54
|
+
#address;
|
|
55
|
+
#program;
|
|
56
|
+
#deploymentVersion;
|
|
57
|
+
#hash160;
|
|
58
|
+
#output;
|
|
59
|
+
// Cache flags
|
|
60
|
+
#addressComputed = false;
|
|
61
|
+
#programComputed = false;
|
|
62
|
+
#deploymentVersionComputed = false;
|
|
63
|
+
#hash160Computed = false;
|
|
64
|
+
#outputComputed = false;
|
|
65
|
+
// Decoded address cache
|
|
66
|
+
#decodedAddress;
|
|
67
|
+
#decodedAddressComputed = false;
|
|
68
|
+
/**
|
|
69
|
+
* Creates a new P2OP payment instance.
|
|
70
|
+
*
|
|
71
|
+
* @param params - Payment parameters
|
|
72
|
+
* @param params.address - Bech32m encoded OPNet address
|
|
73
|
+
* @param params.program - Witness program (2-40 bytes)
|
|
74
|
+
* @param params.deploymentVersion - Deployment version (0-255)
|
|
75
|
+
* @param params.hash160 - 20-byte hash
|
|
76
|
+
* @param params.output - The scriptPubKey
|
|
77
|
+
* @param params.network - Network parameters (defaults to mainnet)
|
|
78
|
+
* @param opts - Payment options
|
|
79
|
+
* @param opts.validate - Whether to validate inputs (default: true)
|
|
80
|
+
*
|
|
81
|
+
* @throws {TypeError} If validation is enabled and data is invalid
|
|
82
|
+
*/
|
|
83
|
+
constructor(params, opts) {
|
|
84
|
+
this.#network = params.network ?? BITCOIN_NETWORK;
|
|
85
|
+
this.#opts = {
|
|
86
|
+
validate: opts?.validate ?? true,
|
|
87
|
+
allowIncomplete: opts?.allowIncomplete ?? false,
|
|
88
|
+
};
|
|
89
|
+
// Store input data
|
|
90
|
+
this.#inputAddress = params.address;
|
|
91
|
+
this.#inputProgram = params.program;
|
|
92
|
+
this.#inputDeploymentVersion = params.deploymentVersion;
|
|
93
|
+
this.#inputHash160 = params.hash160;
|
|
94
|
+
this.#inputOutput = params.output;
|
|
95
|
+
// Validate if requested
|
|
96
|
+
if (this.#opts.validate) {
|
|
97
|
+
this.#validate();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Public getters
|
|
101
|
+
/**
|
|
102
|
+
* Payment type discriminant.
|
|
103
|
+
*/
|
|
104
|
+
get name() {
|
|
105
|
+
return PaymentType.P2OP;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Network parameters.
|
|
109
|
+
*/
|
|
110
|
+
get network() {
|
|
111
|
+
return this.#network;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Bech32m encoded OPNet address.
|
|
115
|
+
*/
|
|
116
|
+
get address() {
|
|
117
|
+
if (!this.#addressComputed) {
|
|
118
|
+
this.#address = this.#computeAddress();
|
|
119
|
+
this.#addressComputed = true;
|
|
120
|
+
}
|
|
121
|
+
return this.#address;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Witness program (2-40 bytes).
|
|
125
|
+
* Format: `{deploymentVersion:uint8}{hash160:20-bytes|...}`
|
|
126
|
+
*/
|
|
127
|
+
get program() {
|
|
128
|
+
if (!this.#programComputed) {
|
|
129
|
+
this.#program = this.#computeProgram();
|
|
130
|
+
this.#programComputed = true;
|
|
131
|
+
}
|
|
132
|
+
return this.#program;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Deployment version (first byte of program).
|
|
136
|
+
*/
|
|
137
|
+
get deploymentVersion() {
|
|
138
|
+
if (!this.#deploymentVersionComputed) {
|
|
139
|
+
this.#deploymentVersion = this.#computeDeploymentVersion();
|
|
140
|
+
this.#deploymentVersionComputed = true;
|
|
141
|
+
}
|
|
142
|
+
return this.#deploymentVersion;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Hash160 (remaining bytes of program).
|
|
146
|
+
*/
|
|
147
|
+
get hash160() {
|
|
148
|
+
if (!this.#hash160Computed) {
|
|
149
|
+
this.#hash160 = this.#computeHash160();
|
|
150
|
+
this.#hash160Computed = true;
|
|
151
|
+
}
|
|
152
|
+
return this.#hash160;
|
|
19
153
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
154
|
+
/**
|
|
155
|
+
* The scriptPubKey: `OP_16 {program}`
|
|
156
|
+
*/
|
|
157
|
+
get output() {
|
|
158
|
+
if (!this.#outputComputed) {
|
|
159
|
+
this.#output = this.#computeOutput();
|
|
160
|
+
this.#outputComputed = true;
|
|
161
|
+
}
|
|
162
|
+
return this.#output;
|
|
163
|
+
}
|
|
164
|
+
// Static factory methods
|
|
165
|
+
/**
|
|
166
|
+
* Creates a P2OP payment from a witness program.
|
|
167
|
+
*
|
|
168
|
+
* @param program - Witness program (2-40 bytes)
|
|
169
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
170
|
+
* @returns A new P2OP payment instance
|
|
171
|
+
*/
|
|
172
|
+
static fromProgram(program, network) {
|
|
173
|
+
return new P2OP({ program, network });
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Creates a P2OP payment from deployment version and hash160.
|
|
177
|
+
*
|
|
178
|
+
* @param deploymentVersion - Deployment version (0-255)
|
|
179
|
+
* @param hash160 - 20-byte hash
|
|
180
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
181
|
+
* @returns A new P2OP payment instance
|
|
182
|
+
*/
|
|
183
|
+
static fromParts(deploymentVersion, hash160, network) {
|
|
184
|
+
return new P2OP({ deploymentVersion, hash160, network });
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Creates a P2OP payment from an OPNet address.
|
|
188
|
+
*
|
|
189
|
+
* @param address - Bech32m encoded OPNet address
|
|
190
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
191
|
+
* @returns A new P2OP payment instance
|
|
192
|
+
*/
|
|
193
|
+
static fromAddress(address, network) {
|
|
194
|
+
return new P2OP({ address, network });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Creates a P2OP payment from a scriptPubKey.
|
|
198
|
+
*
|
|
199
|
+
* @param output - The scriptPubKey
|
|
200
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
201
|
+
* @returns A new P2OP payment instance
|
|
202
|
+
*/
|
|
203
|
+
static fromOutput(output, network) {
|
|
204
|
+
return new P2OP({ output, network });
|
|
205
|
+
}
|
|
206
|
+
// Private helper methods
|
|
207
|
+
#getDecodedAddress() {
|
|
208
|
+
if (!this.#decodedAddressComputed) {
|
|
209
|
+
if (this.#inputAddress) {
|
|
210
|
+
const decoded = fromBech32(this.#inputAddress);
|
|
211
|
+
if (decoded) {
|
|
212
|
+
this.#decodedAddress = {
|
|
213
|
+
version: decoded.version,
|
|
214
|
+
prefix: decoded.prefix,
|
|
215
|
+
data: decoded.data,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
this.#decodedAddressComputed = true;
|
|
220
|
+
}
|
|
221
|
+
return this.#decodedAddress;
|
|
222
|
+
}
|
|
223
|
+
#makeProgramFromParts() {
|
|
224
|
+
if (typeof this.#inputDeploymentVersion !== 'undefined' &&
|
|
225
|
+
typeof this.#inputHash160 !== 'undefined') {
|
|
226
|
+
if (this.#inputHash160.length !== 20) {
|
|
32
227
|
throw new TypeError('hash160 must be exactly 20 bytes');
|
|
33
|
-
|
|
228
|
+
}
|
|
229
|
+
if (this.#inputDeploymentVersion < 0 || this.#inputDeploymentVersion > 0xff) {
|
|
34
230
|
throw new TypeError('deploymentVersion must fit in one byte');
|
|
35
|
-
|
|
231
|
+
}
|
|
232
|
+
return concat([new Uint8Array([this.#inputDeploymentVersion]), this.#inputHash160]);
|
|
36
233
|
}
|
|
37
234
|
return undefined;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
235
|
+
}
|
|
236
|
+
// Private computation methods
|
|
237
|
+
#computeAddress() {
|
|
238
|
+
if (this.#inputAddress) {
|
|
239
|
+
return this.#inputAddress;
|
|
240
|
+
}
|
|
241
|
+
const prog = this.program;
|
|
242
|
+
if (!prog)
|
|
243
|
+
return undefined;
|
|
244
|
+
if (!this.#network.bech32Opnet) {
|
|
245
|
+
throw new TypeError('Network does not support opnet');
|
|
246
|
+
}
|
|
247
|
+
const words = bech32m.toWords(prog);
|
|
248
|
+
words.unshift(P2OP_WITNESS_VERSION);
|
|
249
|
+
return bech32m.encode(this.#network.bech32Opnet, words);
|
|
250
|
+
}
|
|
251
|
+
#computeProgram() {
|
|
252
|
+
if (this.#inputProgram) {
|
|
253
|
+
return this.#inputProgram;
|
|
254
|
+
}
|
|
255
|
+
// Build from deployment version + hash160
|
|
256
|
+
const fromParts = this.#makeProgramFromParts();
|
|
257
|
+
if (fromParts) {
|
|
51
258
|
return fromParts;
|
|
52
|
-
|
|
53
|
-
|
|
259
|
+
}
|
|
260
|
+
if (this.#inputOutput) {
|
|
261
|
+
if (this.#inputOutput[0] !== OPS.OP_16) {
|
|
54
262
|
throw new TypeError('Invalid P2OP script');
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
263
|
+
}
|
|
264
|
+
let pushPos = 1;
|
|
265
|
+
let progLen;
|
|
266
|
+
if (this.#inputOutput[1] < 0x4c) {
|
|
267
|
+
progLen = this.#inputOutput[1];
|
|
58
268
|
pushPos = 2;
|
|
59
269
|
}
|
|
60
|
-
else if (
|
|
61
|
-
progLen =
|
|
270
|
+
else if (this.#inputOutput[1] === 0x4c) {
|
|
271
|
+
progLen = this.#inputOutput[2];
|
|
62
272
|
pushPos = 3;
|
|
63
273
|
}
|
|
64
274
|
else {
|
|
65
275
|
throw new TypeError('Unsupported push opcode in P2OP script');
|
|
66
276
|
}
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
if (a.address) {
|
|
70
|
-
const dec = _address();
|
|
71
|
-
return dec.data;
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
lazy.prop(o, 'deploymentVersion', () => {
|
|
75
|
-
if (!o.program)
|
|
76
|
-
return;
|
|
77
|
-
return o.program[0];
|
|
78
|
-
});
|
|
79
|
-
lazy.prop(o, 'hash160', () => {
|
|
80
|
-
if (!o.program)
|
|
81
|
-
return;
|
|
82
|
-
return o.program.subarray(1);
|
|
83
|
-
});
|
|
84
|
-
lazy.prop(o, 'output', () => {
|
|
85
|
-
if (!o.program)
|
|
86
|
-
return;
|
|
87
|
-
return bscript.compile([OPS.OP_16, o.program]);
|
|
88
|
-
});
|
|
89
|
-
lazy.prop(o, 'address', () => {
|
|
90
|
-
if (!o.program)
|
|
91
|
-
return;
|
|
92
|
-
if (!network.bech32Opnet) {
|
|
93
|
-
throw new TypeError('Network does not support opnet');
|
|
277
|
+
return this.#inputOutput.subarray(pushPos, pushPos + progLen);
|
|
94
278
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
279
|
+
if (this.#inputAddress) {
|
|
280
|
+
return this.#getDecodedAddress()?.data;
|
|
281
|
+
}
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
#computeDeploymentVersion() {
|
|
285
|
+
if (this.#inputDeploymentVersion !== undefined) {
|
|
286
|
+
return this.#inputDeploymentVersion;
|
|
287
|
+
}
|
|
288
|
+
const prog = this.program;
|
|
289
|
+
if (!prog)
|
|
290
|
+
return undefined;
|
|
291
|
+
return prog[0];
|
|
292
|
+
}
|
|
293
|
+
#computeHash160() {
|
|
294
|
+
if (this.#inputHash160) {
|
|
295
|
+
return this.#inputHash160;
|
|
296
|
+
}
|
|
297
|
+
const prog = this.program;
|
|
298
|
+
if (!prog)
|
|
299
|
+
return undefined;
|
|
300
|
+
return prog.subarray(1);
|
|
301
|
+
}
|
|
302
|
+
#computeOutput() {
|
|
303
|
+
if (this.#inputOutput) {
|
|
304
|
+
return this.#inputOutput;
|
|
305
|
+
}
|
|
306
|
+
const prog = this.program;
|
|
307
|
+
if (!prog)
|
|
308
|
+
return undefined;
|
|
309
|
+
return bscript.compile([OPS.OP_16, prog]);
|
|
310
|
+
}
|
|
311
|
+
// Validation
|
|
312
|
+
#validate() {
|
|
313
|
+
let prog = alloc(0);
|
|
314
|
+
if (this.#inputAddress) {
|
|
315
|
+
const dec = this.#getDecodedAddress();
|
|
316
|
+
if (!dec) {
|
|
317
|
+
throw new TypeError('Invalid address');
|
|
318
|
+
}
|
|
319
|
+
if (this.#network.bech32Opnet !== dec.prefix) {
|
|
104
320
|
throw new TypeError('Invalid prefix or network mismatch');
|
|
105
|
-
|
|
321
|
+
}
|
|
322
|
+
if (dec.version !== P2OP_WITNESS_VERSION) {
|
|
106
323
|
throw new TypeError('Invalid witness version for p2op');
|
|
107
|
-
|
|
324
|
+
}
|
|
325
|
+
if (dec.data.length < MIN_SIZE || dec.data.length > MAX_SIZE) {
|
|
108
326
|
throw new TypeError('Invalid witness program length');
|
|
327
|
+
}
|
|
109
328
|
prog = dec.data;
|
|
110
329
|
}
|
|
111
|
-
if (
|
|
112
|
-
if (prog.length && !
|
|
330
|
+
if (this.#inputProgram) {
|
|
331
|
+
if (prog.length > 0 && !equals(prog, this.#inputProgram)) {
|
|
113
332
|
throw new TypeError('Program mismatch');
|
|
114
|
-
|
|
333
|
+
}
|
|
334
|
+
prog = this.#inputProgram;
|
|
115
335
|
}
|
|
116
|
-
if (!prog.length &&
|
|
117
|
-
|
|
336
|
+
if (!prog.length && this.#inputDeploymentVersion !== undefined && this.#inputHash160) {
|
|
337
|
+
const made = this.#makeProgramFromParts();
|
|
338
|
+
if (made)
|
|
339
|
+
prog = made;
|
|
118
340
|
}
|
|
119
|
-
if (
|
|
120
|
-
const outProg =
|
|
121
|
-
if (
|
|
341
|
+
if (this.#inputOutput) {
|
|
342
|
+
const outProg = this.program;
|
|
343
|
+
if (!outProg) {
|
|
344
|
+
throw new TypeError('Output program is required');
|
|
345
|
+
}
|
|
346
|
+
if (prog.length > 0 && !equals(prog, outProg)) {
|
|
122
347
|
throw new TypeError('Program mismatch (output vs other source)');
|
|
348
|
+
}
|
|
123
349
|
prog = outProg;
|
|
124
350
|
}
|
|
125
|
-
if (prog.length < MIN_SIZE || prog.length > MAX_SIZE)
|
|
351
|
+
if (prog.length < MIN_SIZE || prog.length > MAX_SIZE) {
|
|
126
352
|
throw new TypeError(`Witness program must be 2–40 bytes. Was ${prog.length} bytes`);
|
|
127
|
-
|
|
353
|
+
}
|
|
354
|
+
if (this.#inputDeploymentVersion !== undefined &&
|
|
355
|
+
this.#inputDeploymentVersion !== prog[0]) {
|
|
128
356
|
throw new TypeError('deploymentVersion mismatch');
|
|
129
|
-
|
|
357
|
+
}
|
|
358
|
+
if (this.#inputHash160 && !equals(this.#inputHash160, prog.subarray(1))) {
|
|
130
359
|
throw new TypeError('hash160 mismatch');
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Converts to a plain P2OPPayment object for backwards compatibility.
|
|
364
|
+
*
|
|
365
|
+
* @returns A P2OPPayment object
|
|
366
|
+
*/
|
|
367
|
+
toPayment() {
|
|
368
|
+
return {
|
|
369
|
+
name: this.name,
|
|
370
|
+
network: this.network,
|
|
371
|
+
address: this.address,
|
|
372
|
+
program: this.program,
|
|
373
|
+
deploymentVersion: this.deploymentVersion,
|
|
374
|
+
hash160: this.hash160,
|
|
375
|
+
output: this.output,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Creates a Pay-to-OPNet (P2OP) payment object.
|
|
381
|
+
*
|
|
382
|
+
* This is the legacy factory function for backwards compatibility.
|
|
383
|
+
* For new code, prefer using the P2OP class directly.
|
|
384
|
+
*
|
|
385
|
+
* @param a - The payment object containing the necessary data
|
|
386
|
+
* @param opts - Optional payment options
|
|
387
|
+
* @returns The P2OP payment object
|
|
388
|
+
* @throws {TypeError} If the required data is not provided or if the data is invalid
|
|
389
|
+
*
|
|
390
|
+
* @example
|
|
391
|
+
* ```typescript
|
|
392
|
+
* import { p2op } from '@btc-vision/bitcoin';
|
|
393
|
+
*
|
|
394
|
+
* // Create from program
|
|
395
|
+
* const payment = p2op({ program });
|
|
396
|
+
*
|
|
397
|
+
* // Create from parts
|
|
398
|
+
* const fromParts = p2op({ deploymentVersion: 0, hash160 });
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
export function p2op(a, opts) {
|
|
402
|
+
if (!a.address &&
|
|
403
|
+
!a.output &&
|
|
404
|
+
!a.program &&
|
|
405
|
+
(typeof a.deploymentVersion === 'undefined' || !a.hash160)) {
|
|
406
|
+
throw new TypeError('At least one of address, output or program must be provided');
|
|
131
407
|
}
|
|
132
|
-
|
|
408
|
+
const instance = new P2OP({
|
|
409
|
+
address: a.address,
|
|
410
|
+
program: a.program,
|
|
411
|
+
deploymentVersion: a.deploymentVersion,
|
|
412
|
+
hash160: a.hash160,
|
|
413
|
+
output: a.output,
|
|
414
|
+
network: a.network,
|
|
415
|
+
}, opts);
|
|
416
|
+
// Return a merged object for backwards compatibility
|
|
417
|
+
return Object.assign(instance.toPayment(), a);
|
|
133
418
|
}
|
|
419
|
+
//# sourceMappingURL=p2op.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2op.js","sourceRoot":"","sources":["../../src/payments/p2op.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAgB,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAsC,MAAM,YAAY,CAAC;AAE7E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC5B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,IAAI;IACb,uBAAuB;IACvB,MAAM,CAAU,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAExC,0BAA0B;IACjB,QAAQ,CAAU;IAClB,KAAK,CAAwB;IAEtC,gCAAgC;IAChC,aAAa,CAAsB;IACnC,aAAa,CAA0B;IACvC,uBAAuB,CAAsB;IAC7C,aAAa,CAA0B;IACvC,YAAY,CAA0B;IAEtC,yBAAyB;IACzB,QAAQ,CAAsB;IAC9B,QAAQ,CAA0B;IAClC,kBAAkB,CAAsB;IACxC,QAAQ,CAA0B;IAClC,OAAO,CAA0B;IAEjC,cAAc;IACd,gBAAgB,GAAG,KAAK,CAAC;IACzB,gBAAgB,GAAG,KAAK,CAAC;IACzB,0BAA0B,GAAG,KAAK,CAAC;IACnC,gBAAgB,GAAG,KAAK,CAAC;IACzB,eAAe,GAAG,KAAK,CAAC;IAExB,wBAAwB;IACxB,eAAe,CAAqE;IACpF,uBAAuB,GAAG,KAAK,CAAC;IAEhC;;;;;;;;;;;;;;OAcG;IACH,YACI,MAOC,EACD,IAAkB;QAElB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG;YACT,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI;YAChC,eAAe,EAAE,IAAI,EAAE,eAAe,IAAI,KAAK;SAClD,CAAC;QAEF,mBAAmB;QACnB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACxD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAElC,wBAAwB;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAED,iBAAiB;IAEjB;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,WAAW,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC3D,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAA+B,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,yBAAyB;IAEzB;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,OAAmB,EAAE,OAAiB;QACrD,OAAO,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CAAC,iBAAyB,EAAE,OAAmB,EAAE,OAAiB;QAC9E,OAAO,IAAI,IAAI,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,OAAe,EAAE,OAAiB;QACjD,OAAO,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,MAAkB,EAAE,OAAiB;QACnD,OAAO,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,yBAAyB;IAEzB,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE,CAAC;oBACV,IAAI,CAAC,eAAe,GAAG;wBACnB,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;qBACrB,CAAC;gBACN,CAAC;YACL,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,qBAAqB;QACjB,IACI,OAAO,IAAI,CAAC,uBAAuB,KAAK,WAAW;YACnD,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,EAC3C,CAAC;YACC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACnC,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,IAAI,CAAC,uBAAuB,GAAG,IAAI,EAAE,CAAC;gBAC1E,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,8BAA8B;IAE9B,eAAe;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,OAAe,CAAC;YACpB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAE,GAAG,IAAI,EAAE,CAAC;gBAC/B,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC;gBAChC,OAAO,GAAG,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC;gBAChC,OAAO,GAAG,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC;QAC3C,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,yBAAyB;QACrB,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACxC,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAY,CAAC;IACvC,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa;IAEb,SAAS;QACL,IAAI,IAAI,GAAe,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC3C,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,KAAK,oBAAoB,EAAE,CAAC;gBACvC,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC3D,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnF,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC1C,IAAI,IAAI;gBAAE,IAAI,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,GAAG,OAAO,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,SAAS,CAAC,2CAA2C,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACxF,CAAC;QAED,IACI,IAAI,CAAC,uBAAuB,KAAK,SAAS;YAC1C,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC,CAAC,CAAC,EAC1C,CAAC;YACC,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,SAAS;QACL,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAA4B;SAC5C,CAAC;IACN,CAAC;;AAGL;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,IAAI,CAChB,CAOC,EACD,IAAkB;IAElB,IACI,CAAC,CAAC,CAAC,OAAO;QACV,CAAC,CAAC,CAAC,MAAM;QACT,CAAC,CAAC,CAAC,OAAO;QACV,CAAC,OAAO,CAAC,CAAC,iBAAiB,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAC5D,CAAC;QACC,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,IAAI,CACrB;QACI,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,OAAO,EAAE,CAAC,CAAC,OAAO;KACrB,EACD,IAAI,CACP,CAAC;IAEF,qDAAqD;IACrD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC"}
|