@btc-vision/transaction 1.0.6 → 1.0.8
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/Deploy.md +186 -0
- package/README.md +5 -0
- package/Wrap.md +192 -0
- package/browser/_version.d.ts +1 -1
- package/browser/index.js +1 -1
- package/browser/index.js.LICENSE.txt +9 -0
- package/browser/opnet.d.ts +6 -1
- package/browser/tests/deploy.d.ts +1 -0
- package/browser/tests/wrap.d.ts +1 -0
- package/browser/tests/wrapTest.d.ts +1 -0
- package/browser/transaction/TransactionFactory.d.ts +15 -1
- package/browser/transaction/builders/DeploymentTransaction.d.ts +40 -0
- package/browser/transaction/builders/InteractionTransaction.d.ts +2 -35
- package/browser/transaction/builders/SharedInteractionTransaction.d.ts +46 -0
- package/browser/transaction/builders/TransactionBuilder.d.ts +8 -1
- package/browser/transaction/builders/WrapTransaction.d.ts +27 -0
- package/browser/transaction/interfaces/ITransactionParameters.d.ts +16 -12
- package/browser/utils/BitcoinUtils.d.ts +1 -0
- package/browser/utxo/OPNetLimitedProvider.d.ts +10 -0
- package/browser/wbtc/Generate.d.ts +13 -0
- package/browser/wbtc/WrappedGenerationParameters.d.ts +11 -0
- package/build/_version.d.ts +1 -1
- package/build/_version.js +1 -1
- package/build/bytecode/Compressor.js +4 -3
- package/build/generators/AddressGenerator.js +1 -1
- package/build/keypair/EcKeyPair.js +1 -1
- package/build/opnet.d.ts +6 -1
- package/build/opnet.js +6 -1
- package/build/signer/TweakedSigner.js +1 -1
- package/build/tests/deploy.d.ts +1 -0
- package/build/tests/deploy.js +60 -0
- package/build/tests/test.js +3 -3
- package/build/tests/transfer.js +2 -2
- package/build/tests/wrap.d.ts +1 -0
- package/build/tests/wrap.js +64 -0
- package/build/tests/wrapTest.d.ts +1 -0
- package/build/tests/wrapTest.js +64 -0
- package/build/tests/wrapTestg.d.ts +1 -0
- package/build/tests/wrapTestg.js +66 -0
- package/build/transaction/TransactionFactory.d.ts +15 -1
- package/build/transaction/TransactionFactory.js +68 -0
- package/build/transaction/builders/DeploymentTransaction.d.ts +40 -0
- package/build/transaction/builders/DeploymentTransaction.js +216 -0
- package/build/transaction/builders/FundingTransaction.js +4 -1
- package/build/transaction/builders/InteractionTransaction.d.ts +2 -35
- package/build/transaction/builders/InteractionTransaction.js +4 -207
- package/build/transaction/builders/SharedInteractionTransaction.d.ts +46 -0
- package/build/transaction/builders/SharedInteractionTransaction.js +213 -0
- package/build/transaction/builders/TransactionBuilder.d.ts +8 -1
- package/build/transaction/builders/TransactionBuilder.js +20 -12
- package/build/transaction/builders/WrapTransaction.d.ts +27 -0
- package/build/transaction/builders/WrapTransaction.js +132 -0
- package/build/transaction/interfaces/ITransactionParameters.d.ts +16 -12
- package/build/utils/BitcoinUtils.d.ts +1 -0
- package/build/utils/BitcoinUtils.js +7 -0
- package/build/utxo/OPNetLimitedProvider.d.ts +10 -0
- package/build/utxo/OPNetLimitedProvider.js +85 -0
- package/build/utxo/OPNetUtils.d.ts +7 -0
- package/build/utxo/OPNetUtils.js +47 -0
- package/build/verification/TapscriptVerificator.js +3 -3
- package/build/wbtc/Generate.d.ts +13 -0
- package/build/wbtc/Generate.js +1 -0
- package/build/wbtc/WrappedGenerationParameters.d.ts +11 -0
- package/build/wbtc/WrappedGenerationParameters.js +16 -0
- package/bytecode/contract.wasm +0 -0
- package/cjs/_version.d.ts +1 -1
- package/cjs/_version.js +1 -1
- package/cjs/bytecode/Compressor.js +1 -1
- package/cjs/generators/AddressGenerator.d.ts +7 -0
- package/cjs/generators/AddressGenerator.js +48 -0
- package/cjs/generators/Generator.d.ts +1 -2
- package/cjs/generators/Generator.js +1 -3
- package/cjs/generators/builders/DeploymentGenerator.d.ts +1 -0
- package/cjs/generators/builders/DeploymentGenerator.js +10 -7
- package/cjs/keypair/Wallet.d.ts +1 -0
- package/cjs/keypair/Wallet.js +6 -0
- package/cjs/opnet.d.ts +23 -0
- package/cjs/opnet.js +37 -0
- package/cjs/tests/Regtest.d.ts +3 -0
- package/cjs/tests/Regtest.js +32 -0
- package/cjs/tests/gen.d.ts +1 -0
- package/cjs/tests/gen.js +17 -0
- package/cjs/tests/test.d.ts +1 -0
- package/cjs/tests/test.js +53 -0
- package/cjs/tests/transfer.d.ts +1 -0
- package/cjs/tests/transfer.js +76 -0
- package/cjs/transaction/TransactionFactory.js +7 -4
- package/cjs/transaction/builders/FundingTransaction.js +1 -1
- package/cjs/transaction/builders/InteractionTransaction.d.ts +2 -0
- package/cjs/transaction/builders/InteractionTransaction.js +11 -2
- package/cjs/transaction/builders/TransactionBuilder.d.ts +3 -2
- package/cjs/transaction/builders/TransactionBuilder.js +22 -7
- package/cjs/transaction/interfaces/ITransactionParameters.d.ts +1 -0
- package/cjs/verification/TapscriptVerificator.d.ts +17 -0
- package/cjs/verification/TapscriptVerificator.js +70 -0
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/AddressGenerator.html +2 -2
- package/docs/classes/BitcoinUtils.html +7 -3
- package/docs/classes/CalldataGenerator.html +10 -10
- package/docs/classes/Compressor.html +4 -4
- package/docs/classes/ContractBaseMetadata.html +4 -4
- package/docs/classes/DeploymentGenerator.html +9 -9
- package/docs/classes/DeploymentTransaction.html +368 -0
- package/docs/classes/EcKeyPair.html +16 -16
- package/docs/classes/FundingTransaction.html +50 -47
- package/docs/classes/Generator.html +9 -9
- package/docs/classes/InteractionTransaction.html +89 -109
- package/docs/classes/OPNetLimitedProvider.html +197 -0
- package/docs/classes/SharedInteractionTransaction.html +392 -0
- package/docs/classes/TapscriptVerificator.html +2 -2
- package/docs/classes/TransactionBuilder.html +53 -50
- package/docs/classes/TransactionFactory.html +11 -4
- package/docs/classes/TweakedSigner.html +2 -2
- package/docs/classes/Wallet.html +10 -10
- package/docs/classes/WrapTransaction.html +404 -0
- package/docs/classes/WrappedGeneration.html +187 -0
- package/docs/classes/wBTC.html +7 -7
- package/docs/enums/TransactionSequence.html +177 -0
- package/docs/enums/TransactionType.html +2 -2
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +3 -1
- package/docs/interfaces/ContractAddressVerificationParams.html +2 -2
- package/docs/interfaces/DeploymentResult.html +177 -0
- package/docs/interfaces/FetchUTXOParams.html +2 -2
- package/docs/interfaces/GenerationConstraints.html +182 -0
- package/docs/interfaces/IDeploymentParameters.html +183 -0
- package/docs/interfaces/IFundingTransactionParameters.html +3 -3
- package/docs/interfaces/IInteractionParameters.html +4 -6
- package/docs/interfaces/ITransactionParameters.html +3 -3
- package/docs/interfaces/IWallet.html +4 -4
- package/docs/interfaces/IWrapParameters.html +186 -0
- package/docs/interfaces/NetworkInformation.html +2 -2
- package/docs/interfaces/PsbtInputExtended.html +1 -1
- package/docs/interfaces/PsbtOutputExtendedAddress.html +2 -2
- package/docs/interfaces/PsbtOutputExtendedScript.html +2 -2
- package/docs/interfaces/RawUTXOResponse.html +2 -2
- package/docs/interfaces/SharedInteractionParameters.html +183 -0
- package/docs/interfaces/TapLeafScript.html +2 -2
- package/docs/interfaces/TweakSettings.html +3 -3
- package/docs/interfaces/UTXO.html +2 -2
- package/docs/interfaces/UpdateInput.html +2 -2
- package/docs/interfaces/WrapResult.html +178 -0
- package/docs/interfaces/WrappedGenerationParameters.html +184 -0
- package/docs/modules.html +14 -4
- package/docs/types/PsbtOutputExtended.html +1 -1
- package/docs/variables/version.html +1 -1
- package/package.json +4 -5
- package/src/_version.ts +1 -1
- package/src/bytecode/Compressor.ts +27 -26
- package/src/generators/AddressGenerator.ts +1 -1
- package/src/keypair/EcKeyPair.ts +1 -1
- package/src/opnet.ts +8 -1
- package/src/signer/TweakedSigner.ts +1 -1
- package/src/tests/deploy.ts +81 -0
- package/src/tests/test.ts +3 -3
- package/src/tests/transfer.ts +2 -2
- package/src/tests/wrap.ts +89 -0
- package/src/tests/wrapTest.ts +88 -0
- package/src/transaction/TransactionFactory.ts +119 -1
- package/src/transaction/builders/DeploymentTransaction.ts +418 -0
- package/src/transaction/builders/FundingTransaction.ts +5 -1
- package/src/transaction/builders/InteractionTransaction.ts +5 -404
- package/src/transaction/builders/SharedInteractionTransaction.ts +432 -0
- package/src/transaction/builders/TransactionBuilder.ts +41 -16
- package/src/transaction/builders/WrapTransaction.ts +286 -0
- package/src/transaction/interfaces/ITransactionParameters.ts +20 -13
- package/src/utils/BitcoinUtils.ts +16 -0
- package/src/utxo/{UTXOManager.ts → OPNetLimitedProvider.ts} +53 -2
- package/src/verification/TapscriptVerificator.ts +3 -3
- package/src/wbtc/Generate.ts +30 -0
- package/src/wbtc/WrappedGenerationParameters.ts +33 -0
- package/tests/TransactionBuilder.test.ts +58 -58
- package/tsconfig.webpack.json +7 -1
- package/webpack.config.js +3 -1
- package/browser/873e754d6c7c6e9361f1.module.wasm +0 -0
- package/docs/classes/UTXOManager.html +0 -187
- package/docs/interfaces/ITransactionDataContractDeployment.html +0 -184
- package/docs/interfaces/ITransactionDataContractInteractionWrap.html +0 -186
package/cjs/opnet.js
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
17
|
exports.version = void 0;
|
|
4
18
|
var _version_js_1 = require("./_version.js");
|
|
5
19
|
Object.defineProperty(exports, "version", { enumerable: true, get: function () { return _version_js_1.version; } });
|
|
20
|
+
__exportStar(require("./bytecode/Compressor.js"), exports);
|
|
21
|
+
__exportStar(require("./generators/Generator.js"), exports);
|
|
22
|
+
__exportStar(require("./generators/builders/CalldataGenerator.js"), exports);
|
|
23
|
+
__exportStar(require("./generators/builders/DeploymentGenerator.js"), exports);
|
|
24
|
+
__exportStar(require("./generators/AddressGenerator.js"), exports);
|
|
25
|
+
__exportStar(require("./verification/TapscriptVerificator.js"), exports);
|
|
26
|
+
__exportStar(require("./keypair/EcKeyPair.js"), exports);
|
|
27
|
+
__exportStar(require("./keypair/Wallet.js"), exports);
|
|
28
|
+
__exportStar(require("./keypair/interfaces/IWallet.js"), exports);
|
|
29
|
+
__exportStar(require("./metadata/contracts/wBTC.js"), exports);
|
|
30
|
+
__exportStar(require("./metadata/ContractBaseMetadata.js"), exports);
|
|
31
|
+
__exportStar(require("./network/NetworkInformation.js"), exports);
|
|
32
|
+
__exportStar(require("./signer/TweakedSigner.js"), exports);
|
|
33
|
+
__exportStar(require("./transaction/TransactionFactory.js"), exports);
|
|
34
|
+
__exportStar(require("./transaction/interfaces/ITransactionParameters.js"), exports);
|
|
35
|
+
__exportStar(require("./transaction/interfaces/Tap.js"), exports);
|
|
36
|
+
__exportStar(require("./transaction/enums/TransactionType.js"), exports);
|
|
37
|
+
__exportStar(require("./transaction/builders/InteractionTransaction.js"), exports);
|
|
38
|
+
__exportStar(require("./transaction/builders/FundingTransaction.js"), exports);
|
|
39
|
+
__exportStar(require("./transaction/builders/TransactionBuilder.js"), exports);
|
|
40
|
+
__exportStar(require("./utils/BitcoinUtils.js"), exports);
|
|
41
|
+
__exportStar(require("./utxo/interfaces/IUTXO.js"), exports);
|
|
42
|
+
__exportStar(require("./utxo/UTXOManager.js"), exports);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Testnet = exports.Regtest = void 0;
|
|
4
|
+
const bsi_common_1 = require("@btc-vision/bsi-common");
|
|
5
|
+
exports.Regtest = {
|
|
6
|
+
wallet: {
|
|
7
|
+
address: 'bcrt1qfqsr3m7vjxheghcvw4ks0fryqxfq8qzjf8fxes',
|
|
8
|
+
publicKey: '020373626d317ae8788ce3280b491068610d840c23ecb64c14075bbb9f670af52c',
|
|
9
|
+
privateKey: 'cRCiYAgCBrU7hSaJBRuPqKVYXQqM5CKXbMfWHb25X4FDAWJ8Ai92',
|
|
10
|
+
},
|
|
11
|
+
config: {
|
|
12
|
+
BITCOIND_NETWORK: bsi_common_1.BitcoinNetwork.Regtest,
|
|
13
|
+
BITCOIND_HOST: '51.81.67.34',
|
|
14
|
+
BITCOIND_PORT: 9242,
|
|
15
|
+
BITCOIND_USERNAME: 'HJSiowseujhs',
|
|
16
|
+
BITCOIND_PASSWORD: 'YHEFHSDJ23JOIhjjef2ied9u290efu2930u90U',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
exports.Testnet = {
|
|
20
|
+
wallet: {
|
|
21
|
+
address: 'tb1qcfszz8dcvsz9mcp70ezw5zy2r3ydr0cfz60d3t',
|
|
22
|
+
privateKey: 'cSZU2QB9aUYvaL6ukU9d3DKq7QaxTRms1BCQnx5vqXbxBk4bdBc4',
|
|
23
|
+
publicKey: '026764d622f083d78f47c2f2a007ab08e96edf398de74acc0251a7bba202ffb92b',
|
|
24
|
+
},
|
|
25
|
+
config: {
|
|
26
|
+
BITCOIND_NETWORK: bsi_common_1.BitcoinNetwork.TestNet,
|
|
27
|
+
BITCOIND_HOST: '51.81.67.34',
|
|
28
|
+
BITCOIND_PORT: 9237,
|
|
29
|
+
BITCOIND_USERNAME: 'HJSiowseujhs',
|
|
30
|
+
BITCOIND_PASSWORD: 'YHEFHSDJ23JOIhjjef2ied9u290efu2930u90U',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/cjs/tests/gen.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const TapscriptVerificator_js_1 = require("../verification/TapscriptVerificator.js");
|
|
4
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
5
|
+
const Regtest_js_1 = require("./Regtest.js");
|
|
6
|
+
const Wallet_js_1 = require("../keypair/Wallet.js");
|
|
7
|
+
const wallet = new Wallet_js_1.Wallet(Regtest_js_1.Regtest.wallet, bitcoinjs_lib_1.networks.regtest);
|
|
8
|
+
const params = {
|
|
9
|
+
bytecode: Buffer.from('deadbeef', 'hex'),
|
|
10
|
+
contractSaltPubKey: Buffer.from('deadbeef', 'hex'),
|
|
11
|
+
deployerPubKeyXOnly: wallet.xOnly,
|
|
12
|
+
originalSalt: Buffer.from('deadbeef', 'hex'),
|
|
13
|
+
network: bitcoinjs_lib_1.networks.regtest,
|
|
14
|
+
};
|
|
15
|
+
const contractAddress = TapscriptVerificator_js_1.TapscriptVerificator.getContractAddress(params);
|
|
16
|
+
const virtualAddress = TapscriptVerificator_js_1.TapscriptVerificator.generateContractVirtualAddress(params.deployerPubKeyXOnly, params.bytecode, params.originalSalt, bitcoinjs_lib_1.networks.regtest);
|
|
17
|
+
console.log('contract sewgit address', virtualAddress, '\ncontract p2tr address', contractAddress);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Wallet_js_1 = require("../keypair/Wallet.js");
|
|
4
|
+
const Regtest_js_1 = require("./Regtest.js");
|
|
5
|
+
const UTXOManager_js_1 = require("../utxo/UTXOManager.js");
|
|
6
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
7
|
+
const bsi_bitcoin_rpc_1 = require("@btc-vision/bsi-bitcoin-rpc");
|
|
8
|
+
const FundingTransaction_js_1 = require("../transaction/builders/FundingTransaction.js");
|
|
9
|
+
const network = bitcoinjs_lib_1.networks.regtest;
|
|
10
|
+
const rpc = new bsi_bitcoin_rpc_1.BitcoinRPC();
|
|
11
|
+
const wallet = new Wallet_js_1.Wallet(Regtest_js_1.Regtest.wallet, network);
|
|
12
|
+
const utxoManager = new UTXOManager_js_1.UTXOManager('http://localhost:9001');
|
|
13
|
+
const shouldMineBlock = true;
|
|
14
|
+
async function mineBlock() {
|
|
15
|
+
const ok = await rpc.generateToAddress(1, wallet.p2wpkh, 'default');
|
|
16
|
+
if (!ok) {
|
|
17
|
+
throw new Error('Could not mine block');
|
|
18
|
+
}
|
|
19
|
+
console.log(`Mined block`, ok);
|
|
20
|
+
return !!ok.length;
|
|
21
|
+
}
|
|
22
|
+
(async () => {
|
|
23
|
+
await rpc.init(Regtest_js_1.Regtest.config);
|
|
24
|
+
const utxoSetting = {
|
|
25
|
+
address: wallet.p2wpkh,
|
|
26
|
+
minAmount: 10000n,
|
|
27
|
+
requestedAmount: 100000n,
|
|
28
|
+
};
|
|
29
|
+
const utxos = await utxoManager.fetchUTXO(utxoSetting);
|
|
30
|
+
if (!utxos) {
|
|
31
|
+
throw new Error('No UTXOs found');
|
|
32
|
+
}
|
|
33
|
+
const interactionParameters = {
|
|
34
|
+
from: wallet.p2wpkh,
|
|
35
|
+
to: 'bcrt1qqvf4gprr05z248ph6gvx54rpg08p8ngq3zh8uh',
|
|
36
|
+
utxos: utxos,
|
|
37
|
+
signer: wallet.keypair,
|
|
38
|
+
network: network,
|
|
39
|
+
feeRate: 150,
|
|
40
|
+
priorityFee: 1000n,
|
|
41
|
+
childTransactionRequiredFees: 0n,
|
|
42
|
+
};
|
|
43
|
+
const fundingTransaction = new FundingTransaction_js_1.FundingTransaction(interactionParameters);
|
|
44
|
+
const fundingTx = fundingTransaction.signTransaction();
|
|
45
|
+
console.log(fundingTx.toHex());
|
|
46
|
+
const secondTxBroadcast = await rpc.sendRawTransaction({
|
|
47
|
+
hexstring: fundingTx.toHex(),
|
|
48
|
+
});
|
|
49
|
+
console.log(`Transaction broadcasted: ${secondTxBroadcast}`);
|
|
50
|
+
if (shouldMineBlock) {
|
|
51
|
+
await mineBlock();
|
|
52
|
+
}
|
|
53
|
+
})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const wBTC_js_1 = require("../metadata/contracts/wBTC.js");
|
|
4
|
+
const Wallet_js_1 = require("../keypair/Wallet.js");
|
|
5
|
+
const Regtest_js_1 = require("./Regtest.js");
|
|
6
|
+
const UTXOManager_js_1 = require("../utxo/UTXOManager.js");
|
|
7
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
8
|
+
const TransactionFactory_js_1 = require("../transaction/TransactionFactory.js");
|
|
9
|
+
const bsi_bitcoin_rpc_1 = require("@btc-vision/bsi-bitcoin-rpc");
|
|
10
|
+
const bsi_binary_1 = require("@btc-vision/bsi-binary");
|
|
11
|
+
const network = bitcoinjs_lib_1.networks.testnet;
|
|
12
|
+
const rpc = new bsi_bitcoin_rpc_1.BitcoinRPC();
|
|
13
|
+
const wBtc = new wBTC_js_1.wBTC(network);
|
|
14
|
+
const wallet = new Wallet_js_1.Wallet(Regtest_js_1.Testnet.wallet, network);
|
|
15
|
+
const utxoManager = new UTXOManager_js_1.UTXOManager('https://testnet.opnet.org');
|
|
16
|
+
const factory = new TransactionFactory_js_1.TransactionFactory();
|
|
17
|
+
const abiCoder = new bsi_binary_1.ABICoder();
|
|
18
|
+
const transferSelector = Number(`0x` + abiCoder.encodeSelector('transfer'));
|
|
19
|
+
function getTransferToCalldata(to, amount) {
|
|
20
|
+
const addCalldata = new bsi_binary_1.BinaryWriter();
|
|
21
|
+
addCalldata.writeSelector(transferSelector);
|
|
22
|
+
addCalldata.writeAddress(to);
|
|
23
|
+
addCalldata.writeU256(amount);
|
|
24
|
+
return Buffer.from(addCalldata.getBuffer());
|
|
25
|
+
}
|
|
26
|
+
const shouldMineBlock = false;
|
|
27
|
+
async function mineBlock() {
|
|
28
|
+
const ok = await rpc.generateToAddress(1, wallet.p2wpkh, 'default');
|
|
29
|
+
if (!ok) {
|
|
30
|
+
throw new Error('Could not mine block');
|
|
31
|
+
}
|
|
32
|
+
console.log(`Mined block`, ok);
|
|
33
|
+
return !!ok.length;
|
|
34
|
+
}
|
|
35
|
+
(async () => {
|
|
36
|
+
await rpc.init(Regtest_js_1.Testnet.config);
|
|
37
|
+
const utxoSetting = {
|
|
38
|
+
address: wallet.p2wpkh,
|
|
39
|
+
minAmount: 10000n,
|
|
40
|
+
requestedAmount: 100000n,
|
|
41
|
+
};
|
|
42
|
+
const utxos = await utxoManager.fetchUTXO(utxoSetting);
|
|
43
|
+
console.log(`UTXOs:`, utxos);
|
|
44
|
+
if (!utxos) {
|
|
45
|
+
throw new Error('No UTXOs found');
|
|
46
|
+
}
|
|
47
|
+
const calldata = getTransferToCalldata('tb1pt3ncc5ktfzpry2uvnag06v3jkv4quvmdydf09q8fx6rkgd7f5s8q3aenuk', 5000000n);
|
|
48
|
+
const interactionParameters = {
|
|
49
|
+
from: wallet.p2wpkh,
|
|
50
|
+
to: wBtc.getAddress(),
|
|
51
|
+
utxos: utxos,
|
|
52
|
+
signer: wallet.keypair,
|
|
53
|
+
network: network,
|
|
54
|
+
feeRate: 150,
|
|
55
|
+
priorityFee: 50000n,
|
|
56
|
+
calldata: calldata,
|
|
57
|
+
};
|
|
58
|
+
const finalTx = factory.signInteraction(interactionParameters);
|
|
59
|
+
const firstTxBroadcast = await rpc.sendRawTransaction({
|
|
60
|
+
hexstring: finalTx[0],
|
|
61
|
+
});
|
|
62
|
+
console.log(`First transaction broadcasted: ${firstTxBroadcast}`);
|
|
63
|
+
if (!firstTxBroadcast) {
|
|
64
|
+
throw new Error('Could not broadcast first transaction');
|
|
65
|
+
}
|
|
66
|
+
const secondTxBroadcast = await rpc.sendRawTransaction({
|
|
67
|
+
hexstring: finalTx[1],
|
|
68
|
+
});
|
|
69
|
+
console.log(`Second transaction broadcasted: ${secondTxBroadcast}`);
|
|
70
|
+
if (!secondTxBroadcast) {
|
|
71
|
+
throw new Error('Could not broadcast second transaction');
|
|
72
|
+
}
|
|
73
|
+
if (shouldMineBlock) {
|
|
74
|
+
await mineBlock();
|
|
75
|
+
}
|
|
76
|
+
})();
|
|
@@ -8,7 +8,6 @@ class TransactionFactory {
|
|
|
8
8
|
const preTransaction = new InteractionTransaction_js_1.InteractionTransaction(interactionParameters);
|
|
9
9
|
preTransaction.signTransaction();
|
|
10
10
|
const parameters = preTransaction.getFundingTransactionParameters();
|
|
11
|
-
console.log('funding transaction parameters:', parameters);
|
|
12
11
|
const fundingTransaction = new FundingTransaction_js_1.FundingTransaction(parameters);
|
|
13
12
|
const signedTransaction = fundingTransaction.signTransaction();
|
|
14
13
|
if (!signedTransaction) {
|
|
@@ -20,12 +19,16 @@ class TransactionFactory {
|
|
|
20
19
|
outputIndex: 0,
|
|
21
20
|
scriptPubKey: {
|
|
22
21
|
hex: out.script.toString('hex'),
|
|
22
|
+
address: preTransaction.getScriptAddress(),
|
|
23
23
|
},
|
|
24
24
|
value: BigInt(out.value),
|
|
25
25
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const newParams = {
|
|
27
|
+
...interactionParameters,
|
|
28
|
+
utxos: [newUtxo],
|
|
29
|
+
randomBytes: preTransaction.getRndBytes(),
|
|
30
|
+
};
|
|
31
|
+
const finalTransaction = new InteractionTransaction_js_1.InteractionTransaction(newParams);
|
|
29
32
|
const outTx = finalTransaction.signTransaction();
|
|
30
33
|
return [signedTransaction.toHex(), outTx.toHex()];
|
|
31
34
|
}
|
|
@@ -14,7 +14,7 @@ class FundingTransaction extends TransactionBuilder_js_1.TransactionBuilder {
|
|
|
14
14
|
buildTransaction() {
|
|
15
15
|
this.addInputsFromUTXO();
|
|
16
16
|
const amountSpent = this.getTransactionOPNetFee() + this.childTransactionRequiredFees;
|
|
17
|
-
this.
|
|
17
|
+
this.addOutput({
|
|
18
18
|
value: Number(amountSpent),
|
|
19
19
|
address: this.to,
|
|
20
20
|
});
|
|
@@ -24,6 +24,8 @@ export declare class InteractionTransaction extends TransactionBuilder<Transacti
|
|
|
24
24
|
protected readonly interactionPubKeys: Buffer[];
|
|
25
25
|
protected readonly minimumSignatures: number;
|
|
26
26
|
constructor(parameters: IInteractionParameters);
|
|
27
|
+
getContractSecret(): Buffer;
|
|
28
|
+
getRndBytes(): Buffer;
|
|
27
29
|
protected generateSecret(): Buffer;
|
|
28
30
|
protected tweakSigner(): void;
|
|
29
31
|
protected scriptSignerXOnlyPubKey(): Buffer;
|
|
@@ -12,7 +12,7 @@ const bip371_js_1 = require("bitcoinjs-lib/src/psbt/bip371.js");
|
|
|
12
12
|
const TweakedSigner_js_1 = require("../../signer/TweakedSigner.js");
|
|
13
13
|
class InteractionTransaction extends TransactionBuilder_js_1.TransactionBuilder {
|
|
14
14
|
type = TransactionType_js_1.TransactionType.INTERACTION;
|
|
15
|
-
randomBytes
|
|
15
|
+
randomBytes;
|
|
16
16
|
targetScriptRedeem = null;
|
|
17
17
|
leftOverFundsScriptRedeem = null;
|
|
18
18
|
compiledTargetScript;
|
|
@@ -22,7 +22,7 @@ class InteractionTransaction extends TransactionBuilder_js_1.TransactionBuilder
|
|
|
22
22
|
calldata;
|
|
23
23
|
contractSecret = this.generateSecret();
|
|
24
24
|
tweakedSigner;
|
|
25
|
-
scriptSigner
|
|
25
|
+
scriptSigner;
|
|
26
26
|
interactionPubKeys;
|
|
27
27
|
minimumSignatures;
|
|
28
28
|
constructor(parameters) {
|
|
@@ -33,11 +33,19 @@ class InteractionTransaction extends TransactionBuilder_js_1.TransactionBuilder
|
|
|
33
33
|
this.calldata = Compressor_js_1.Compressor.compress(parameters.calldata);
|
|
34
34
|
this.interactionPubKeys = parameters.pubKeys || [];
|
|
35
35
|
this.minimumSignatures = parameters.minimumSignatures || 0;
|
|
36
|
+
this.randomBytes = parameters.randomBytes || BitcoinUtils_js_1.BitcoinUtils.rndBytes();
|
|
37
|
+
this.scriptSigner = this.generateKeyPairFromSeed();
|
|
36
38
|
this.calldataGenerator = new CalldataGenerator_js_1.CalldataGenerator(this.internalPubKeyToXOnly(), this.scriptSignerXOnlyPubKey(), this.network);
|
|
37
39
|
this.compiledTargetScript = this.calldataGenerator.compile(this.calldata, this.contractSecret, this.interactionPubKeys, this.minimumSignatures);
|
|
38
40
|
this.scriptTree = this.getScriptTree();
|
|
39
41
|
this.internalInit();
|
|
40
42
|
}
|
|
43
|
+
getContractSecret() {
|
|
44
|
+
return this.contractSecret;
|
|
45
|
+
}
|
|
46
|
+
getRndBytes() {
|
|
47
|
+
return this.randomBytes;
|
|
48
|
+
}
|
|
41
49
|
generateSecret() {
|
|
42
50
|
return bitcoinjs_lib_1.address.fromBech32(this.to).data;
|
|
43
51
|
}
|
|
@@ -62,6 +70,7 @@ class InteractionTransaction extends TransactionBuilder_js_1.TransactionBuilder
|
|
|
62
70
|
script: this.getTapOutput(),
|
|
63
71
|
},
|
|
64
72
|
tapLeafScript: [this.tapLeafScript],
|
|
73
|
+
sequence: 0xfffffffd,
|
|
65
74
|
};
|
|
66
75
|
this.addInput(input);
|
|
67
76
|
}
|
|
@@ -7,8 +7,8 @@ import { Address } from '@btc-vision/bsi-binary';
|
|
|
7
7
|
import { UTXO } from '../../utxo/interfaces/IUTXO.js';
|
|
8
8
|
import { Logger } from '@btc-vision/logger';
|
|
9
9
|
export declare abstract class TransactionBuilder<T extends TransactionType> extends Logger {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
static readonly LOCK_LEAF_SCRIPT: Buffer;
|
|
11
|
+
static readonly MINIMUM_DUST: bigint;
|
|
12
12
|
abstract readonly type: T;
|
|
13
13
|
readonly logColor: string;
|
|
14
14
|
transactionFee: bigint;
|
|
@@ -36,6 +36,7 @@ export declare abstract class TransactionBuilder<T extends TransactionType> exte
|
|
|
36
36
|
signTransaction(): Transaction;
|
|
37
37
|
getTransaction(): Transaction;
|
|
38
38
|
getScriptAddress(): string;
|
|
39
|
+
disableRBF(): void;
|
|
39
40
|
getTapAddress(): string;
|
|
40
41
|
addInput(input: PsbtInputExtended): void;
|
|
41
42
|
addOutput(output: PsbtOutputExtended): void;
|
|
@@ -31,7 +31,9 @@ const ecc = __importStar(require("tiny-secp256k1"));
|
|
|
31
31
|
const EcKeyPair_js_1 = require("../../keypair/EcKeyPair.js");
|
|
32
32
|
const logger_1 = require("@btc-vision/logger");
|
|
33
33
|
class TransactionBuilder extends logger_1.Logger {
|
|
34
|
-
static LOCK_LEAF_SCRIPT = bitcoinjs_lib_1.script.compile([
|
|
34
|
+
static LOCK_LEAF_SCRIPT = bitcoinjs_lib_1.script.compile([
|
|
35
|
+
bitcoinjs_lib_1.opcodes.OP_0,
|
|
36
|
+
]);
|
|
35
37
|
static MINIMUM_DUST = 330n;
|
|
36
38
|
logColor = '#785def';
|
|
37
39
|
transactionFee = 0n;
|
|
@@ -118,6 +120,13 @@ class TransactionBuilder extends logger_1.Logger {
|
|
|
118
120
|
}
|
|
119
121
|
return this.scriptData.address;
|
|
120
122
|
}
|
|
123
|
+
disableRBF() {
|
|
124
|
+
if (this.signed)
|
|
125
|
+
throw new Error('Transaction is already signed');
|
|
126
|
+
for (let input of this.inputs) {
|
|
127
|
+
input.sequence = 0xffffffff;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
121
130
|
getTapAddress() {
|
|
122
131
|
if (!this.tapData || !this.tapData.address) {
|
|
123
132
|
throw new Error('Tap data is required');
|
|
@@ -128,6 +137,9 @@ class TransactionBuilder extends logger_1.Logger {
|
|
|
128
137
|
this.inputs.push(input);
|
|
129
138
|
}
|
|
130
139
|
addOutput(output) {
|
|
140
|
+
if (output.value < TransactionBuilder.MINIMUM_DUST) {
|
|
141
|
+
throw new Error(`Output value is less than the minimum dust ${output.value} < ${TransactionBuilder.MINIMUM_DUST}`);
|
|
142
|
+
}
|
|
131
143
|
this.outputs.push(output);
|
|
132
144
|
}
|
|
133
145
|
addRefundOutput(amountSpent) {
|
|
@@ -170,6 +182,7 @@ class TransactionBuilder extends logger_1.Logger {
|
|
|
170
182
|
value: Number(utxo.value),
|
|
171
183
|
script: Buffer.from(utxo.scriptPubKey.hex, 'hex'),
|
|
172
184
|
},
|
|
185
|
+
sequence: 0xfffffffd,
|
|
173
186
|
};
|
|
174
187
|
this.addInput(input);
|
|
175
188
|
}
|
|
@@ -235,10 +248,9 @@ class TransactionBuilder extends logger_1.Logger {
|
|
|
235
248
|
return this.inputs;
|
|
236
249
|
}
|
|
237
250
|
getOutputs() {
|
|
238
|
-
if (!this.feeOutput)
|
|
239
|
-
throw new Error('Fee output is required');
|
|
240
251
|
const outputs = [...this.outputs];
|
|
241
|
-
|
|
252
|
+
if (this.feeOutput)
|
|
253
|
+
outputs.push(this.feeOutput);
|
|
242
254
|
return outputs;
|
|
243
255
|
}
|
|
244
256
|
verifyUTXOValidity() {
|
|
@@ -249,12 +261,16 @@ class TransactionBuilder extends logger_1.Logger {
|
|
|
249
261
|
}
|
|
250
262
|
}
|
|
251
263
|
setFeeOutput(output) {
|
|
264
|
+
const initialValue = output.value;
|
|
252
265
|
this.feeOutput = output;
|
|
253
266
|
const fee = this.estimateTransactionFees();
|
|
254
|
-
if (fee > BigInt(
|
|
267
|
+
if (fee > BigInt(initialValue)) {
|
|
255
268
|
throw new Error('Insufficient funds');
|
|
256
269
|
}
|
|
257
|
-
this.feeOutput.value =
|
|
270
|
+
this.feeOutput.value = initialValue - Number(fee);
|
|
271
|
+
if (this.feeOutput.value < TransactionBuilder.MINIMUM_DUST) {
|
|
272
|
+
this.feeOutput = null;
|
|
273
|
+
}
|
|
258
274
|
}
|
|
259
275
|
internalPubKeyToXOnly() {
|
|
260
276
|
return (0, bip371_js_1.toXOnly)(this.signer.publicKey);
|
|
@@ -292,7 +308,6 @@ class TransactionBuilder extends logger_1.Logger {
|
|
|
292
308
|
const tx = fakeTx.extractTransaction(false);
|
|
293
309
|
const size = tx.virtualSize();
|
|
294
310
|
const fee = this.feeRate * size + 1;
|
|
295
|
-
this.log(`Transaction fee estimated to: ${fee} - ${fakeTx.getFeeRate()}`);
|
|
296
311
|
return BigInt(Math.ceil(fee));
|
|
297
312
|
}
|
|
298
313
|
else {
|
|
@@ -19,6 +19,7 @@ export interface IInteractionParameters extends ITransactionParameters {
|
|
|
19
19
|
readonly calldata: Buffer;
|
|
20
20
|
readonly pubKeys?: Buffer[];
|
|
21
21
|
readonly minimumSignatures?: number;
|
|
22
|
+
readonly randomBytes?: Buffer;
|
|
22
23
|
}
|
|
23
24
|
export interface ITransactionDataContractInteractionWrap extends IInteractionParameters {
|
|
24
25
|
readonly amount: bigint;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Network } from 'bitcoinjs-lib';
|
|
3
|
+
import { Taptree } from 'bitcoinjs-lib/src/types.js';
|
|
4
|
+
export interface ContractAddressVerificationParams {
|
|
5
|
+
readonly deployerPubKeyXOnly: Buffer;
|
|
6
|
+
readonly contractSaltPubKey: Buffer;
|
|
7
|
+
readonly originalSalt: Buffer;
|
|
8
|
+
readonly bytecode: Buffer;
|
|
9
|
+
readonly network?: Network;
|
|
10
|
+
}
|
|
11
|
+
export declare class TapscriptVerificator {
|
|
12
|
+
private static readonly TAP_SCRIPT_VERSION;
|
|
13
|
+
static getContractAddress(params: ContractAddressVerificationParams): string | undefined;
|
|
14
|
+
static getContractSeed(deployerPubKey: Buffer, bytecode: Buffer, saltHash: Buffer): Buffer;
|
|
15
|
+
static generateContractVirtualAddress(deployerPubKey: Buffer, bytecode: Buffer, saltHash: Buffer, network?: Network): string;
|
|
16
|
+
static generateAddressFromScript(params: ContractAddressVerificationParams, scriptTree: Taptree): string | undefined;
|
|
17
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.TapscriptVerificator = void 0;
|
|
27
|
+
const bitcoinjs_lib_1 = __importStar(require("bitcoinjs-lib"));
|
|
28
|
+
const bip371_js_1 = require("bitcoinjs-lib/src/psbt/bip371.js");
|
|
29
|
+
const DeploymentGenerator_js_1 = require("../generators/builders/DeploymentGenerator.js");
|
|
30
|
+
const TransactionBuilder_js_1 = require("../transaction/builders/TransactionBuilder.js");
|
|
31
|
+
const AddressGenerator_js_1 = require("../generators/AddressGenerator.js");
|
|
32
|
+
class TapscriptVerificator {
|
|
33
|
+
static TAP_SCRIPT_VERSION = 192;
|
|
34
|
+
static getContractAddress(params) {
|
|
35
|
+
const network = params.network || bitcoinjs_lib_1.networks.bitcoin;
|
|
36
|
+
const scriptBuilder = new DeploymentGenerator_js_1.DeploymentGenerator(params.deployerPubKeyXOnly, (0, bip371_js_1.toXOnly)(params.contractSaltPubKey), network);
|
|
37
|
+
const compiledTargetScript = scriptBuilder.compile(params.bytecode, params.originalSalt);
|
|
38
|
+
const scriptTree = [
|
|
39
|
+
{
|
|
40
|
+
output: compiledTargetScript,
|
|
41
|
+
version: TapscriptVerificator.TAP_SCRIPT_VERSION,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
output: TransactionBuilder_js_1.TransactionBuilder.LOCK_LEAF_SCRIPT,
|
|
45
|
+
version: TapscriptVerificator.TAP_SCRIPT_VERSION,
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
return TapscriptVerificator.generateAddressFromScript(params, scriptTree);
|
|
49
|
+
}
|
|
50
|
+
static getContractSeed(deployerPubKey, bytecode, saltHash) {
|
|
51
|
+
const sha256OfBytecode = bitcoinjs_lib_1.default.crypto.hash256(bytecode);
|
|
52
|
+
const buf = Buffer.concat([deployerPubKey, saltHash, sha256OfBytecode]);
|
|
53
|
+
return bitcoinjs_lib_1.default.crypto.hash256(buf);
|
|
54
|
+
}
|
|
55
|
+
static generateContractVirtualAddress(deployerPubKey, bytecode, saltHash, network = bitcoinjs_lib_1.networks.bitcoin) {
|
|
56
|
+
const virtualAddress = TapscriptVerificator.getContractSeed(deployerPubKey, bytecode, saltHash);
|
|
57
|
+
return AddressGenerator_js_1.AddressGenerator.generatePKSH(virtualAddress, network);
|
|
58
|
+
}
|
|
59
|
+
static generateAddressFromScript(params, scriptTree) {
|
|
60
|
+
const network = params.network || bitcoinjs_lib_1.networks.bitcoin;
|
|
61
|
+
const transactionData = {
|
|
62
|
+
internalPubkey: params.deployerPubKeyXOnly,
|
|
63
|
+
network: network,
|
|
64
|
+
scriptTree: scriptTree,
|
|
65
|
+
};
|
|
66
|
+
const tx = bitcoinjs_lib_1.payments.p2tr(transactionData);
|
|
67
|
+
return tx.address;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.TapscriptVerificator = TapscriptVerificator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "data:application/octet-stream;base64,
|
|
1
|
+
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAACpWV247aMBBA/yXPqHSpthfeCl0q1O2CINtWqvowGw9gkTiuPYFF1f57FTYit2ECr5njM2Nnxv79LyB8pmAYhA6Mh4h0apb4N0MTYdALLNAmGAZossT3GeTNhpI46AVbbVQw/PjS43zhwUquPHze81kph95/RYMOKHWlKIrBe/T9JlF33QyqtpGmKNXmkXTs26ZqVLKMIY4VEAhFtRDRlyY23wIrOsVkgyEHEY3A43ckyFNzrjYlWb+gjdNDgoaEnTLQZc5KC0jWCiZ576JveJiDZio8haT1k8wobdZiUW1GMgpndtFJTQ2hK0ZEqornJPNs/oB0rxNNqOYu3WmFTJEcJVmXG3CoLq1aoqUsIVgfOW3pBzq90hF/wBwlWsvko0zH7Hm0mQuNE4godQfRWDCicY+wRbXUa8OWVw1Lnp8Qx0htwet3caUDK/7UBtDlsqiKSThrqyGSbz8Kx21F/vWSe7N4Q07dolMzBwdJ5ZHQeauuIKrco2dX1VMObt+zF+ACfRYTm6EJScIJUrR5DH/NhIobjKQrj3ucGk8OtCFeypKSelpu61gHEjpezZKiun03d6WQVoipKpdWVw4WFeVXbOD6ypujX7Vx499c7sB2FVVnJN0D0j5126lZpS5pXAEVYxuTpHP/RFNjM7p7JjQKFetsUV3KWUYVupj7s2qWvi7F8vh6XZjhFZYSLGCfT/8CvU2NR9bbYCRd6/Hu6AqBl9KEYO8RVsJZ1AhRlb+OSyTSZs3XWCMkVX5IrCEPiAutAsJj3/Hry7ikySdMeDrKcJek9rZ2/EGBv66xSzsdLNvNDd/bTx9ubgcV5w6dr10WO3AanmL0/SJUN7wbvPz5D9aZERroDgAA"
|
package/docs/assets/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "data:application/octet-stream;base64,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";
|
|
1
|
+
window.searchData = "data:application/octet-stream;base64,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";
|