@btc-vision/transaction 1.0.97 → 1.0.99
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/.babelrc +4 -7
- package/.prettierrc.json +11 -11
- package/CONTRIBUTING.md +71 -71
- package/LICENSE.md +62 -62
- package/README.md +76 -76
- package/browser/_version.d.ts +1 -1
- package/browser/bytecode/Compressor.d.ts +0 -1
- package/browser/crypto/crypto-browser.d.ts +1 -30
- package/browser/crypto/crypto.d.ts +0 -1
- package/browser/generators/AddressGenerator.d.ts +0 -1
- package/browser/generators/Generator.d.ts +0 -1
- package/browser/generators/builders/CalldataGenerator.d.ts +0 -1
- package/browser/generators/builders/DeploymentGenerator.d.ts +0 -1
- package/browser/generators/builders/MultiSignGenerator.d.ts +0 -1
- package/browser/index.js +1 -1
- package/browser/keypair/EcKeyPair.d.ts +0 -1
- package/browser/keypair/Wallet.d.ts +0 -1
- package/browser/signer/TweakedSigner.d.ts +0 -1
- package/browser/transaction/browser/BrowserSignerBase.d.ts +0 -1
- package/browser/transaction/browser/extensions/UnisatSigner.d.ts +0 -1
- package/browser/transaction/builders/DeploymentTransaction.d.ts +0 -1
- package/browser/transaction/builders/InteractionTransaction.d.ts +0 -1
- package/browser/transaction/builders/MultiSignTransaction.d.ts +0 -1
- package/browser/transaction/builders/SharedInteractionTransaction.d.ts +0 -1
- package/browser/transaction/builders/TransactionBuilder.d.ts +0 -1
- package/browser/transaction/builders/UnwrapSegwitTransaction.d.ts +0 -1
- package/browser/transaction/builders/UnwrapTransaction.d.ts +0 -1
- package/browser/transaction/builders/WrapTransaction.d.ts +0 -1
- package/browser/transaction/interfaces/ITransactionParameters.d.ts +0 -1
- package/browser/transaction/interfaces/Tap.d.ts +0 -1
- package/browser/transaction/shared/P2TR_MS.d.ts +0 -1
- package/browser/transaction/shared/TweakedTransaction.d.ts +0 -1
- package/browser/utils/BitcoinUtils.d.ts +0 -1
- package/browser/verification/TapscriptVerificator.d.ts +0 -1
- package/browser/wbtc/WrappedGenerationParameters.d.ts +0 -1
- package/build/bytecode/Compressor.d.ts +0 -1
- package/build/bytecode/Compressor.js +4 -4
- package/build/crypto/crypto.d.ts +0 -1
- package/build/generators/AddressGenerator.d.ts +0 -1
- package/build/generators/Generator.d.ts +0 -1
- package/build/generators/Generator.js +3 -5
- package/build/generators/builders/CalldataGenerator.d.ts +0 -1
- package/build/generators/builders/DeploymentGenerator.d.ts +0 -1
- package/build/generators/builders/{MultisignGenerator.d.ts → MultiSignGenerator.d.ts} +0 -1
- package/build/generators/builders/{MultisignGenerator.js → MultiSignGenerator.js} +1 -1
- package/build/keypair/EcKeyPair.d.ts +0 -1
- package/build/keypair/EcKeyPair.js +2 -2
- package/build/keypair/Wallet.d.ts +0 -1
- package/build/keypair/Wallet.js +0 -5
- package/build/metadata/ContractBaseMetadata.js +0 -1
- package/build/metadata/contracts/wBTC.js +3 -5
- package/build/metadata/tokens.js +27 -25
- package/build/signer/TweakedSigner.d.ts +0 -1
- package/build/transaction/browser/BrowserSignerBase.d.ts +0 -1
- package/build/transaction/browser/extensions/UnisatSigner.d.ts +0 -1
- package/build/transaction/browser/extensions/UnisatSigner.js +1 -6
- package/build/transaction/builders/DeploymentTransaction.d.ts +0 -1
- package/build/transaction/builders/DeploymentTransaction.js +25 -33
- package/build/transaction/builders/FundingTransaction.js +1 -3
- package/build/transaction/builders/InteractionTransaction.d.ts +0 -1
- package/build/transaction/builders/InteractionTransaction.js +2 -5
- package/build/transaction/builders/MultiSignTransaction.d.ts +0 -1
- package/build/transaction/builders/MultiSignTransaction.js +66 -73
- package/build/transaction/builders/SharedInteractionTransaction.d.ts +0 -1
- package/build/transaction/builders/SharedInteractionTransaction.js +20 -25
- package/build/transaction/builders/TransactionBuilder.d.ts +0 -1
- package/build/transaction/builders/TransactionBuilder.js +12 -21
- package/build/transaction/builders/UnwrapSegwitTransaction.d.ts +0 -1
- package/build/transaction/builders/UnwrapSegwitTransaction.js +4 -10
- package/build/transaction/builders/UnwrapTransaction.d.ts +0 -1
- package/build/transaction/builders/UnwrapTransaction.js +5 -11
- package/build/transaction/builders/WrapTransaction.d.ts +0 -1
- package/build/transaction/builders/WrapTransaction.js +5 -12
- package/build/transaction/interfaces/ITransactionParameters.d.ts +0 -1
- package/build/transaction/interfaces/Tap.d.ts +0 -1
- package/build/transaction/processor/PsbtTransaction.js +3 -4
- package/build/transaction/shared/P2TR_MS.d.ts +0 -1
- package/build/transaction/shared/TweakedTransaction.d.ts +0 -1
- package/build/transaction/shared/TweakedTransaction.js +11 -16
- package/build/utils/BitcoinUtils.d.ts +0 -1
- package/build/utxo/OPNetLimitedProvider.js +2 -3
- package/build/verification/TapscriptVerificator.d.ts +0 -1
- package/build/verification/TapscriptVerificator.js +1 -1
- package/build/wbtc/UnwrapGeneration.js +0 -2
- package/build/wbtc/WrappedGenerationParameters.d.ts +0 -1
- package/build/wbtc/WrappedGenerationParameters.js +0 -6
- package/cjs/package.json +3 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/highlight.css +43 -0
- package/docs/assets/icons.js +15 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +59 -0
- package/docs/assets/material-style.css +247 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1412 -0
- package/docs/classes/AddressGenerator.html +177 -0
- package/docs/classes/AddressVerificator.html +177 -0
- package/docs/classes/BitcoinUtils.html +196 -0
- package/docs/classes/CalldataGenerator.html +213 -0
- package/docs/classes/Compressor.html +185 -0
- package/docs/classes/ContractBaseMetadata.html +182 -0
- package/docs/classes/CustomKeypair.html +189 -0
- package/docs/classes/DeploymentGenerator.html +201 -0
- package/docs/classes/DeploymentTransaction.html +465 -0
- package/docs/classes/EcKeyPair.html +280 -0
- package/docs/classes/FundingTransaction.html +425 -0
- package/docs/classes/Generator.html +199 -0
- package/docs/classes/InteractionTransaction.html +467 -0
- package/docs/classes/MultiSignGenerator.html +178 -0
- package/docs/classes/MultiSignTransaction.html +490 -0
- package/docs/classes/OPNetLimitedProvider.html +225 -0
- package/docs/classes/OPNetTokenAddressManager.html +182 -0
- package/docs/classes/P2TR_MS.html +186 -0
- package/docs/classes/PsbtTransaction.html +320 -0
- package/docs/classes/SharedInteractionTransaction.html +477 -0
- package/docs/classes/TapscriptVerificator.html +180 -0
- package/docs/classes/TransactionBuilder.html +423 -0
- package/docs/classes/TransactionFactory.html +230 -0
- package/docs/classes/TweakedSigner.html +181 -0
- package/docs/classes/TweakedTransaction.html +301 -0
- package/docs/classes/UnisatSigner.html +199 -0
- package/docs/classes/UnwrapGeneration.html +177 -0
- package/docs/classes/UnwrapTransaction.html +518 -0
- package/docs/classes/Wallet.html +204 -0
- package/docs/classes/WrapTransaction.html +509 -0
- package/docs/classes/WrappedGeneration.html +187 -0
- package/docs/classes/wBTC.html +190 -0
- package/docs/enums/ChainId.html +176 -0
- package/docs/enums/Consensus.html +204 -0
- package/docs/enums/Features.html +175 -0
- package/docs/enums/MessageType.html +176 -0
- package/docs/enums/OPNetNetwork.html +177 -0
- package/docs/enums/PSBTTypes.html +175 -0
- package/docs/enums/TransactionSequence.html +177 -0
- package/docs/enums/TransactionType.html +181 -0
- package/docs/enums/UnisatChainType.html +181 -0
- package/docs/enums/UnisatNetwork.html +177 -0
- package/docs/hierarchy.html +174 -0
- package/docs/index.html +215 -0
- package/docs/interfaces/Balance.html +177 -0
- package/docs/interfaces/BitcoinTransferResponse.html +178 -0
- package/docs/interfaces/BroadcastResponse.html +181 -0
- package/docs/interfaces/BroadcastTransactionOptions.html +176 -0
- package/docs/interfaces/BroadcastedTransaction.html +184 -0
- package/docs/interfaces/ConsensusConfig.html +182 -0
- package/docs/interfaces/ContractAddressVerificationParams.html +179 -0
- package/docs/interfaces/DeploymentResult.html +178 -0
- package/docs/interfaces/FetchUTXOParams.html +178 -0
- package/docs/interfaces/FetchUTXOParamsMultiAddress.html +178 -0
- package/docs/interfaces/FundingTransactionResponse.html +178 -0
- package/docs/interfaces/GenerationConstraints.html +182 -0
- package/docs/interfaces/IDeploymentParameters.html +186 -0
- package/docs/interfaces/IFundingTransactionParameters.html +186 -0
- package/docs/interfaces/IInteractionParameters.html +187 -0
- package/docs/interfaces/ITransactionParameters.html +184 -0
- package/docs/interfaces/ITweakedTransactionData.html +178 -0
- package/docs/interfaces/IUnwrapParameters.html +189 -0
- package/docs/interfaces/IWBTCUTXODocument.html +180 -0
- package/docs/interfaces/IWallet.html +181 -0
- package/docs/interfaces/IWrapParameters.html +190 -0
- package/docs/interfaces/MultiSignFromBase64Params.html +188 -0
- package/docs/interfaces/MultiSignParameters.html +188 -0
- package/docs/interfaces/OPNetTokenMetadata.html +179 -0
- package/docs/interfaces/PsbtInputExtended.html +194 -0
- package/docs/interfaces/PsbtOutputExtendedAddress.html +183 -0
- package/docs/interfaces/PsbtOutputExtendedScript.html +183 -0
- package/docs/interfaces/PsbtSignatureOptions.html +176 -0
- package/docs/interfaces/PsbtTransactionData.html +179 -0
- package/docs/interfaces/RawUTXOResponse.html +178 -0
- package/docs/interfaces/SharedInteractionParameters.html +187 -0
- package/docs/interfaces/TapLeafScript.html +177 -0
- package/docs/interfaces/ToSignInputAddress.html +178 -0
- package/docs/interfaces/ToSignInputPublicKey.html +178 -0
- package/docs/interfaces/TweakSettings.html +179 -0
- package/docs/interfaces/UTXO.html +178 -0
- package/docs/interfaces/Unisat.html +190 -0
- package/docs/interfaces/UnisatChainInfo.html +177 -0
- package/docs/interfaces/UnwrapResult.html +181 -0
- package/docs/interfaces/UnwrappedGenerationParameters.html +178 -0
- package/docs/interfaces/UpdateInput.html +175 -0
- package/docs/interfaces/VaultUTXOs.html +178 -0
- package/docs/interfaces/Web3Provider.html +180 -0
- package/docs/interfaces/WrapResult.html +179 -0
- package/docs/interfaces/WrappedGenerationParameters.html +184 -0
- package/docs/modules.html +289 -0
- package/docs/types/FromBase64Params.html +174 -0
- package/docs/types/IDeploymentParametersWithoutSigner.html +174 -0
- package/docs/types/IUnwrapParametersWithoutSigner.html +174 -0
- package/docs/types/IWrapParametersWithoutSigner.html +174 -0
- package/docs/types/InteractionParametersWithoutSigner.html +174 -0
- package/docs/types/PsbtOutputExtended.html +174 -0
- package/docs/types/ToSignInput.html +174 -0
- package/docs/variables/FACTORY_ADDRESS_FRACTAL.html +174 -0
- package/docs/variables/FACTORY_ADDRESS_REGTEST.html +174 -0
- package/docs/variables/FACTORY_ADDRESS_TESTNET.html +174 -0
- package/docs/variables/MOTO_ADDRESS_FRACTAL.html +174 -0
- package/docs/variables/MOTO_ADDRESS_REGTEST.html +174 -0
- package/docs/variables/MOTO_ADDRESS_TESTNET.html +174 -0
- package/docs/variables/OPNetConsensusConfig.html +174 -0
- package/docs/variables/OPNetMetadata.html +174 -0
- package/docs/variables/POOL_ADDRESS_FRACTAL.html +174 -0
- package/docs/variables/POOL_ADDRESS_REGTEST.html +174 -0
- package/docs/variables/POOL_ADDRESS_TESTNET.html +174 -0
- package/docs/variables/ROUTER_ADDRESS_FRACTAL.html +174 -0
- package/docs/variables/ROUTER_ADDRESS_REGTEST.html +174 -0
- package/docs/variables/ROUTER_ADDRESS_TESTNET.html +174 -0
- package/docs/variables/RoswellConsensus.html +174 -0
- package/docs/variables/WBTC_ADDRESS_FRACTAL.html +174 -0
- package/docs/variables/WBTC_ADDRESS_REGTEST.html +174 -0
- package/docs/variables/WBTC_ADDRESS_TESTNET.html +174 -0
- package/docs/variables/currentConsensus.html +174 -0
- package/docs/variables/currentConsensusConfig.html +174 -0
- package/docs/variables/version.html +174 -0
- package/gulpfile.js +49 -133
- package/package.json +112 -113
- package/src/bytecode/Compressor.ts +27 -27
- package/src/consensus/metadata/RoswellConsensus.ts +26 -26
- package/src/crypto/crypto.ts +1 -1
- package/src/generators/Generator.ts +75 -75
- package/src/generators/builders/MultiSignGenerator.ts +73 -73
- package/src/metadata/contracts/wBTC.ts +60 -60
- package/src/metadata/tokens.ts +135 -135
- package/src/network/ChainId.ts +6 -6
- package/src/opnet.ts +82 -82
- package/src/signer/TweakedSigner.ts +56 -56
- package/src/transaction/builders/DeploymentTransaction.ts +356 -356
- package/src/transaction/builders/MultiSignTransaction.ts +659 -659
- package/src/transaction/builders/UnwrapSegwitTransaction.ts +365 -365
- package/src/transaction/builders/UnwrapTransaction.ts +507 -507
- package/src/transaction/enums/TransactionType.ts +9 -9
- package/src/transaction/processor/PsbtTransaction.ts +173 -173
- package/src/transaction/shared/P2TR_MS.ts +42 -42
- package/src/transaction/shared/TweakedTransaction.ts +539 -539
- package/src/utils/BitcoinUtils.ts +96 -96
- package/tsconfig.base.json +27 -43
- package/tsconfig.json +15 -8
- package/tsconfig.webpack.json +22 -22
- package/EPOCH.md +0 -250
- package/VAULT_TARGET_CONSOLIDATION.md +0 -111
- package/browser/network/NetworkInformation.d.ts +0 -6
- package/browser/transaction/browser/BrowserSigner.d.ts +0 -9
- package/browser/transaction/builders/TapUnwarpTransaction.d.ts +0 -40
- package/browser/transaction/builders/UnwarpTransaction.d.ts +0 -34
- package/browser/utxo/UTXOManager.d.ts +0 -7
- package/build/Utils.d.ts +0 -0
- package/build/Utils.js +0 -1
- package/build/consensus/metadata/RoswsellConsensus.d.ts +0 -2
- package/build/consensus/metadata/RoswsellConsensus.js +0 -4
- package/build/contracts/ContractMetadataManager.d.ts +0 -0
- package/build/contracts/ContractMetadataManager.js +0 -1
- package/build/generators/OPNetAddressGenerator.d.ts +0 -0
- package/build/generators/OPNetAddressGenerator.js +0 -1
- package/build/generators/builders/DeploymentGeneratorV2.d.ts +0 -13
- package/build/generators/builders/DeploymentGeneratorV2.js +0 -57
- package/build/generators/builders/UnwrapGenerator.d.ts +0 -8
- package/build/generators/builders/UnwrapGenerator.js +0 -79
- package/build/keypair/interfaces/GeneratedWallet.d.ts +0 -5
- package/build/keypair/interfaces/GeneratedWallet.js +0 -1
- package/build/metadata/CommonContracts.d.ts +0 -6
- package/build/metadata/CommonContracts.js +0 -5
- package/build/metadata/ContractMetadataManager.d.ts +0 -1
- package/build/metadata/ContractMetadataManager.js +0 -9
- package/build/metadata/contracts/ContractBase.d.ts +0 -9
- package/build/metadata/contracts/ContractBase.js +0 -13
- package/build/metadata/contracts/ContractBaseMetadata.d.ts +0 -9
- package/build/metadata/contracts/ContractBaseMetadata.js +0 -13
- package/build/metadata/contracts/ContractMetadataManager.d.ts +0 -0
- package/build/metadata/contracts/ContractMetadataManager.js +0 -1
- package/build/network/NetworkConverter.d.ts +0 -0
- package/build/network/NetworkConverter.js +0 -14
- package/build/network/NetworkInformation.d.ts +0 -6
- package/build/network/NetworkInformation.js +0 -1
- package/build/scripts/Regtest.d.ts +0 -2
- package/build/scripts/Regtest.js +0 -15
- package/build/scripts/test.d.ts +0 -1
- package/build/scripts/test.js +0 -74
- package/build/signer/Regtest.d.ts +0 -2
- package/build/signer/Regtest.js +0 -15
- package/build/tests/Regtest.d.ts +0 -3
- package/build/tests/Regtest.js +0 -29
- package/build/tests/adaptPSBT.d.ts +0 -1
- package/build/tests/adaptPSBT.js +0 -44
- package/build/tests/btc/send.d.ts +0 -1
- package/build/tests/btc/send.js +0 -35
- package/build/tests/btc/transfer.d.ts +0 -1
- package/build/tests/btc/transfer.js +0 -35
- package/build/tests/createPairReg.d.ts +0 -1
- package/build/tests/createPairReg.js +0 -73
- package/build/tests/deploy/deployMoto.d.ts +0 -4
- package/build/tests/deploy/deployMoto.js +0 -89
- package/build/tests/deploy/deployPool.d.ts +0 -1
- package/build/tests/deploy/deployPool.js +0 -5
- package/build/tests/deploy/deployStep1.d.ts +0 -1
- package/build/tests/deploy/deployStep1.js +0 -5
- package/build/tests/deploy/deployStep2.d.ts +0 -1
- package/build/tests/deploy/deployStep2.js +0 -5
- package/build/tests/deploy/deployStep3.d.ts +0 -1
- package/build/tests/deploy/deployStep3.js +0 -5
- package/build/tests/deploy.d.ts +0 -1
- package/build/tests/deploy.js +0 -41
- package/build/tests/deployMotoRegStep1.d.ts +0 -1
- package/build/tests/deployMotoRegStep1.js +0 -85
- package/build/tests/deployReg.d.ts +0 -1
- package/build/tests/deployReg.js +0 -85
- package/build/tests/factory/createPairReg.d.ts +0 -1
- package/build/tests/factory/createPairReg.js +0 -13
- package/build/tests/gen.d.ts +0 -1
- package/build/tests/gen.js +0 -19
- package/build/tests/interaction.d.ts +0 -5
- package/build/tests/interaction.js +0 -62
- package/build/tests/massWrapReg.d.ts +0 -1
- package/build/tests/massWrapReg.js +0 -105
- package/build/tests/mineReg.d.ts +0 -1
- package/build/tests/mineReg.js +0 -19
- package/build/tests/moto/airdropToken.d.ts +0 -1
- package/build/tests/moto/airdropToken.js +0 -21
- package/build/tests/moto/airdropTokens.d.ts +0 -1
- package/build/tests/moto/airdropTokens.js +0 -60
- package/build/tests/moto/allowance.d.ts +0 -1
- package/build/tests/moto/allowance.js +0 -6
- package/build/tests/moto/approve.d.ts +0 -1
- package/build/tests/moto/approve.js +0 -10
- package/build/tests/moto/approveWBTC.d.ts +0 -1
- package/build/tests/moto/approveWBTC.js +0 -12
- package/build/tests/moto/balanceOf.d.ts +0 -1
- package/build/tests/moto/balanceOf.js +0 -12
- package/build/tests/moto/transfer.d.ts +0 -1
- package/build/tests/moto/transfer.js +0 -16
- package/build/tests/motoswap/airdropToken.d.ts +0 -11
- package/build/tests/motoswap/airdropToken.js +0 -36
- package/build/tests/motoswap/deployMoto.d.ts +0 -4
- package/build/tests/motoswap/deployMoto.js +0 -89
- package/build/tests/motoswap/deployMotoRegStep1.d.ts +0 -1
- package/build/tests/motoswap/deployMotoRegStep1.js +0 -91
- package/build/tests/motoswap/deployMotoRegStep2.d.ts +0 -1
- package/build/tests/motoswap/deployMotoRegStep2.js +0 -91
- package/build/tests/motoswap/deployPool.d.ts +0 -1
- package/build/tests/motoswap/deployPool.js +0 -5
- package/build/tests/motoswap/deployStep1.d.ts +0 -1
- package/build/tests/motoswap/deployStep1.js +0 -5
- package/build/tests/motoswap/deployStep2.d.ts +0 -1
- package/build/tests/motoswap/deployStep2.js +0 -5
- package/build/tests/motoswap/deployStep3.d.ts +0 -1
- package/build/tests/motoswap/deployStep3.js +0 -5
- package/build/tests/motoswap/interaction.d.ts +0 -3
- package/build/tests/motoswap/interaction.js +0 -63
- package/build/tests/motoswap/routerAddLiquidity.d.ts +0 -11
- package/build/tests/motoswap/routerAddLiquidity.js +0 -35
- package/build/tests/motoswap-router/addLiquidity.d.ts +0 -11
- package/build/tests/motoswap-router/addLiquidity.js +0 -36
- package/build/tests/motoswap-router/deployMoto.d.ts +0 -4
- package/build/tests/motoswap-router/deployMoto.js +0 -89
- package/build/tests/motoswap-router/deployPool.d.ts +0 -1
- package/build/tests/motoswap-router/deployPool.js +0 -5
- package/build/tests/motoswap-router/deployStep1.d.ts +0 -1
- package/build/tests/motoswap-router/deployStep1.js +0 -5
- package/build/tests/motoswap-router/deployStep2.d.ts +0 -1
- package/build/tests/motoswap-router/deployStep2.js +0 -5
- package/build/tests/motoswap-router/deployStep3.d.ts +0 -1
- package/build/tests/motoswap-router/deployStep3.js +0 -5
- package/build/tests/motoswap-router/getAmountsOut.d.ts +0 -5
- package/build/tests/motoswap-router/getAmountsOut.js +0 -34
- package/build/tests/motoswap-router/routerAddLiquidity.d.ts +0 -11
- package/build/tests/motoswap-router/routerAddLiquidity.js +0 -35
- package/build/tests/motoswap-router/swap.d.ts +0 -8
- package/build/tests/motoswap-router/swap.js +0 -24
- package/build/tests/multisign.d.ts +0 -1
- package/build/tests/multisign.js +0 -47
- package/build/tests/multisign2.d.ts +0 -1
- package/build/tests/multisign2.js +0 -27
- package/build/tests/pool/DecodePoolAddress.d.ts +0 -6
- package/build/tests/pool/DecodePoolAddress.js +0 -12
- package/build/tests/pool/decodeReserves.d.ts +0 -5
- package/build/tests/pool/decodeReserves.js +0 -13
- package/build/tests/pool/reserves.d.ts +0 -1
- package/build/tests/pool/reserves.js +0 -18
- package/build/tests/shared/Utils.d.ts +0 -2
- package/build/tests/shared/Utils.js +0 -14
- package/build/tests/shared/interaction.d.ts +0 -7
- package/build/tests/shared/interaction.js +0 -85
- package/build/tests/shared/tokens.d.ts +0 -6
- package/build/tests/shared/tokens.js +0 -5
- package/build/tests/stakeReg.d.ts +0 -1
- package/build/tests/stakeReg.js +0 -73
- package/build/tests/stakedReg.d.ts +0 -1
- package/build/tests/stakedReg.js +0 -28
- package/build/tests/test.d.ts +0 -1
- package/build/tests/test.js +0 -51
- package/build/tests/test2.d.ts +0 -1
- package/build/tests/test2.js +0 -73
- package/build/tests/testReg.d.ts +0 -1
- package/build/tests/testReg.js +0 -91
- package/build/tests/tokens.d.ts +0 -6
- package/build/tests/tokens.js +0 -5
- package/build/tests/totalRewardReg.d.ts +0 -1
- package/build/tests/totalRewardReg.js +0 -28
- package/build/tests/transfer.d.ts +0 -1
- package/build/tests/transfer.js +0 -74
- package/build/tests/transferReg.d.ts +0 -1
- package/build/tests/transferReg.js +0 -74
- package/build/tests/unStakeReg.d.ts +0 -1
- package/build/tests/unStakeReg.js +0 -72
- package/build/tests/unwrapReg.d.ts +0 -1
- package/build/tests/unwrapReg.js +0 -61
- package/build/tests/unwrapReg2.d.ts +0 -1
- package/build/tests/unwrapReg2.js +0 -56
- package/build/tests/unwrapRegSegwit.d.ts +0 -1
- package/build/tests/unwrapRegSegwit.js +0 -83
- package/build/tests/wbtc/approve.d.ts +0 -1
- package/build/tests/wbtc/approve.js +0 -6
- package/build/tests/wbtc/approveWBTC.d.ts +0 -1
- package/build/tests/wbtc/approveWBTC.js +0 -12
- package/build/tests/wbtc/massWrapReg.d.ts +0 -1
- package/build/tests/wbtc/massWrapReg.js +0 -105
- package/build/tests/wbtc/transfer.d.ts +0 -1
- package/build/tests/wbtc/transfer.js +0 -16
- package/build/tests/wbtc/transferReg.d.ts +0 -1
- package/build/tests/wbtc/transferReg.js +0 -16
- package/build/tests/wbtc/unStakeReg.d.ts +0 -1
- package/build/tests/wbtc/unStakeReg.js +0 -72
- package/build/tests/wbtc/unwrapReg.d.ts +0 -1
- package/build/tests/wbtc/unwrapReg.js +0 -60
- package/build/tests/wbtc/unwrapRegSegwit.d.ts +0 -1
- package/build/tests/wbtc/unwrapRegSegwit.js +0 -83
- package/build/tests/wbtc/withdrawalRequestReg.d.ts +0 -1
- package/build/tests/wbtc/withdrawalRequestReg.js +0 -71
- package/build/tests/wbtc/wrapReg.d.ts +0 -1
- package/build/tests/wbtc/wrapReg.js +0 -65
- package/build/tests/wbtc/wrapTest.d.ts +0 -1
- package/build/tests/wbtc/wrapTest.js +0 -66
- package/build/tests/withdrawalRequestReg.d.ts +0 -1
- package/build/tests/withdrawalRequestReg.js +0 -71
- package/build/tests/wrap.d.ts +0 -1
- package/build/tests/wrap.js +0 -65
- package/build/tests/wrapReg.d.ts +0 -1
- package/build/tests/wrapReg.js +0 -68
- package/build/tests/wrapTest.d.ts +0 -1
- package/build/tests/wrapTest.js +0 -66
- package/build/tests/wrapTestg.d.ts +0 -1
- package/build/tests/wrapTestg.js +0 -66
- package/build/tests/writers/allowance.d.ts +0 -3
- package/build/tests/writers/allowance.js +0 -10
- package/build/tests/writers/approve.d.ts +0 -4
- package/build/tests/writers/approve.js +0 -11
- package/build/transaction/TransactionBuilder.d.ts +0 -60
- package/build/transaction/TransactionBuilder.js +0 -244
- package/build/transaction/browser/BrowserSigner.d.ts +0 -11
- package/build/transaction/browser/BrowserSigner.js +0 -10
- package/build/transaction/browser/extensions/Unisat.d.ts +0 -54
- package/build/transaction/browser/extensions/Unisat.js +0 -11
- package/build/transaction/builders/DeploymentTransactionV2.d.ts +0 -36
- package/build/transaction/builders/DeploymentTransactionV2.js +0 -192
- package/build/transaction/builders/GenericTransaction.d.ts +0 -11
- package/build/transaction/builders/GenericTransaction.js +0 -23
- package/build/transaction/builders/TapUnwarpTransaction.d.ts +0 -37
- package/build/transaction/builders/TapUnwarpTransaction.js +0 -201
- package/build/transaction/builders/UnwarpSegwitTransaction.d.ts +0 -34
- package/build/transaction/builders/UnwarpSegwitTransaction.js +0 -184
- package/build/transaction/builders/UnwarpTransaction.d.ts +0 -35
- package/build/transaction/builders/UnwarpTransaction.js +0 -199
- package/build/transaction/interfaces/ITransactions.d.ts +0 -32
- package/build/transaction/interfaces/ITransactions.js +0 -1
- package/build/utxo/IUTXO.d.ts +0 -0
- package/build/utxo/IUTXO.js +0 -1
- package/build/utxo/OPNetUtils.d.ts +0 -7
- package/build/utxo/OPNetUtils.js +0 -47
- package/build/utxo/UTXOManager.d.ts +0 -7
- package/build/utxo/UTXOManager.js +0 -47
- package/build/wbtc/BroadcastResponse.d.ts +0 -0
- package/build/wbtc/BroadcastResponse.js +0 -1
- package/examples/Deploy.md +0 -188
- package/examples/Unwrap.md +0 -165
- package/examples/Wrap.md +0 -194
- package/tsconfig.cjs.json +0 -13
- /package/build/generators/{features.d.ts → Features.d.ts} +0 -0
- /package/build/generators/{features.js → Features.js} +0 -0
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import zlib, { ZlibOptions } from 'zlib';
|
|
2
|
-
|
|
3
|
-
/** Compressor class for compressing and decompressing data. */
|
|
4
|
-
export class Compressor {
|
|
5
|
-
private static readonly zlibOptions: ZlibOptions = {
|
|
6
|
-
level: 9,
|
|
7
|
-
maxOutputLength: 1024 * 1024 * 16, // 16mb, limit it to 16mb.
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Compresses the data using gzip.
|
|
12
|
-
* @param {Uint8Array | Buffer} data The data to compress.
|
|
13
|
-
* @returns {Buffer} The compressed data.
|
|
14
|
-
*/
|
|
15
|
-
public static compress(data: Uint8Array | Buffer): Buffer {
|
|
16
|
-
return zlib.gzipSync(data, Compressor.zlibOptions);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Decompresses the data using gunzip.
|
|
21
|
-
* @param {Uint8Array | Buffer} data The data to decompress.
|
|
22
|
-
* @returns {Buffer} The decompressed data.
|
|
23
|
-
*/
|
|
24
|
-
public static decompress(data: Uint8Array | Buffer): Buffer {
|
|
25
|
-
return zlib.gunzipSync(data, Compressor.zlibOptions);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
1
|
+
import zlib, { ZlibOptions } from 'zlib';
|
|
2
|
+
|
|
3
|
+
/** Compressor class for compressing and decompressing data. */
|
|
4
|
+
export class Compressor {
|
|
5
|
+
private static readonly zlibOptions: ZlibOptions = {
|
|
6
|
+
level: 9,
|
|
7
|
+
maxOutputLength: 1024 * 1024 * 16, // 16mb, limit it to 16mb.
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Compresses the data using gzip.
|
|
12
|
+
* @param {Uint8Array | Buffer} data The data to compress.
|
|
13
|
+
* @returns {Buffer} The compressed data.
|
|
14
|
+
*/
|
|
15
|
+
public static compress(data: Uint8Array | Buffer): Buffer {
|
|
16
|
+
return zlib.gzipSync(data, Compressor.zlibOptions);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Decompresses the data using gunzip.
|
|
21
|
+
* @param {Uint8Array | Buffer} data The data to decompress.
|
|
22
|
+
* @returns {Buffer} The decompressed data.
|
|
23
|
+
*/
|
|
24
|
+
public static decompress(data: Uint8Array | Buffer): Buffer {
|
|
25
|
+
return zlib.gunzipSync(data, Compressor.zlibOptions);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { ConsensusConfig } from '../ConsensusConfig.js';
|
|
2
|
-
import { Consensus } from '../Consensus.js';
|
|
3
|
-
|
|
4
|
-
export const RoswellConsensus: ConsensusConfig<Consensus.Roswell> = {
|
|
5
|
-
CONSENSUS: Consensus.Roswell,
|
|
6
|
-
CONSENSUS_NAME: 'Roswell',
|
|
7
|
-
|
|
8
|
-
// The block height at which this consensus was enabled.
|
|
9
|
-
ENABLED_AT_BLOCK: 0n,
|
|
10
|
-
|
|
11
|
-
// Defines the minimum amount that can be consolidated in a single transaction.
|
|
12
|
-
VAULT_MINIMUM_AMOUNT: 200000n,
|
|
13
|
-
|
|
14
|
-
// Defines the requested minimum acceptance for joining UTXOs when an unwrap is being done.
|
|
15
|
-
// If the consolidate output going back to the vault is lower than this amount, the transaction will be rejected.
|
|
16
|
-
// User must pay for the consolidation, this help the network by having fewer UTXOs.
|
|
17
|
-
VAULT_NETWORK_CONSOLIDATION_ACCEPTANCE: 200000n * 2n,
|
|
18
|
-
|
|
19
|
-
// Everytime an user wrap bitcoin, he prepays the fees for the consolidation at a maximum fee rate of the following determined value.
|
|
20
|
-
// If the fees are lower, the user will be refunded the difference.
|
|
21
|
-
// If the fees are higher, the user must pay the difference.
|
|
22
|
-
UNWRAP_CONSOLIDATION_PREPAID_FEES: 250n,
|
|
23
|
-
|
|
24
|
-
// Equivalent to 56500 satoshis, calculated from UNWRAP_CONSOLIDATION_PREPAID_FEES.
|
|
25
|
-
UNWRAP_CONSOLIDATION_PREPAID_FEES_SAT: 56500n,
|
|
26
|
-
};
|
|
1
|
+
import { ConsensusConfig } from '../ConsensusConfig.js';
|
|
2
|
+
import { Consensus } from '../Consensus.js';
|
|
3
|
+
|
|
4
|
+
export const RoswellConsensus: ConsensusConfig<Consensus.Roswell> = {
|
|
5
|
+
CONSENSUS: Consensus.Roswell,
|
|
6
|
+
CONSENSUS_NAME: 'Roswell',
|
|
7
|
+
|
|
8
|
+
// The block height at which this consensus was enabled.
|
|
9
|
+
ENABLED_AT_BLOCK: 0n,
|
|
10
|
+
|
|
11
|
+
// Defines the minimum amount that can be consolidated in a single transaction.
|
|
12
|
+
VAULT_MINIMUM_AMOUNT: 200000n,
|
|
13
|
+
|
|
14
|
+
// Defines the requested minimum acceptance for joining UTXOs when an unwrap is being done.
|
|
15
|
+
// If the consolidate output going back to the vault is lower than this amount, the transaction will be rejected.
|
|
16
|
+
// User must pay for the consolidation, this help the network by having fewer UTXOs.
|
|
17
|
+
VAULT_NETWORK_CONSOLIDATION_ACCEPTANCE: 200000n * 2n,
|
|
18
|
+
|
|
19
|
+
// Everytime an user wrap bitcoin, he prepays the fees for the consolidation at a maximum fee rate of the following determined value.
|
|
20
|
+
// If the fees are lower, the user will be refunded the difference.
|
|
21
|
+
// If the fees are higher, the user must pay the difference.
|
|
22
|
+
UNWRAP_CONSOLIDATION_PREPAID_FEES: 250n,
|
|
23
|
+
|
|
24
|
+
// Equivalent to 56500 satoshis, calculated from UNWRAP_CONSOLIDATION_PREPAID_FEES.
|
|
25
|
+
UNWRAP_CONSOLIDATION_PREPAID_FEES_SAT: 56500n,
|
|
26
|
+
};
|
package/src/crypto/crypto.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createHash, createHmac, pbkdf2Sync, randomBytes } from 'crypto';
|
|
1
|
+
export { createHash, createHmac, pbkdf2Sync, randomBytes } from 'crypto';
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { Network, networks } from 'bitcoinjs-lib';
|
|
2
|
-
|
|
3
|
-
/** Bitcoin Script Generator */
|
|
4
|
-
export abstract class Generator {
|
|
5
|
-
/**
|
|
6
|
-
* The maximum size of a data chunk
|
|
7
|
-
*/
|
|
8
|
-
public static readonly DATA_CHUNK_SIZE: number = 512;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* The magic number of OPNet
|
|
12
|
-
*/
|
|
13
|
-
public static readonly MAGIC: Buffer = Buffer.from('bsi', 'utf-8');
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* The public key of the sender
|
|
17
|
-
* @protected
|
|
18
|
-
*/
|
|
19
|
-
protected readonly senderPubKey: Buffer;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The public key of the contract salt
|
|
23
|
-
* @protected
|
|
24
|
-
*/
|
|
25
|
-
protected readonly contractSaltPubKey: Buffer;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* The network to use
|
|
29
|
-
* @protected
|
|
30
|
-
*/
|
|
31
|
-
protected readonly network: Network = networks.bitcoin;
|
|
32
|
-
|
|
33
|
-
protected constructor(
|
|
34
|
-
senderPubKey: Buffer,
|
|
35
|
-
contractSaltPubKey: Buffer,
|
|
36
|
-
network: Network = networks.bitcoin,
|
|
37
|
-
) {
|
|
38
|
-
this.senderPubKey = senderPubKey;
|
|
39
|
-
this.contractSaltPubKey = contractSaltPubKey;
|
|
40
|
-
this.network = network;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Compile the script
|
|
45
|
-
* @param args - The arguments to use when compiling the script
|
|
46
|
-
* @returns {Buffer} - The compiled script
|
|
47
|
-
*/
|
|
48
|
-
public abstract compile(...args: unknown[]): Buffer;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Split a buffer into chunks
|
|
52
|
-
* @param {Buffer} buffer - The buffer to split
|
|
53
|
-
* @param {number} chunkSize - The size of each chunk
|
|
54
|
-
* @protected
|
|
55
|
-
* @returns {Array<Buffer[]>} - The chunks
|
|
56
|
-
*/
|
|
57
|
-
protected splitBufferIntoChunks(
|
|
58
|
-
buffer: Buffer,
|
|
59
|
-
chunkSize: number = Generator.DATA_CHUNK_SIZE,
|
|
60
|
-
): Array<Buffer[]> {
|
|
61
|
-
const chunks: Array<Buffer[]> = [];
|
|
62
|
-
for (let i = 0; i < buffer.length; i += chunkSize) {
|
|
63
|
-
const dataLength = Math.min(chunkSize, buffer.length - i);
|
|
64
|
-
|
|
65
|
-
const buf2 = Buffer.alloc(dataLength);
|
|
66
|
-
for (let j = 0; j < dataLength; j++) {
|
|
67
|
-
buf2.writeUInt8(buffer[i + j], j);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
chunks.push([buf2]);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return chunks;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
1
|
+
import { Network, networks } from 'bitcoinjs-lib';
|
|
2
|
+
|
|
3
|
+
/** Bitcoin Script Generator */
|
|
4
|
+
export abstract class Generator {
|
|
5
|
+
/**
|
|
6
|
+
* The maximum size of a data chunk
|
|
7
|
+
*/
|
|
8
|
+
public static readonly DATA_CHUNK_SIZE: number = 512;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The magic number of OPNet
|
|
12
|
+
*/
|
|
13
|
+
public static readonly MAGIC: Buffer = Buffer.from('bsi', 'utf-8');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The public key of the sender
|
|
17
|
+
* @protected
|
|
18
|
+
*/
|
|
19
|
+
protected readonly senderPubKey: Buffer;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The public key of the contract salt
|
|
23
|
+
* @protected
|
|
24
|
+
*/
|
|
25
|
+
protected readonly contractSaltPubKey: Buffer;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The network to use
|
|
29
|
+
* @protected
|
|
30
|
+
*/
|
|
31
|
+
protected readonly network: Network = networks.bitcoin;
|
|
32
|
+
|
|
33
|
+
protected constructor(
|
|
34
|
+
senderPubKey: Buffer,
|
|
35
|
+
contractSaltPubKey: Buffer,
|
|
36
|
+
network: Network = networks.bitcoin,
|
|
37
|
+
) {
|
|
38
|
+
this.senderPubKey = senderPubKey;
|
|
39
|
+
this.contractSaltPubKey = contractSaltPubKey;
|
|
40
|
+
this.network = network;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Compile the script
|
|
45
|
+
* @param args - The arguments to use when compiling the script
|
|
46
|
+
* @returns {Buffer} - The compiled script
|
|
47
|
+
*/
|
|
48
|
+
public abstract compile(...args: unknown[]): Buffer;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Split a buffer into chunks
|
|
52
|
+
* @param {Buffer} buffer - The buffer to split
|
|
53
|
+
* @param {number} chunkSize - The size of each chunk
|
|
54
|
+
* @protected
|
|
55
|
+
* @returns {Array<Buffer[]>} - The chunks
|
|
56
|
+
*/
|
|
57
|
+
protected splitBufferIntoChunks(
|
|
58
|
+
buffer: Buffer,
|
|
59
|
+
chunkSize: number = Generator.DATA_CHUNK_SIZE,
|
|
60
|
+
): Array<Buffer[]> {
|
|
61
|
+
const chunks: Array<Buffer[]> = [];
|
|
62
|
+
for (let i = 0; i < buffer.length; i += chunkSize) {
|
|
63
|
+
const dataLength = Math.min(chunkSize, buffer.length - i);
|
|
64
|
+
|
|
65
|
+
const buf2 = Buffer.alloc(dataLength);
|
|
66
|
+
for (let j = 0; j < dataLength; j++) {
|
|
67
|
+
buf2.writeUInt8(buffer[i + j], j);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
chunks.push([buf2]);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return chunks;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
import { opcodes, script } from 'bitcoinjs-lib';
|
|
2
|
-
import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Generate a bitcoin script for a multisign interaction
|
|
6
|
-
*/
|
|
7
|
-
export class MultiSignGenerator {
|
|
8
|
-
public static readonly MAXIMUM_SUPPORTED_SIGNATURE = 255;
|
|
9
|
-
|
|
10
|
-
public static compile(
|
|
11
|
-
vaultPublicKeys: Buffer[],
|
|
12
|
-
minimumSignatures: number = 0,
|
|
13
|
-
internal?: Buffer,
|
|
14
|
-
): Buffer {
|
|
15
|
-
if (minimumSignatures < 2) {
|
|
16
|
-
throw new Error('Minimum signatures must be greater than 1');
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (vaultPublicKeys.length < minimumSignatures) {
|
|
20
|
-
throw new Error('The amount of public keys is lower than the minimum required');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (minimumSignatures > MultiSignGenerator.MAXIMUM_SUPPORTED_SIGNATURE) {
|
|
24
|
-
throw new Error(`The maximum amount of signatures is ${MultiSignGenerator.MAXIMUM_SUPPORTED_SIGNATURE}`);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const minimumRequired = Buffer.alloc(1);
|
|
28
|
-
minimumRequired.writeUInt8(minimumSignatures);
|
|
29
|
-
|
|
30
|
-
/** Remove duplicates **/
|
|
31
|
-
vaultPublicKeys = vaultPublicKeys.filter((buf, index, self) =>
|
|
32
|
-
index === self.findIndex(otherBuf => buf.equals(otherBuf))
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
/** We must order the pub keys. */
|
|
36
|
-
vaultPublicKeys = vaultPublicKeys.sort((a, b) => a.compare(b));
|
|
37
|
-
|
|
38
|
-
let included = false;
|
|
39
|
-
const data = vaultPublicKeys.map((key) => {
|
|
40
|
-
let newKey = toXOnly(key);
|
|
41
|
-
if (internal && !included) included = internal.equals(newKey);
|
|
42
|
-
|
|
43
|
-
return newKey;
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
if (internal && !included) data.push(internal);
|
|
47
|
-
const compiledData: (number | Buffer)[] = [
|
|
48
|
-
// Push the initial 0 (for OP_CHECKSIGADD)
|
|
49
|
-
opcodes.OP_0,
|
|
50
|
-
|
|
51
|
-
// For each public key, add CHECKSIGADD operation
|
|
52
|
-
...data.flatMap((key) => [
|
|
53
|
-
key, // Push the public key
|
|
54
|
-
opcodes.OP_CHECKSIGADD, // Add the public key to the signature set
|
|
55
|
-
]),
|
|
56
|
-
|
|
57
|
-
// Finally, compare the sum with the minimum required signatures
|
|
58
|
-
minimumRequired,
|
|
59
|
-
opcodes.OP_NUMEQUAL, // Use NUMEQUALVERIFY to ensure the correct number of signatures
|
|
60
|
-
];
|
|
61
|
-
|
|
62
|
-
const asm = compiledData.flat();
|
|
63
|
-
const compiled = script.compile(asm);
|
|
64
|
-
|
|
65
|
-
/** Verify the validity of the script */
|
|
66
|
-
const decompiled = script.decompile(compiled);
|
|
67
|
-
if (!decompiled) {
|
|
68
|
-
throw new Error('Failed to decompile script.');
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return compiled;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
1
|
+
import { opcodes, script } from 'bitcoinjs-lib';
|
|
2
|
+
import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generate a bitcoin script for a multisign interaction
|
|
6
|
+
*/
|
|
7
|
+
export class MultiSignGenerator {
|
|
8
|
+
public static readonly MAXIMUM_SUPPORTED_SIGNATURE = 255;
|
|
9
|
+
|
|
10
|
+
public static compile(
|
|
11
|
+
vaultPublicKeys: Buffer[],
|
|
12
|
+
minimumSignatures: number = 0,
|
|
13
|
+
internal?: Buffer,
|
|
14
|
+
): Buffer {
|
|
15
|
+
if (minimumSignatures < 2) {
|
|
16
|
+
throw new Error('Minimum signatures must be greater than 1');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (vaultPublicKeys.length < minimumSignatures) {
|
|
20
|
+
throw new Error('The amount of public keys is lower than the minimum required');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (minimumSignatures > MultiSignGenerator.MAXIMUM_SUPPORTED_SIGNATURE) {
|
|
24
|
+
throw new Error(`The maximum amount of signatures is ${MultiSignGenerator.MAXIMUM_SUPPORTED_SIGNATURE}`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const minimumRequired = Buffer.alloc(1);
|
|
28
|
+
minimumRequired.writeUInt8(minimumSignatures);
|
|
29
|
+
|
|
30
|
+
/** Remove duplicates **/
|
|
31
|
+
vaultPublicKeys = vaultPublicKeys.filter((buf, index, self) =>
|
|
32
|
+
index === self.findIndex(otherBuf => buf.equals(otherBuf))
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
/** We must order the pub keys. */
|
|
36
|
+
vaultPublicKeys = vaultPublicKeys.sort((a, b) => a.compare(b));
|
|
37
|
+
|
|
38
|
+
let included = false;
|
|
39
|
+
const data = vaultPublicKeys.map((key) => {
|
|
40
|
+
let newKey = toXOnly(key);
|
|
41
|
+
if (internal && !included) included = internal.equals(newKey);
|
|
42
|
+
|
|
43
|
+
return newKey;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
if (internal && !included) data.push(internal);
|
|
47
|
+
const compiledData: (number | Buffer)[] = [
|
|
48
|
+
// Push the initial 0 (for OP_CHECKSIGADD)
|
|
49
|
+
opcodes.OP_0,
|
|
50
|
+
|
|
51
|
+
// For each public key, add CHECKSIGADD operation
|
|
52
|
+
...data.flatMap((key) => [
|
|
53
|
+
key, // Push the public key
|
|
54
|
+
opcodes.OP_CHECKSIGADD, // Add the public key to the signature set
|
|
55
|
+
]),
|
|
56
|
+
|
|
57
|
+
// Finally, compare the sum with the minimum required signatures
|
|
58
|
+
minimumRequired,
|
|
59
|
+
opcodes.OP_NUMEQUAL, // Use NUMEQUALVERIFY to ensure the correct number of signatures
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const asm = compiledData.flat();
|
|
63
|
+
const compiled = script.compile(asm);
|
|
64
|
+
|
|
65
|
+
/** Verify the validity of the script */
|
|
66
|
+
const decompiled = script.decompile(compiled);
|
|
67
|
+
if (!decompiled) {
|
|
68
|
+
throw new Error('Failed to decompile script.');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return compiled;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import { Network, networks } from 'bitcoinjs-lib';
|
|
2
|
-
import { ContractBaseMetadata } from '../ContractBaseMetadata.js';
|
|
3
|
-
import { Address } from '@btc-vision/bsi-binary';
|
|
4
|
-
import { WBTC_ADDRESS_FRACTAL, WBTC_ADDRESS_REGTEST, WBTC_ADDRESS_TESTNET } from '../tokens.js';
|
|
5
|
-
import { ChainId } from '../../network/ChainId.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @description Wrapped Bitcoin (wBTC) contract metadata.
|
|
9
|
-
* */
|
|
10
|
-
export class wBTC extends ContractBaseMetadata {
|
|
11
|
-
/**
|
|
12
|
-
* @description Token Name
|
|
13
|
-
*/
|
|
14
|
-
public readonly tokenName: string = 'Wrapped Bitcoin';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @description Token Symbol
|
|
18
|
-
*/
|
|
19
|
-
public readonly tokenSymbol: string = 'wBTC';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @description Token Decimals, same as Bitcoin
|
|
23
|
-
*/
|
|
24
|
-
public readonly decimals: number = 8;
|
|
25
|
-
|
|
26
|
-
protected readonly address: Address;
|
|
27
|
-
|
|
28
|
-
constructor(
|
|
29
|
-
protected network: Network = networks.bitcoin,
|
|
30
|
-
chainId: ChainId = ChainId.Bitcoin,
|
|
31
|
-
) {
|
|
32
|
-
super(network);
|
|
33
|
-
|
|
34
|
-
this.address = wBTC.getAddress(network, chainId);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
public static getAddress(network: Network = networks.bitcoin, chainId?: ChainId): Address {
|
|
38
|
-
switch (network.bech32) {
|
|
39
|
-
case networks.bitcoin.bech32:
|
|
40
|
-
return this.getWBTCAddressForChain(chainId ?? ChainId.Bitcoin);
|
|
41
|
-
case networks.regtest.bech32:
|
|
42
|
-
return WBTC_ADDRESS_REGTEST;
|
|
43
|
-
case networks.testnet.bech32:
|
|
44
|
-
return WBTC_ADDRESS_TESTNET;
|
|
45
|
-
default:
|
|
46
|
-
throw new Error(`Invalid network: ${network}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
private static getWBTCAddressForChain(chainId: ChainId): Address {
|
|
51
|
-
switch (chainId) {
|
|
52
|
-
case ChainId.Bitcoin:
|
|
53
|
-
return 'unknown';
|
|
54
|
-
case ChainId.Fractal:
|
|
55
|
-
return WBTC_ADDRESS_FRACTAL;
|
|
56
|
-
default:
|
|
57
|
-
throw new Error(`Invalid chainId: ${chainId}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
1
|
+
import { Network, networks } from 'bitcoinjs-lib';
|
|
2
|
+
import { ContractBaseMetadata } from '../ContractBaseMetadata.js';
|
|
3
|
+
import { Address } from '@btc-vision/bsi-binary';
|
|
4
|
+
import { WBTC_ADDRESS_FRACTAL, WBTC_ADDRESS_REGTEST, WBTC_ADDRESS_TESTNET } from '../tokens.js';
|
|
5
|
+
import { ChainId } from '../../network/ChainId.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @description Wrapped Bitcoin (wBTC) contract metadata.
|
|
9
|
+
* */
|
|
10
|
+
export class wBTC extends ContractBaseMetadata {
|
|
11
|
+
/**
|
|
12
|
+
* @description Token Name
|
|
13
|
+
*/
|
|
14
|
+
public readonly tokenName: string = 'Wrapped Bitcoin';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @description Token Symbol
|
|
18
|
+
*/
|
|
19
|
+
public readonly tokenSymbol: string = 'wBTC';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @description Token Decimals, same as Bitcoin
|
|
23
|
+
*/
|
|
24
|
+
public readonly decimals: number = 8;
|
|
25
|
+
|
|
26
|
+
protected readonly address: Address;
|
|
27
|
+
|
|
28
|
+
constructor(
|
|
29
|
+
protected network: Network = networks.bitcoin,
|
|
30
|
+
chainId: ChainId = ChainId.Bitcoin,
|
|
31
|
+
) {
|
|
32
|
+
super(network);
|
|
33
|
+
|
|
34
|
+
this.address = wBTC.getAddress(network, chainId);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public static getAddress(network: Network = networks.bitcoin, chainId?: ChainId): Address {
|
|
38
|
+
switch (network.bech32) {
|
|
39
|
+
case networks.bitcoin.bech32:
|
|
40
|
+
return this.getWBTCAddressForChain(chainId ?? ChainId.Bitcoin);
|
|
41
|
+
case networks.regtest.bech32:
|
|
42
|
+
return WBTC_ADDRESS_REGTEST;
|
|
43
|
+
case networks.testnet.bech32:
|
|
44
|
+
return WBTC_ADDRESS_TESTNET;
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`Invalid network: ${network}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private static getWBTCAddressForChain(chainId: ChainId): Address {
|
|
51
|
+
switch (chainId) {
|
|
52
|
+
case ChainId.Bitcoin:
|
|
53
|
+
return 'unknown';
|
|
54
|
+
case ChainId.Fractal:
|
|
55
|
+
return WBTC_ADDRESS_FRACTAL;
|
|
56
|
+
default:
|
|
57
|
+
throw new Error(`Invalid chainId: ${chainId}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|