@btc-vision/transaction 1.0.85 → 1.0.86
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/.gitattributes +2 -2
- package/browser/_version.d.ts +1 -1
- package/browser/index.js +1 -1
- package/browser/keypair/Wallet.d.ts +3 -0
- package/browser/transaction/builders/TapUnwarpTransaction.d.ts +40 -40
- package/browser/transaction/builders/UnwarpTransaction.d.ts +34 -34
- package/browser/utxo/UTXOManager.d.ts +7 -7
- package/build/Utils.d.ts +0 -0
- package/build/Utils.js +1 -0
- package/build/_version.d.ts +1 -1
- package/build/_version.js +1 -1
- package/build/consensus/metadata/RoswsellConsensus.d.ts +2 -0
- package/build/consensus/metadata/RoswsellConsensus.js +4 -0
- package/build/contracts/ContractMetadataManager.d.ts +0 -0
- package/build/contracts/ContractMetadataManager.js +1 -0
- package/build/generators/OPNetAddressGenerator.d.ts +0 -0
- package/build/generators/OPNetAddressGenerator.js +1 -0
- package/build/generators/builders/UnwrapGenerator.d.ts +8 -0
- package/build/generators/builders/UnwrapGenerator.js +79 -0
- package/build/keypair/Wallet.d.ts +3 -0
- package/build/keypair/Wallet.js +8 -0
- package/build/keypair/interfaces/GeneratedWallet.d.ts +5 -0
- package/build/keypair/interfaces/GeneratedWallet.js +1 -0
- package/build/metadata/CommonContracts.d.ts +6 -0
- package/build/metadata/CommonContracts.js +5 -0
- package/build/metadata/ContractMetadataManager.d.ts +1 -0
- package/build/metadata/ContractMetadataManager.js +9 -0
- package/build/metadata/contracts/ContractBase.d.ts +9 -0
- package/build/metadata/contracts/ContractBase.js +13 -0
- package/build/metadata/contracts/ContractBaseMetadata.d.ts +9 -0
- package/build/metadata/contracts/ContractBaseMetadata.js +13 -0
- package/build/metadata/contracts/ContractMetadataManager.d.ts +0 -0
- package/build/metadata/contracts/ContractMetadataManager.js +1 -0
- package/build/network/NetworkConverter.d.ts +0 -0
- package/build/network/NetworkConverter.js +14 -0
- package/build/scripts/Regtest.d.ts +2 -0
- package/build/scripts/Regtest.js +15 -0
- package/build/scripts/test.d.ts +1 -0
- package/build/scripts/test.js +74 -0
- package/build/signer/Regtest.d.ts +2 -0
- package/build/signer/Regtest.js +15 -0
- package/build/tests/Regtest.d.ts +3 -0
- package/build/tests/Regtest.js +29 -0
- package/build/tests/adaptPSBT.d.ts +1 -0
- package/build/tests/adaptPSBT.js +44 -0
- package/build/tests/btc/send.d.ts +1 -0
- package/build/tests/btc/send.js +35 -0
- package/build/tests/btc/transfer.d.ts +1 -0
- package/build/tests/btc/transfer.js +35 -0
- package/build/tests/createPairReg.d.ts +1 -0
- package/build/tests/createPairReg.js +73 -0
- package/build/tests/deploy/deployMoto.d.ts +4 -0
- package/build/tests/deploy/deployMoto.js +89 -0
- package/build/tests/deploy/deployPool.d.ts +1 -0
- package/build/tests/deploy/deployPool.js +5 -0
- package/build/tests/deploy/deployStep1.d.ts +1 -0
- package/build/tests/deploy/deployStep1.js +5 -0
- package/build/tests/deploy/deployStep2.d.ts +1 -0
- package/build/tests/deploy/deployStep2.js +5 -0
- package/build/tests/deploy/deployStep3.d.ts +1 -0
- package/build/tests/deploy/deployStep3.js +5 -0
- package/build/tests/deploy.d.ts +1 -0
- package/build/tests/deploy.js +41 -0
- package/build/tests/deployMotoRegStep1.d.ts +1 -0
- package/build/tests/deployMotoRegStep1.js +85 -0
- package/build/tests/deployReg.d.ts +1 -0
- package/build/tests/deployReg.js +85 -0
- package/build/tests/factory/createPairReg.d.ts +1 -0
- package/build/tests/factory/createPairReg.js +13 -0
- package/build/tests/gen.d.ts +1 -0
- package/build/tests/gen.js +19 -0
- package/build/tests/interaction.d.ts +5 -0
- package/build/tests/interaction.js +62 -0
- package/build/tests/massWrapReg.d.ts +1 -0
- package/build/tests/massWrapReg.js +105 -0
- package/build/tests/mineReg.d.ts +1 -0
- package/build/tests/mineReg.js +19 -0
- package/build/tests/moto/airdropToken.d.ts +1 -0
- package/build/tests/moto/airdropToken.js +21 -0
- package/build/tests/moto/airdropTokens.d.ts +1 -0
- package/build/tests/moto/airdropTokens.js +60 -0
- package/build/tests/moto/allowance.d.ts +1 -0
- package/build/tests/moto/allowance.js +6 -0
- package/build/tests/moto/approve.d.ts +1 -0
- package/build/tests/moto/approve.js +10 -0
- package/build/tests/moto/approveWBTC.d.ts +1 -0
- package/build/tests/moto/approveWBTC.js +12 -0
- package/build/tests/moto/balanceOf.d.ts +1 -0
- package/build/tests/moto/balanceOf.js +12 -0
- package/build/tests/moto/transfer.d.ts +1 -0
- package/build/tests/moto/transfer.js +16 -0
- package/build/tests/motoswap/airdropToken.d.ts +11 -0
- package/build/tests/motoswap/airdropToken.js +36 -0
- package/build/tests/motoswap/deployMoto.d.ts +4 -0
- package/build/tests/motoswap/deployMoto.js +89 -0
- package/build/tests/motoswap/deployMotoRegStep1.d.ts +1 -0
- package/build/tests/motoswap/deployMotoRegStep1.js +91 -0
- package/build/tests/motoswap/deployMotoRegStep2.d.ts +1 -0
- package/build/tests/motoswap/deployMotoRegStep2.js +91 -0
- package/build/tests/motoswap/deployPool.d.ts +1 -0
- package/build/tests/motoswap/deployPool.js +5 -0
- package/build/tests/motoswap/deployStep1.d.ts +1 -0
- package/build/tests/motoswap/deployStep1.js +5 -0
- package/build/tests/motoswap/deployStep2.d.ts +1 -0
- package/build/tests/motoswap/deployStep2.js +5 -0
- package/build/tests/motoswap/deployStep3.d.ts +1 -0
- package/build/tests/motoswap/deployStep3.js +5 -0
- package/build/tests/motoswap/interaction.d.ts +3 -0
- package/build/tests/motoswap/interaction.js +63 -0
- package/build/tests/motoswap/routerAddLiquidity.d.ts +11 -0
- package/build/tests/motoswap/routerAddLiquidity.js +35 -0
- package/build/tests/motoswap-router/addLiquidity.d.ts +11 -0
- package/build/tests/motoswap-router/addLiquidity.js +36 -0
- package/build/tests/motoswap-router/deployMoto.d.ts +4 -0
- package/build/tests/motoswap-router/deployMoto.js +89 -0
- package/build/tests/motoswap-router/deployPool.d.ts +1 -0
- package/build/tests/motoswap-router/deployPool.js +5 -0
- package/build/tests/motoswap-router/deployStep1.d.ts +1 -0
- package/build/tests/motoswap-router/deployStep1.js +5 -0
- package/build/tests/motoswap-router/deployStep2.d.ts +1 -0
- package/build/tests/motoswap-router/deployStep2.js +5 -0
- package/build/tests/motoswap-router/deployStep3.d.ts +1 -0
- package/build/tests/motoswap-router/deployStep3.js +5 -0
- package/build/tests/motoswap-router/getAmountsOut.d.ts +5 -0
- package/build/tests/motoswap-router/getAmountsOut.js +34 -0
- package/build/tests/motoswap-router/routerAddLiquidity.d.ts +11 -0
- package/build/tests/motoswap-router/routerAddLiquidity.js +35 -0
- package/build/tests/motoswap-router/swap.d.ts +8 -0
- package/build/tests/motoswap-router/swap.js +24 -0
- package/build/tests/multisign.d.ts +1 -0
- package/build/tests/multisign.js +47 -0
- package/build/tests/multisign2.d.ts +1 -0
- package/build/tests/multisign2.js +27 -0
- package/build/tests/pool/DecodePoolAddress.d.ts +6 -0
- package/build/tests/pool/DecodePoolAddress.js +12 -0
- package/build/tests/pool/decodeReserves.d.ts +5 -0
- package/build/tests/pool/decodeReserves.js +13 -0
- package/build/tests/pool/reserves.d.ts +1 -0
- package/build/tests/pool/reserves.js +18 -0
- package/build/tests/shared/Utils.d.ts +2 -0
- package/build/tests/shared/Utils.js +14 -0
- package/build/tests/shared/interaction.d.ts +7 -0
- package/build/tests/shared/interaction.js +85 -0
- package/build/tests/shared/tokens.d.ts +6 -0
- package/build/tests/shared/tokens.js +5 -0
- package/build/tests/stakeReg.d.ts +1 -0
- package/build/tests/stakeReg.js +73 -0
- package/build/tests/stakedReg.d.ts +1 -0
- package/build/tests/stakedReg.js +28 -0
- package/build/tests/test.d.ts +1 -0
- package/build/tests/test.js +51 -0
- package/build/tests/test2.d.ts +1 -0
- package/build/tests/test2.js +73 -0
- package/build/tests/testReg.d.ts +1 -0
- package/build/tests/testReg.js +91 -0
- package/build/tests/tokens.d.ts +6 -0
- package/build/tests/tokens.js +5 -0
- package/build/tests/totalRewardReg.d.ts +1 -0
- package/build/tests/totalRewardReg.js +28 -0
- package/build/tests/transfer.d.ts +1 -0
- package/build/tests/transfer.js +74 -0
- package/build/tests/transferReg.d.ts +1 -0
- package/build/tests/transferReg.js +74 -0
- package/build/tests/unStakeReg.d.ts +1 -0
- package/build/tests/unStakeReg.js +72 -0
- package/build/tests/unwrapReg.d.ts +1 -0
- package/build/tests/unwrapReg.js +61 -0
- package/build/tests/unwrapReg2.d.ts +1 -0
- package/build/tests/unwrapReg2.js +56 -0
- package/build/tests/unwrapRegSegwit.d.ts +1 -0
- package/build/tests/unwrapRegSegwit.js +83 -0
- package/build/tests/wbtc/approve.d.ts +1 -0
- package/build/tests/wbtc/approve.js +6 -0
- package/build/tests/wbtc/approveWBTC.d.ts +1 -0
- package/build/tests/wbtc/approveWBTC.js +12 -0
- package/build/tests/wbtc/massWrapReg.d.ts +1 -0
- package/build/tests/wbtc/massWrapReg.js +105 -0
- package/build/tests/wbtc/transfer.d.ts +1 -0
- package/build/tests/wbtc/transfer.js +16 -0
- package/build/tests/wbtc/transferReg.d.ts +1 -0
- package/build/tests/wbtc/transferReg.js +16 -0
- package/build/tests/wbtc/unStakeReg.d.ts +1 -0
- package/build/tests/wbtc/unStakeReg.js +72 -0
- package/build/tests/wbtc/unwrapReg.d.ts +1 -0
- package/build/tests/wbtc/unwrapReg.js +60 -0
- package/build/tests/wbtc/unwrapRegSegwit.d.ts +1 -0
- package/build/tests/wbtc/unwrapRegSegwit.js +83 -0
- package/build/tests/wbtc/withdrawalRequestReg.d.ts +1 -0
- package/build/tests/wbtc/withdrawalRequestReg.js +71 -0
- package/build/tests/wbtc/wrapReg.d.ts +1 -0
- package/build/tests/wbtc/wrapReg.js +65 -0
- package/build/tests/wbtc/wrapTest.d.ts +1 -0
- package/build/tests/wbtc/wrapTest.js +66 -0
- package/build/tests/withdrawalRequestReg.d.ts +1 -0
- package/build/tests/withdrawalRequestReg.js +71 -0
- package/build/tests/wrap.d.ts +1 -0
- package/build/tests/wrap.js +65 -0
- package/build/tests/wrapReg.d.ts +1 -0
- package/build/tests/wrapReg.js +68 -0
- package/build/tests/wrapTest.d.ts +1 -0
- package/build/tests/wrapTest.js +66 -0
- package/build/tests/wrapTestg.d.ts +1 -0
- package/build/tests/wrapTestg.js +66 -0
- package/build/tests/writers/allowance.d.ts +3 -0
- package/build/tests/writers/allowance.js +10 -0
- package/build/tests/writers/approve.d.ts +4 -0
- package/build/tests/writers/approve.js +11 -0
- package/build/transaction/TransactionBuilder.d.ts +60 -0
- package/build/transaction/TransactionBuilder.js +244 -0
- package/build/transaction/browser/BrowserSigner.d.ts +11 -0
- package/build/transaction/browser/BrowserSigner.js +10 -0
- package/build/transaction/browser/extensions/Unisat.d.ts +54 -0
- package/build/transaction/browser/extensions/Unisat.js +11 -0
- package/build/transaction/builders/GenericTransaction.d.ts +11 -0
- package/build/transaction/builders/GenericTransaction.js +23 -0
- package/build/transaction/builders/TapUnwarpTransaction.d.ts +37 -0
- package/build/transaction/builders/TapUnwarpTransaction.js +201 -0
- package/build/transaction/builders/UnwarpSegwitTransaction.d.ts +34 -0
- package/build/transaction/builders/UnwarpSegwitTransaction.js +184 -0
- package/build/transaction/builders/UnwarpTransaction.d.ts +35 -0
- package/build/transaction/builders/UnwarpTransaction.js +199 -0
- package/build/transaction/interfaces/ITransactions.d.ts +32 -0
- package/build/transaction/interfaces/ITransactions.js +1 -0
- package/build/utxo/IUTXO.d.ts +0 -0
- package/build/utxo/IUTXO.js +1 -0
- package/build/utxo/OPNetUtils.d.ts +7 -0
- package/build/utxo/OPNetUtils.js +47 -0
- package/build/utxo/UTXOManager.d.ts +7 -0
- package/build/utxo/UTXOManager.js +47 -0
- package/build/wbtc/BroadcastResponse.d.ts +0 -0
- package/build/wbtc/BroadcastResponse.js +1 -0
- package/gulpfile.js +152 -152
- package/package.json +109 -109
- package/src/_version.ts +1 -1
- package/src/consensus/Consensus.ts +36 -36
- package/src/consensus/ConsensusConfig.ts +39 -39
- package/src/crypto/crypto-browser.js +75 -75
- package/src/generators/AddressGenerator.ts +24 -24
- package/src/generators/Features.ts +5 -5
- package/src/generators/Generator.ts +75 -75
- package/src/generators/builders/CalldataGenerator.ts +148 -148
- package/src/generators/builders/DeploymentGenerator.ts +66 -66
- package/src/index.ts +4 -4
- package/src/keypair/AddressVerificator.ts +40 -40
- package/src/keypair/EcKeyPair.ts +282 -282
- package/src/keypair/Wallet.ts +120 -97
- package/src/keypair/interfaces/IWallet.ts +19 -19
- package/src/metadata/ContractBaseMetadata.ts +23 -23
- package/src/metadata/contracts/wBTC.ts +60 -60
- package/src/metadata/tokens.ts +135 -135
- package/src/network/NetworkInformation.ts +7 -7
- package/src/transaction/TransactionFactory.ts +496 -496
- package/src/transaction/browser/BrowserSignerBase.ts +37 -37
- package/src/transaction/browser/Web3Provider.ts +46 -46
- package/src/transaction/browser/extensions/UnisatSigner.ts +218 -218
- package/src/transaction/browser/types/Unisat.ts +97 -97
- package/src/transaction/builders/FundingTransaction.ts +40 -40
- package/src/transaction/builders/InteractionTransaction.ts +38 -38
- package/src/transaction/builders/SharedInteractionTransaction.ts +368 -368
- package/src/transaction/builders/TransactionBuilder.ts +665 -665
- package/src/transaction/builders/UnwrapSegwitTransaction.ts +365 -365
- package/src/transaction/builders/UnwrapTransaction.ts +507 -507
- package/src/transaction/builders/WrapTransaction.ts +346 -346
- package/src/transaction/interfaces/ITransactionParameters.ts +59 -59
- package/src/transaction/interfaces/Tap.ts +26 -26
- package/src/transaction/psbt/PSBTTypes.ts +3 -3
- package/src/transaction/shared/TweakedTransaction.ts +539 -539
- package/src/utxo/OPNetLimitedProvider.ts +244 -244
- package/src/utxo/interfaces/BroadcastResponse.ts +10 -10
- package/src/utxo/interfaces/IUTXO.ts +29 -29
- package/src/verification/TapscriptVerificator.ts +89 -89
- package/src/wbtc/Generate.ts +40 -40
- package/src/wbtc/UnwrapGeneration.ts +13 -13
- package/src/wbtc/WrappedGenerationParameters.ts +33 -33
- package/webpack.config.js +78 -78
- /package/build/generators/builders/{MultiSignGenerator.d.ts → MultisignGenerator.d.ts} +0 -0
- /package/build/generators/builders/{MultiSignGenerator.js → MultisignGenerator.js} +0 -0
- /package/build/generators/{Features.d.ts → features.d.ts} +0 -0
- /package/build/generators/{Features.js → features.js} +0 -0
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { Consensus } from './Consensus.js';
|
|
2
|
-
import { RoswellConsensus } from './metadata/RoswellConsensus.js';
|
|
3
|
-
|
|
4
|
-
export interface ConsensusConfig<T extends Consensus> {
|
|
5
|
-
// The consensus type.
|
|
6
|
-
readonly CONSENSUS: T;
|
|
7
|
-
|
|
8
|
-
// The consensus name.
|
|
9
|
-
readonly CONSENSUS_NAME: string;
|
|
10
|
-
|
|
11
|
-
// The block height at which this consensus was enabled.
|
|
12
|
-
readonly ENABLED_AT_BLOCK: bigint;
|
|
13
|
-
|
|
14
|
-
/** WBTC vaults */
|
|
15
|
-
// Defines the minimum amount that can be consolidated in a single transaction.
|
|
16
|
-
readonly VAULT_MINIMUM_AMOUNT: bigint;
|
|
17
|
-
|
|
18
|
-
// Defines the requested minimum acceptance for joining UTXOs when an unwrap is being done.
|
|
19
|
-
// If the consolidate output going back to the vault is lower than this amount, the transaction will be rejected.
|
|
20
|
-
// User must pay for the consolidation, this help the network by having fewer UTXOs.
|
|
21
|
-
readonly VAULT_NETWORK_CONSOLIDATION_ACCEPTANCE: bigint;
|
|
22
|
-
|
|
23
|
-
// Everytime an user wrap bitcoin, he prepays the fees for the consolidation at a maximum fee rate of the following determined value.
|
|
24
|
-
// If the fees are lower, the user will be refunded the difference.
|
|
25
|
-
// If the fees are higher, the user must pay the difference.
|
|
26
|
-
readonly UNWRAP_CONSOLIDATION_PREPAID_FEES: bigint;
|
|
27
|
-
|
|
28
|
-
// The maximum fee rate for the consolidation.
|
|
29
|
-
readonly UNWRAP_CONSOLIDATION_PREPAID_FEES_SAT: bigint;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const OPNetConsensusConfig: { [key in Consensus]?: ConsensusConfig<key> } = {
|
|
33
|
-
[Consensus.Roswell]: RoswellConsensus,
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const currentConsensus = Consensus.Roswell;
|
|
37
|
-
export const currentConsensusConfig = OPNetConsensusConfig[
|
|
38
|
-
currentConsensus
|
|
39
|
-
] as ConsensusConfig<Consensus.Roswell>;
|
|
1
|
+
import { Consensus } from './Consensus.js';
|
|
2
|
+
import { RoswellConsensus } from './metadata/RoswellConsensus.js';
|
|
3
|
+
|
|
4
|
+
export interface ConsensusConfig<T extends Consensus> {
|
|
5
|
+
// The consensus type.
|
|
6
|
+
readonly CONSENSUS: T;
|
|
7
|
+
|
|
8
|
+
// The consensus name.
|
|
9
|
+
readonly CONSENSUS_NAME: string;
|
|
10
|
+
|
|
11
|
+
// The block height at which this consensus was enabled.
|
|
12
|
+
readonly ENABLED_AT_BLOCK: bigint;
|
|
13
|
+
|
|
14
|
+
/** WBTC vaults */
|
|
15
|
+
// Defines the minimum amount that can be consolidated in a single transaction.
|
|
16
|
+
readonly VAULT_MINIMUM_AMOUNT: bigint;
|
|
17
|
+
|
|
18
|
+
// Defines the requested minimum acceptance for joining UTXOs when an unwrap is being done.
|
|
19
|
+
// If the consolidate output going back to the vault is lower than this amount, the transaction will be rejected.
|
|
20
|
+
// User must pay for the consolidation, this help the network by having fewer UTXOs.
|
|
21
|
+
readonly VAULT_NETWORK_CONSOLIDATION_ACCEPTANCE: bigint;
|
|
22
|
+
|
|
23
|
+
// Everytime an user wrap bitcoin, he prepays the fees for the consolidation at a maximum fee rate of the following determined value.
|
|
24
|
+
// If the fees are lower, the user will be refunded the difference.
|
|
25
|
+
// If the fees are higher, the user must pay the difference.
|
|
26
|
+
readonly UNWRAP_CONSOLIDATION_PREPAID_FEES: bigint;
|
|
27
|
+
|
|
28
|
+
// The maximum fee rate for the consolidation.
|
|
29
|
+
readonly UNWRAP_CONSOLIDATION_PREPAID_FEES_SAT: bigint;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const OPNetConsensusConfig: { [key in Consensus]?: ConsensusConfig<key> } = {
|
|
33
|
+
[Consensus.Roswell]: RoswellConsensus,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const currentConsensus = Consensus.Roswell;
|
|
37
|
+
export const currentConsensusConfig = OPNetConsensusConfig[
|
|
38
|
+
currentConsensus
|
|
39
|
+
] as ConsensusConfig<Consensus.Roswell>;
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
/* Browser Crypto Shims */
|
|
2
|
-
import { hmac } from '@noble/hashes/hmac';
|
|
3
|
-
import { pbkdf2 } from '@noble/hashes/pbkdf2';
|
|
4
|
-
import { sha256 } from '@noble/hashes/sha256';
|
|
5
|
-
import { sha512 } from '@noble/hashes/sha512';
|
|
6
|
-
import assert from 'assert';
|
|
7
|
-
|
|
8
|
-
function assertArgument(check, message, name, value) {
|
|
9
|
-
assert(check, message, 'INVALID_ARGUMENT', { argument: name, value: value });
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function getGlobal() {
|
|
13
|
-
if (typeof self !== 'undefined') {
|
|
14
|
-
return self;
|
|
15
|
-
}
|
|
16
|
-
if (typeof window !== 'undefined') {
|
|
17
|
-
return window;
|
|
18
|
-
}
|
|
19
|
-
if (typeof global !== 'undefined') {
|
|
20
|
-
return global;
|
|
21
|
-
}
|
|
22
|
-
throw new Error('unable to locate global object');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const anyGlobal = getGlobal();
|
|
26
|
-
const crypto = anyGlobal.crypto || anyGlobal.msCrypto;
|
|
27
|
-
|
|
28
|
-
export function createHash(algo) {
|
|
29
|
-
switch (algo) {
|
|
30
|
-
case 'sha256':
|
|
31
|
-
return sha256.create();
|
|
32
|
-
case 'sha512':
|
|
33
|
-
return sha512.create();
|
|
34
|
-
}
|
|
35
|
-
assertArgument(false, 'invalid hashing algorithm name', 'algorithm', algo);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function createHmac(_algo, key) {
|
|
39
|
-
const algo = { sha256, sha512 }[_algo];
|
|
40
|
-
assertArgument(algo != null, 'invalid hmac algorithm', 'algorithm', _algo);
|
|
41
|
-
return hmac.create(algo, key);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function pbkdf2Sync(password, salt, iterations, keylen, _algo) {
|
|
45
|
-
const algo = { sha256, sha512 }[_algo];
|
|
46
|
-
assertArgument(algo != null, 'invalid pbkdf2 algorithm', 'algorithm', _algo);
|
|
47
|
-
return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function randomBytes(length) {
|
|
51
|
-
assert(
|
|
52
|
-
crypto != null,
|
|
53
|
-
'platform does not support secure random numbers',
|
|
54
|
-
'UNSUPPORTED_OPERATION',
|
|
55
|
-
{
|
|
56
|
-
operation: 'randomBytes',
|
|
57
|
-
},
|
|
58
|
-
);
|
|
59
|
-
assertArgument(
|
|
60
|
-
Number.isInteger(length) && length > 0 && length <= 1024,
|
|
61
|
-
'invalid length',
|
|
62
|
-
'length',
|
|
63
|
-
length,
|
|
64
|
-
);
|
|
65
|
-
const result = new Uint8Array(length);
|
|
66
|
-
crypto.getRandomValues(result);
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export default {
|
|
71
|
-
createHash,
|
|
72
|
-
createHmac,
|
|
73
|
-
pbkdf2Sync,
|
|
74
|
-
randomBytes,
|
|
75
|
-
};
|
|
1
|
+
/* Browser Crypto Shims */
|
|
2
|
+
import { hmac } from '@noble/hashes/hmac';
|
|
3
|
+
import { pbkdf2 } from '@noble/hashes/pbkdf2';
|
|
4
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
5
|
+
import { sha512 } from '@noble/hashes/sha512';
|
|
6
|
+
import assert from 'assert';
|
|
7
|
+
|
|
8
|
+
function assertArgument(check, message, name, value) {
|
|
9
|
+
assert(check, message, 'INVALID_ARGUMENT', { argument: name, value: value });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function getGlobal() {
|
|
13
|
+
if (typeof self !== 'undefined') {
|
|
14
|
+
return self;
|
|
15
|
+
}
|
|
16
|
+
if (typeof window !== 'undefined') {
|
|
17
|
+
return window;
|
|
18
|
+
}
|
|
19
|
+
if (typeof global !== 'undefined') {
|
|
20
|
+
return global;
|
|
21
|
+
}
|
|
22
|
+
throw new Error('unable to locate global object');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const anyGlobal = getGlobal();
|
|
26
|
+
const crypto = anyGlobal.crypto || anyGlobal.msCrypto;
|
|
27
|
+
|
|
28
|
+
export function createHash(algo) {
|
|
29
|
+
switch (algo) {
|
|
30
|
+
case 'sha256':
|
|
31
|
+
return sha256.create();
|
|
32
|
+
case 'sha512':
|
|
33
|
+
return sha512.create();
|
|
34
|
+
}
|
|
35
|
+
assertArgument(false, 'invalid hashing algorithm name', 'algorithm', algo);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function createHmac(_algo, key) {
|
|
39
|
+
const algo = { sha256, sha512 }[_algo];
|
|
40
|
+
assertArgument(algo != null, 'invalid hmac algorithm', 'algorithm', _algo);
|
|
41
|
+
return hmac.create(algo, key);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function pbkdf2Sync(password, salt, iterations, keylen, _algo) {
|
|
45
|
+
const algo = { sha256, sha512 }[_algo];
|
|
46
|
+
assertArgument(algo != null, 'invalid pbkdf2 algorithm', 'algorithm', _algo);
|
|
47
|
+
return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function randomBytes(length) {
|
|
51
|
+
assert(
|
|
52
|
+
crypto != null,
|
|
53
|
+
'platform does not support secure random numbers',
|
|
54
|
+
'UNSUPPORTED_OPERATION',
|
|
55
|
+
{
|
|
56
|
+
operation: 'randomBytes',
|
|
57
|
+
},
|
|
58
|
+
);
|
|
59
|
+
assertArgument(
|
|
60
|
+
Number.isInteger(length) && length > 0 && length <= 1024,
|
|
61
|
+
'invalid length',
|
|
62
|
+
'length',
|
|
63
|
+
length,
|
|
64
|
+
);
|
|
65
|
+
const result = new Uint8Array(length);
|
|
66
|
+
crypto.getRandomValues(result);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default {
|
|
71
|
+
createHash,
|
|
72
|
+
createHmac,
|
|
73
|
+
pbkdf2Sync,
|
|
74
|
+
randomBytes,
|
|
75
|
+
};
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { bech32 } from 'bech32';
|
|
2
|
-
import { initEccLib, Network } from 'bitcoinjs-lib';
|
|
3
|
-
import * as ecc from '@bitcoinerlab/secp256k1';
|
|
4
|
-
import { ripemd160 } from 'bitcoinjs-lib/src/crypto.js';
|
|
5
|
-
|
|
6
|
-
initEccLib(ecc);
|
|
7
|
-
|
|
8
|
-
export class AddressGenerator {
|
|
9
|
-
// Generate a valid SegWit address from random bytes
|
|
10
|
-
public static generatePKSH(sha256Hash: Buffer, network: Network): string {
|
|
11
|
-
if (sha256Hash.length !== 32) throw new Error('Invalid hash length');
|
|
12
|
-
|
|
13
|
-
const pkh = ripemd160(sha256Hash);
|
|
14
|
-
return this.toSegwitAddress(pkh, network);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// Convert a hash to a SegWit address
|
|
18
|
-
private static toSegwitAddress(pkh: Buffer, network: Network): string {
|
|
19
|
-
const words = bech32.toWords(pkh);
|
|
20
|
-
words.unshift(0x00); // Add the witness version byte (0x00 for P2WPKH)
|
|
21
|
-
|
|
22
|
-
return bech32.encode(network.bech32, words);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
import { bech32 } from 'bech32';
|
|
2
|
+
import { initEccLib, Network } from 'bitcoinjs-lib';
|
|
3
|
+
import * as ecc from '@bitcoinerlab/secp256k1';
|
|
4
|
+
import { ripemd160 } from 'bitcoinjs-lib/src/crypto.js';
|
|
5
|
+
|
|
6
|
+
initEccLib(ecc);
|
|
7
|
+
|
|
8
|
+
export class AddressGenerator {
|
|
9
|
+
// Generate a valid SegWit address from random bytes
|
|
10
|
+
public static generatePKSH(sha256Hash: Buffer, network: Network): string {
|
|
11
|
+
if (sha256Hash.length !== 32) throw new Error('Invalid hash length');
|
|
12
|
+
|
|
13
|
+
const pkh = ripemd160(sha256Hash);
|
|
14
|
+
return this.toSegwitAddress(pkh, network);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Convert a hash to a SegWit address
|
|
18
|
+
private static toSegwitAddress(pkh: Buffer, network: Network): string {
|
|
19
|
+
const words = bech32.toWords(pkh);
|
|
20
|
+
words.unshift(0x00); // Add the witness version byte (0x00 for P2WPKH)
|
|
21
|
+
|
|
22
|
+
return bech32.encode(network.bech32, words);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { opcodes } from 'bitcoinjs-lib';
|
|
2
|
-
|
|
3
|
-
export enum Features {
|
|
4
|
-
UNWRAP = opcodes.OP_16,
|
|
5
|
-
}
|
|
1
|
+
import { opcodes } from 'bitcoinjs-lib';
|
|
2
|
+
|
|
3
|
+
export enum Features {
|
|
4
|
+
UNWRAP = opcodes.OP_16,
|
|
5
|
+
}
|
|
@@ -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
|
+
}
|