beignet 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +4 -0
- package/.eslintrc +40 -0
- package/.prettierrc +9 -0
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/electrum/constants.js +31 -0
- package/dist/electrum/constants.js.map +1 -0
- package/dist/electrum/index.js +552 -0
- package/dist/electrum/index.js.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/shapes/electrum.js +14 -0
- package/dist/shapes/electrum.js.map +1 -0
- package/dist/shapes/index.js +19 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/wallet.js +115 -0
- package/dist/shapes/wallet.js.map +1 -0
- package/dist/transaction/index.js +692 -0
- package/dist/transaction/index.js.map +1 -0
- package/dist/types/electrum/constants.d.ts +7 -0
- package/dist/types/electrum/index.d.ts +85 -0
- package/dist/types/electrum.js +9 -0
- package/dist/types/electrum.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/shapes/electrum.d.ts +5 -0
- package/dist/types/shapes/index.d.ts +2 -0
- package/dist/types/shapes/wallet.d.ts +10 -0
- package/dist/types/transaction/index.d.ts +92 -0
- package/dist/types/transaction.js +12 -0
- package/dist/types/transaction.js.map +1 -0
- package/dist/types/types/electrum.d.ts +113 -0
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/types/transaction.d.ts +51 -0
- package/dist/types/types/wallet.d.ts +400 -0
- package/dist/types/utils/conversion.d.ts +10 -0
- package/dist/types/utils/derivation-path.d.ts +19 -0
- package/dist/types/utils/electrum.d.ts +10 -0
- package/dist/types/utils/exchange-rate.d.ts +30 -0
- package/dist/types/utils/helpers.d.ts +23 -0
- package/dist/types/utils/index.d.ts +7 -0
- package/dist/types/utils/result.d.ts +16 -0
- package/dist/types/utils/transaction.d.ts +21 -0
- package/dist/types/utils/wallet.d.ts +47 -0
- package/dist/types/wallet/constants.d.ts +12 -0
- package/dist/types/wallet/index.d.ts +214 -0
- package/dist/types/wallet.js +36 -0
- package/dist/types/wallet.js.map +1 -0
- package/dist/utils/conversion.js +52 -0
- package/dist/utils/conversion.js.map +1 -0
- package/dist/utils/derivation-path.js +104 -0
- package/dist/utils/derivation-path.js.map +1 -0
- package/dist/utils/electrum.js +149 -0
- package/dist/utils/electrum.js.map +1 -0
- package/dist/utils/exchange-rate.js +49 -0
- package/dist/utils/exchange-rate.js.map +1 -0
- package/dist/utils/helpers.js +137 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.js +24 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/result.js +36 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/transaction.js +327 -0
- package/dist/utils/transaction.js.map +1 -0
- package/dist/utils/wallet.js +227 -0
- package/dist/utils/wallet.js.map +1 -0
- package/dist/wallet/constants.js +15 -0
- package/dist/wallet/constants.js.map +1 -0
- package/dist/wallet/index.js +2113 -0
- package/dist/wallet/index.js.map +1 -0
- package/docs/html/.nojekyll +1 -0
- package/docs/html/assets/highlight.css +22 -0
- package/docs/html/assets/main.js +58 -0
- package/docs/html/assets/search.js +1 -0
- package/docs/html/assets/style.css +1367 -0
- package/docs/html/classes/Electrum.html +812 -0
- package/docs/html/classes/Transaction.html +687 -0
- package/docs/html/classes/Wallet.html +2030 -0
- package/docs/html/enums/EAddressType.html +227 -0
- package/docs/html/enums/EAvailableNetworks.html +255 -0
- package/docs/html/enums/EBoostType.html +220 -0
- package/docs/html/enums/EFeeId.html +241 -0
- package/docs/html/enums/EPaymentType.html +220 -0
- package/docs/html/enums/EProtocol.html +220 -0
- package/docs/html/enums/EUnit.html +227 -0
- package/docs/html/functions/availableNetworks.html +200 -0
- package/docs/html/functions/constructByteCountParam.html +210 -0
- package/docs/html/functions/decodeOpReturnMessage.html +202 -0
- package/docs/html/functions/decodeRawTransaction.html +210 -0
- package/docs/html/functions/err.html +214 -0
- package/docs/html/functions/formatKeyDerivationPath.html +219 -0
- package/docs/html/functions/formatPeerData.html +207 -0
- package/docs/html/functions/generateMnemonic.html +223 -0
- package/docs/html/functions/generateWalletId.html +202 -0
- package/docs/html/functions/getAddressFromScriptPubKey.html +209 -0
- package/docs/html/functions/getAddressTypeFromPath.html +206 -0
- package/docs/html/functions/getByteCount.html +206 -0
- package/docs/html/functions/getDataFallback.html +207 -0
- package/docs/html/functions/getDefaultPort.html +209 -0
- package/docs/html/functions/getDefaultWalletData.html +200 -0
- package/docs/html/functions/getDefaultWalletDataKeys.html +200 -0
- package/docs/html/functions/getExchangeRates.html +200 -0
- package/docs/html/functions/getHighestUsedIndexFromTxHashes.html +216 -0
- package/docs/html/functions/getKeyDerivationPath.html +211 -0
- package/docs/html/functions/getKeyDerivationPathObject.html +216 -0
- package/docs/html/functions/getKeyDerivationPathString.html +220 -0
- package/docs/html/functions/getKeyValue.html +206 -0
- package/docs/html/functions/getPeers.html +211 -0
- package/docs/html/functions/getProtocolForPort.html +209 -0
- package/docs/html/functions/getScriptHash.html +210 -0
- package/docs/html/functions/getSeed.html +209 -0
- package/docs/html/functions/getSeedHash.html +206 -0
- package/docs/html/functions/getSha256.html +206 -0
- package/docs/html/functions/getStorageKeyValues.html +209 -0
- package/docs/html/functions/getTxFee.html +210 -0
- package/docs/html/functions/getWalletDataStorageKey.html +206 -0
- package/docs/html/functions/isValidBech32mEncodedString.html +211 -0
- package/docs/html/functions/objectKeys-1.html +211 -0
- package/docs/html/functions/objectsMatch.html +210 -0
- package/docs/html/functions/ok.html +214 -0
- package/docs/html/functions/parseOnChainPaymentRequest.html +204 -0
- package/docs/html/functions/reduceValue.html +215 -0
- package/docs/html/functions/removeDustOutputs.html +206 -0
- package/docs/html/functions/setReplaceByFee.html +210 -0
- package/docs/html/functions/shuffleArray.html +211 -0
- package/docs/html/functions/validateAddress.html +216 -0
- package/docs/html/functions/validateMnemonic.html +206 -0
- package/docs/html/functions/validateTransaction.html +206 -0
- package/docs/html/index.html +360 -0
- package/docs/html/interfaces/IAddInput.html +231 -0
- package/docs/html/interfaces/IAddress.html +247 -0
- package/docs/html/interfaces/IAddressData.html +231 -0
- package/docs/html/interfaces/IAddressType.html +199 -0
- package/docs/html/interfaces/IAddressTypeData.html +252 -0
- package/docs/html/interfaces/IAddresses.html +199 -0
- package/docs/html/interfaces/IBoostedTransaction.html +238 -0
- package/docs/html/interfaces/IBoostedTransactions.html +199 -0
- package/docs/html/interfaces/ICreateTransaction.html +224 -0
- package/docs/html/interfaces/ICustomGetAddress.html +231 -0
- package/docs/html/interfaces/ICustomGetScriptHash.html +224 -0
- package/docs/html/interfaces/IElectrumGetAddressBalanceRes.html +235 -0
- package/docs/html/interfaces/IExchangeRates.html +210 -0
- package/docs/html/interfaces/IFormattedPeerData.html +245 -0
- package/docs/html/interfaces/IFormattedTransaction.html +343 -0
- package/docs/html/interfaces/IFormattedTransactions.html +199 -0
- package/docs/html/interfaces/IGenerateAddresses.html +252 -0
- package/docs/html/interfaces/IGenerateAddressesResponse.html +224 -0
- package/docs/html/interfaces/IGetAddress.html +231 -0
- package/docs/html/interfaces/IGetAddressBalanceRes.html +226 -0
- package/docs/html/interfaces/IGetAddressByPath.html +224 -0
- package/docs/html/interfaces/IGetAddressHistoryResponse.html +269 -0
- package/docs/html/interfaces/IGetAddressResponse.html +231 -0
- package/docs/html/interfaces/IGetAddressScriptHashesHistoryResponse.html +245 -0
- package/docs/html/interfaces/IGetDerivationPath.html +259 -0
- package/docs/html/interfaces/IGetFeeEstimatesResponse.html +238 -0
- package/docs/html/interfaces/IGetHeaderResponse.html +245 -0
- package/docs/html/interfaces/IGetNextAvailableAddressResponse.html +238 -0
- package/docs/html/interfaces/IGetTransactions.html +245 -0
- package/docs/html/interfaces/IGetTransactionsFromInputs.html +245 -0
- package/docs/html/interfaces/IGetUtxosResponse.html +224 -0
- package/docs/html/interfaces/IHeader.html +231 -0
- package/docs/html/interfaces/IIndexes.html +238 -0
- package/docs/html/interfaces/IKeyDerivationPath.html +247 -0
- package/docs/html/interfaces/IKeyDerivationPathData.html +224 -0
- package/docs/html/interfaces/INewBlock.html +224 -0
- package/docs/html/interfaces/IOnchainFees.html +245 -0
- package/docs/html/interfaces/IOutput.html +231 -0
- package/docs/html/interfaces/IPeerData.html +231 -0
- package/docs/html/interfaces/IRbfData.html +252 -0
- package/docs/html/interfaces/ISend.html +224 -0
- package/docs/html/interfaces/ISendTransaction.html +322 -0
- package/docs/html/interfaces/ISendTx.html +231 -0
- package/docs/html/interfaces/ISetupTransaction.html +238 -0
- package/docs/html/interfaces/ISubscribeToAddress.html +247 -0
- package/docs/html/interfaces/ISubscribeToHeader.html +245 -0
- package/docs/html/interfaces/ITargets.html +238 -0
- package/docs/html/interfaces/ITransaction.html +281 -0
- package/docs/html/interfaces/ITxHash.html +217 -0
- package/docs/html/interfaces/ITxHashes.html +235 -0
- package/docs/html/interfaces/IUtxo.html +275 -0
- package/docs/html/interfaces/IVin.html +252 -0
- package/docs/html/interfaces/IVout.html +246 -0
- package/docs/html/interfaces/IWallet.html +350 -0
- package/docs/html/interfaces/IWalletData.html +343 -0
- package/docs/html/types/ElectrumConnectionPubSub.html +233 -0
- package/docs/html/types/ElectrumConnectionSubscription.html +204 -0
- package/docs/html/types/InputData.html +203 -0
- package/docs/html/types/ObjectKeys.html +198 -0
- package/docs/html/types/Result.html +201 -0
- package/docs/html/types/TAddressIndexInfo.html +204 -0
- package/docs/html/types/TAddressLabel.html +193 -0
- package/docs/html/types/TAddressType.html +193 -0
- package/docs/html/types/TAddressTypeContent.html +198 -0
- package/docs/html/types/TAddressTypes.html +193 -0
- package/docs/html/types/TAvailableNetworks.html +193 -0
- package/docs/html/types/TConnectToElectrumRes.html +193 -0
- package/docs/html/types/TDecodeRawTx.html +214 -0
- package/docs/html/types/TElectrumNetworks.html +193 -0
- package/docs/html/types/TGetAddressHistory.html +200 -0
- package/docs/html/types/TGetByteCountInput.html +193 -0
- package/docs/html/types/TGetByteCountInputs.html +193 -0
- package/docs/html/types/TGetByteCountOutput.html +193 -0
- package/docs/html/types/TGetByteCountOutputs.html +193 -0
- package/docs/html/types/TGetData.html +211 -0
- package/docs/html/types/TGetTotalFeeObj.html +204 -0
- package/docs/html/types/TKeyDerivationAccount.html +193 -0
- package/docs/html/types/TKeyDerivationChange.html +193 -0
- package/docs/html/types/TKeyDerivationCoinType.html +193 -0
- package/docs/html/types/TKeyDerivationIndex.html +193 -0
- package/docs/html/types/TKeyDerivationPurpose.html +193 -0
- package/docs/html/types/TMessageDataMap.html +210 -0
- package/docs/html/types/TMessageKeys.html +193 -0
- package/docs/html/types/TOnMessage.html +213 -0
- package/docs/html/types/TProcessUnconfirmedTransactions.html +202 -0
- package/docs/html/types/TProtocol.html +193 -0
- package/docs/html/types/TServer.html +204 -0
- package/docs/html/types/TSetData.html +213 -0
- package/docs/html/types/TSetupTransactionResponse.html +193 -0
- package/docs/html/types/TStorage.html +200 -0
- package/docs/html/types/TSubscribedReceive.html +193 -0
- package/docs/html/types/TTransactionMessage.html +198 -0
- package/docs/html/types/TTxResponse.html +206 -0
- package/docs/html/types/TTxResult.html +200 -0
- package/docs/html/types/TUnspentAddressScriptHashData.html +198 -0
- package/docs/html/types/TWalletDataKeys.html +193 -0
- package/docs/html/variables/defaultElectrumPorts.html +193 -0
- package/docs/html/variables/electrumConnection.html +199 -0
- package/docs/html/variables/mostUsedExchangeTickers.html +241 -0
- package/docs/markdown/.nojekyll +1 -0
- package/docs/markdown/README.md +1875 -0
- package/docs/markdown/classes/Electrum.md +718 -0
- package/docs/markdown/classes/Transaction.md +536 -0
- package/docs/markdown/classes/Wallet.md +2189 -0
- package/docs/markdown/enums/EAddressType.md +41 -0
- package/docs/markdown/enums/EAvailableNetworks.md +85 -0
- package/docs/markdown/enums/EBoostType.md +30 -0
- package/docs/markdown/enums/EFeeId.md +63 -0
- package/docs/markdown/enums/EPaymentType.md +30 -0
- package/docs/markdown/enums/EProtocol.md +30 -0
- package/docs/markdown/enums/EUnit.md +41 -0
- package/docs/markdown/interfaces/IAddInput.md +41 -0
- package/docs/markdown/interfaces/IAddress.md +69 -0
- package/docs/markdown/interfaces/IAddressData.md +41 -0
- package/docs/markdown/interfaces/IAddressType.md +7 -0
- package/docs/markdown/interfaces/IAddressTypeData.md +74 -0
- package/docs/markdown/interfaces/IAddresses.md +7 -0
- package/docs/markdown/interfaces/IBoostedTransaction.md +52 -0
- package/docs/markdown/interfaces/IBoostedTransactions.md +7 -0
- package/docs/markdown/interfaces/ICreateTransaction.md +30 -0
- package/docs/markdown/interfaces/ICustomGetAddress.md +41 -0
- package/docs/markdown/interfaces/ICustomGetScriptHash.md +30 -0
- package/docs/markdown/interfaces/IElectrumGetAddressBalanceRes.md +55 -0
- package/docs/markdown/interfaces/IExchangeRates.md +7 -0
- package/docs/markdown/interfaces/IFormattedPeerData.md +63 -0
- package/docs/markdown/interfaces/IFormattedTransaction.md +217 -0
- package/docs/markdown/interfaces/IFormattedTransactions.md +7 -0
- package/docs/markdown/interfaces/IGenerateAddresses.md +74 -0
- package/docs/markdown/interfaces/IGenerateAddressesResponse.md +30 -0
- package/docs/markdown/interfaces/IGetAddress.md +41 -0
- package/docs/markdown/interfaces/IGetAddressBalanceRes.md +36 -0
- package/docs/markdown/interfaces/IGetAddressByPath.md +30 -0
- package/docs/markdown/interfaces/IGetAddressHistoryResponse.md +121 -0
- package/docs/markdown/interfaces/IGetAddressResponse.md +41 -0
- package/docs/markdown/interfaces/IGetAddressScriptHashesHistoryResponse.md +63 -0
- package/docs/markdown/interfaces/IGetDerivationPath.md +100 -0
- package/docs/markdown/interfaces/IGetFeeEstimatesResponse.md +52 -0
- package/docs/markdown/interfaces/IGetHeaderResponse.md +63 -0
- package/docs/markdown/interfaces/IGetNextAvailableAddressResponse.md +52 -0
- package/docs/markdown/interfaces/IGetTransactions.md +63 -0
- package/docs/markdown/interfaces/IGetTransactionsFromInputs.md +63 -0
- package/docs/markdown/interfaces/IGetUtxosResponse.md +30 -0
- package/docs/markdown/interfaces/IHeader.md +41 -0
- package/docs/markdown/interfaces/IIndexes.md +52 -0
- package/docs/markdown/interfaces/IKeyDerivationPath.md +69 -0
- package/docs/markdown/interfaces/IKeyDerivationPathData.md +30 -0
- package/docs/markdown/interfaces/INewBlock.md +30 -0
- package/docs/markdown/interfaces/IOnchainFees.md +63 -0
- package/docs/markdown/interfaces/IOutput.md +41 -0
- package/docs/markdown/interfaces/IPeerData.md +41 -0
- package/docs/markdown/interfaces/IRbfData.md +74 -0
- package/docs/markdown/interfaces/ISend.md +30 -0
- package/docs/markdown/interfaces/ISendTransaction.md +184 -0
- package/docs/markdown/interfaces/ISendTx.md +41 -0
- package/docs/markdown/interfaces/ISetupTransaction.md +52 -0
- package/docs/markdown/interfaces/ISubscribeToAddress.md +60 -0
- package/docs/markdown/interfaces/ISubscribeToHeader.md +59 -0
- package/docs/markdown/interfaces/ITargets.md +52 -0
- package/docs/markdown/interfaces/ITransaction.md +88 -0
- package/docs/markdown/interfaces/ITxHash.md +19 -0
- package/docs/markdown/interfaces/ITxHashes.md +55 -0
- package/docs/markdown/interfaces/IUtxo.md +112 -0
- package/docs/markdown/interfaces/IVin.md +70 -0
- package/docs/markdown/interfaces/IVout.md +52 -0
- package/docs/markdown/interfaces/IWallet.md +209 -0
- package/docs/markdown/interfaces/IWalletData.md +217 -0
- package/example/helpers.ts +76 -0
- package/example/index.ts +77 -0
- package/package.json +69 -0
- package/src/electrum/constants.ts +28 -0
- package/src/electrum/index.ts +838 -0
- package/src/index.ts +6 -0
- package/src/shapes/electrum.ts +13 -0
- package/src/shapes/index.ts +2 -0
- package/src/shapes/wallet.ts +133 -0
- package/src/transaction/index.ts +1078 -0
- package/src/types/electrum.ts +139 -0
- package/src/types/index.ts +3 -0
- package/src/types/transaction.ts +58 -0
- package/src/types/wallet.ts +503 -0
- package/src/utils/conversion.ts +88 -0
- package/src/utils/derivation-path.ts +171 -0
- package/src/utils/electrum.ts +188 -0
- package/src/utils/exchange-rate.ts +70 -0
- package/src/utils/helpers.ts +191 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/result.ts +79 -0
- package/src/utils/transaction.ts +417 -0
- package/src/utils/wallet.ts +351 -0
- package/src/wallet/constants.ts +24 -0
- package/src/wallet/index.ts +3304 -0
- package/tests/constants.ts +9 -0
- package/tests/derivation.test.ts +146 -0
- package/tests/electrum.test.ts +137 -0
- package/tests/storage.test.ts +222 -0
- package/tests/transaction.test.ts +187 -0
- package/tests/wallet.test.ts +307 -0
- package/tsconfig.json +32 -0
- package/typedoc.json +5 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import * as chai from 'chai';
|
|
2
|
+
import { validateMnemonic } from 'bip39';
|
|
3
|
+
import { IAddress, IAddresses, Wallet } from '../';
|
|
4
|
+
import {
|
|
5
|
+
EAddressType,
|
|
6
|
+
EAvailableNetworks,
|
|
7
|
+
IGetUtxosResponse,
|
|
8
|
+
Result,
|
|
9
|
+
generateMnemonic
|
|
10
|
+
} from '../src';
|
|
11
|
+
import { TEST_MNEMONIC } from './constants';
|
|
12
|
+
import { servers } from '../example/helpers';
|
|
13
|
+
|
|
14
|
+
const expect = chai.expect;
|
|
15
|
+
|
|
16
|
+
const testTimeout = 60000;
|
|
17
|
+
|
|
18
|
+
let wallet;
|
|
19
|
+
|
|
20
|
+
before(async function () {
|
|
21
|
+
this.timeout(testTimeout);
|
|
22
|
+
const res = await Wallet.create({
|
|
23
|
+
mnemonic: TEST_MNEMONIC,
|
|
24
|
+
network: EAvailableNetworks.testnet,
|
|
25
|
+
addressType: EAddressType.p2wpkh
|
|
26
|
+
});
|
|
27
|
+
if (res.isErr()) {
|
|
28
|
+
console.log('error: ', res.error.message);
|
|
29
|
+
//throw new Error(res.error.message);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
wallet = res.value;
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('Wallet Library', async function () {
|
|
36
|
+
this.timeout(testTimeout);
|
|
37
|
+
|
|
38
|
+
it('Should successfully create a wallet.', () => {
|
|
39
|
+
expect(wallet).not.to.be.null;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('Should generate a valid, random mnemonic', () => {
|
|
43
|
+
const randomMnemonic = generateMnemonic();
|
|
44
|
+
expect(validateMnemonic(randomMnemonic)).to.equal(true);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('Should determine that the wallet mnemonic is invalid', () => {
|
|
48
|
+
const invalidMnemonic =
|
|
49
|
+
'corn core humor loud lady wealth avoid purse next subject focus dilemma';
|
|
50
|
+
const isValid = wallet.isValid(invalidMnemonic);
|
|
51
|
+
expect(isValid).to.equal(false);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('Should determine that the current wallet instance is valid', () => {
|
|
55
|
+
const isValid = wallet.isValid(TEST_MNEMONIC);
|
|
56
|
+
expect(isValid).to.equal(true);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('Should create a wallet name based on the seed hash when none is provided.', () => {
|
|
60
|
+
expect(wallet.name).to.equal(
|
|
61
|
+
'7b4534b23017b8174ac0083bb7baa2f2cf3fb553f165e13485f2ca1a4cef883e'
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('Should generate a bech32 receiving address at index 0', async () => {
|
|
66
|
+
const address = await wallet.getAddress({
|
|
67
|
+
addressType: EAddressType.p2wpkh,
|
|
68
|
+
changeAddress: false,
|
|
69
|
+
index: '0'
|
|
70
|
+
});
|
|
71
|
+
expect(address).to.equal('tb1qmja98kkd540qtesjqdanfg0ywags845vehfg66');
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('Should generate a segwit change address at index 1', async () => {
|
|
75
|
+
const address = await wallet.getAddress({
|
|
76
|
+
addressType: EAddressType.p2sh,
|
|
77
|
+
changeAddress: true,
|
|
78
|
+
index: '1'
|
|
79
|
+
});
|
|
80
|
+
expect(address).to.equal('2NDRG1ZGhWMGGNW7Mp58BKcyBs4Hyat8Law');
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('Should generate a legacy receiving address at index 5', async () => {
|
|
84
|
+
const address = await wallet.getAddress({
|
|
85
|
+
addressType: EAddressType.p2pkh,
|
|
86
|
+
changeAddress: false,
|
|
87
|
+
index: '5'
|
|
88
|
+
});
|
|
89
|
+
expect(address).to.equal('mohdq3fadTtT4uSH4oNr4F1Dp3YM4pR3VF');
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('Should generate a bech32 receiving address at index 0 via its path', async () => {
|
|
93
|
+
const address = await wallet.getAddressByPath({ path: "m/84'/1'/0'/0/0" });
|
|
94
|
+
expect(address.isErr()).to.equal(false);
|
|
95
|
+
if (address.isErr()) return;
|
|
96
|
+
expect(address.value.address).to.equal(
|
|
97
|
+
'tb1qmja98kkd540qtesjqdanfg0ywags845vehfg66'
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('Should generate a segwit change address at index 1 via its path', async () => {
|
|
102
|
+
const address = await wallet.getAddressByPath({ path: "m/49'/1'/0'/1/1" });
|
|
103
|
+
expect(address.isErr()).to.equal(false);
|
|
104
|
+
if (address.isErr()) return;
|
|
105
|
+
expect(address.value.address).to.equal(
|
|
106
|
+
'2NDRG1ZGhWMGGNW7Mp58BKcyBs4Hyat8Law'
|
|
107
|
+
);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('Should generate a testnet legacy receiving address at index 5 via its path', async () => {
|
|
111
|
+
const address = await wallet.getAddressByPath({ path: "m/44'/1'/0'/0/5" });
|
|
112
|
+
expect(address.isErr()).to.equal(false);
|
|
113
|
+
if (address.isErr()) return;
|
|
114
|
+
expect(address.value.address).to.equal(
|
|
115
|
+
'mohdq3fadTtT4uSH4oNr4F1Dp3YM4pR3VF'
|
|
116
|
+
);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('getNextAvailableAddress: Should return the next available address/change index and the last used address/change index', async () => {
|
|
120
|
+
const expectedResult = {
|
|
121
|
+
addressIndex: {
|
|
122
|
+
address: 'tb1qqcmg5vwk736mmr3fnkx5us9hq4czl6cx5w5g0x',
|
|
123
|
+
path: "m/84'/1'/0'/0/5",
|
|
124
|
+
publicKey:
|
|
125
|
+
'0345f71b1a5f9ce1c08ef2dbb1fb1076296b0fdf1f09f6fe7f53ed22383ad9d1c9',
|
|
126
|
+
index: 5,
|
|
127
|
+
scriptHash:
|
|
128
|
+
'448ae601fb40d7a6de824eb34479286a06d41015250fc75544dbb6d2893bd0e5'
|
|
129
|
+
},
|
|
130
|
+
lastUsedAddressIndex: {
|
|
131
|
+
address: 'tb1qyxugs6zkcj3r4u09qks7khgf7hkktf8mnzz5ze',
|
|
132
|
+
path: "m/84'/1'/0'/0/4",
|
|
133
|
+
publicKey:
|
|
134
|
+
'03f01a817e07ff424f00d6be3b93f7bec658aaf8fbfed5cd2c18f95f3cfd47f7a8',
|
|
135
|
+
index: 4,
|
|
136
|
+
scriptHash:
|
|
137
|
+
'7f07103d4580005b27b856434bba9be63a7e58a83cb456b603f4af3ae88d1023'
|
|
138
|
+
},
|
|
139
|
+
changeAddressIndex: {
|
|
140
|
+
address: 'tb1q32eaj0c805mry76wa0g6hlcunu7ttu96833072',
|
|
141
|
+
path: "m/84'/1'/0'/1/10",
|
|
142
|
+
publicKey:
|
|
143
|
+
'038813820d10cca28ce1fdb6a8b346a4ab9de6b520adc46e2c4442a7ba94de10a1',
|
|
144
|
+
index: 10,
|
|
145
|
+
scriptHash:
|
|
146
|
+
'3198ad3b2b39efcdeeb6b338c1f28ccede385c2092dbb9854e265b6eec8a0dab'
|
|
147
|
+
},
|
|
148
|
+
lastUsedChangeAddressIndex: {
|
|
149
|
+
index: 9,
|
|
150
|
+
path: "m/84'/1'/0'/1/9",
|
|
151
|
+
address: 'tb1q926j5y9mwjc49axf5w25y2jrm0ew8w6uks0vdm',
|
|
152
|
+
scriptHash:
|
|
153
|
+
'640d69f5b22996bdc95dbac8863e9e94e198f40569c1ec46b6336edd740c0007',
|
|
154
|
+
publicKey:
|
|
155
|
+
'02e9085f8d23072244620f0549e6f1c6ff04c8c8b1dd238edce106ce6ef54b358e'
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const r = await wallet.getNextAvailableAddress();
|
|
159
|
+
expect(r.isErr()).to.equal(false);
|
|
160
|
+
if (r.isErr()) return;
|
|
161
|
+
expect(r.value).to.deep.equal(expectedResult);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("Should return available UTXO's", async () => {
|
|
165
|
+
const expectedResult = {
|
|
166
|
+
utxos: [
|
|
167
|
+
{
|
|
168
|
+
address: 'tb1qy45r5c84eh7tuke772lrvj2q5kqlylp2ghgdlk',
|
|
169
|
+
path: "m/84'/1'/0'/0/1",
|
|
170
|
+
publicKey:
|
|
171
|
+
'03f8c98bf09b3e069714a05a530a735761453d94d1f4355239bfcb6b78c25a2592',
|
|
172
|
+
index: 1,
|
|
173
|
+
scriptHash:
|
|
174
|
+
'bdb8f18267b816706378c2c9282e0be7b05dcc5a3e63dd2468f145c6431f2002',
|
|
175
|
+
tx_hash:
|
|
176
|
+
'7a6e9a985de1e5bed1138d1fe1bf2f169a4f838d802ecdf96d1376378391a350',
|
|
177
|
+
tx_pos: 0,
|
|
178
|
+
height: 2539268,
|
|
179
|
+
value: 1000
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
address: 'tb1q926j5y9mwjc49axf5w25y2jrm0ew8w6uks0vdm',
|
|
183
|
+
path: "m/84'/1'/0'/1/9",
|
|
184
|
+
publicKey:
|
|
185
|
+
'02e9085f8d23072244620f0549e6f1c6ff04c8c8b1dd238edce106ce6ef54b358e',
|
|
186
|
+
index: 9,
|
|
187
|
+
scriptHash:
|
|
188
|
+
'640d69f5b22996bdc95dbac8863e9e94e198f40569c1ec46b6336edd740c0007',
|
|
189
|
+
tx_hash:
|
|
190
|
+
'7a6e9a985de1e5bed1138d1fe1bf2f169a4f838d802ecdf96d1376378391a350',
|
|
191
|
+
tx_pos: 1,
|
|
192
|
+
height: 2539268,
|
|
193
|
+
value: 3855
|
|
194
|
+
}
|
|
195
|
+
],
|
|
196
|
+
balance: 4855
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const getUtxosRes: Result<IGetUtxosResponse> = await wallet.getUtxos({});
|
|
200
|
+
expect(getUtxosRes.isErr()).to.equal(false);
|
|
201
|
+
if (getUtxosRes.isErr()) return;
|
|
202
|
+
expect(Array.isArray(getUtxosRes.value.utxos)).to.equal(true);
|
|
203
|
+
expect(getUtxosRes.value.utxos.length).to.equal(2);
|
|
204
|
+
expect(getUtxosRes.value.balance).to.equal(4855);
|
|
205
|
+
expect(getUtxosRes.value).to.deep.equal(expectedResult);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it('Should successfully return the private testnet key for a given path', async () => {
|
|
209
|
+
const addresses: IAddresses = wallet.data.addresses['p2wpkh'];
|
|
210
|
+
|
|
211
|
+
const addressData1 = Object.values(addresses).find(
|
|
212
|
+
(a: IAddress) => a.index === 0
|
|
213
|
+
);
|
|
214
|
+
expect(addressData1).to.not.be.undefined;
|
|
215
|
+
if (!addressData1) return;
|
|
216
|
+
const privateKey1: string = await wallet.getPrivateKey(addressData1.path);
|
|
217
|
+
expect(typeof privateKey1).to.equal('string');
|
|
218
|
+
expect(privateKey1).to.equal(
|
|
219
|
+
'cSkdqJTnvZ56deaW5PpVJPeUCAQfPV7xJocfiZxdgm9UHHmXuXzY'
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
const privateKey2: string = await wallet.getPrivateKey("m/84'/1'/0'/0/19");
|
|
223
|
+
expect(typeof privateKey2).to.equal('string');
|
|
224
|
+
expect(privateKey2).to.equal(
|
|
225
|
+
'cUcpwVpcwvVz17qnBzwNfNQpp9FsfXH1ogjKCkxgbB2ZzGGjrK2r'
|
|
226
|
+
);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('Should successfully switch from testnet to regtest', async () => {
|
|
230
|
+
expect(wallet.network).to.equal(EAvailableNetworks.testnet);
|
|
231
|
+
await wallet.switchNetwork(EAvailableNetworks.regtest, servers.regtest);
|
|
232
|
+
it('Should successfully create a wallet for the new network.', () => {
|
|
233
|
+
expect(wallet).not.to.be.null;
|
|
234
|
+
});
|
|
235
|
+
const address = await wallet.getAddress({
|
|
236
|
+
addressType: EAddressType.p2wpkh,
|
|
237
|
+
changeAddress: false,
|
|
238
|
+
index: '0'
|
|
239
|
+
});
|
|
240
|
+
expect(address).to.equal('bcrt1qmja98kkd540qtesjqdanfg0ywags845vm7s9dn');
|
|
241
|
+
expect(wallet.data.utxos.length).to.equal(0);
|
|
242
|
+
expect(wallet.data.balance).to.equal(0);
|
|
243
|
+
const expectedAddressIndex = {
|
|
244
|
+
address: 'bcrt1qmja98kkd540qtesjqdanfg0ywags845vm7s9dn',
|
|
245
|
+
path: "m/84'/1'/0'/0/0",
|
|
246
|
+
publicKey:
|
|
247
|
+
'02189e644b5fe9acf24374b35f01f652e011867568b6e01765cace9b7ef07809cc',
|
|
248
|
+
index: 0,
|
|
249
|
+
scriptHash:
|
|
250
|
+
'1cc3af572e4c847a1adf7ab3658fa7ae36926088c762821930dadc60e41217c2'
|
|
251
|
+
};
|
|
252
|
+
expect(wallet.data.addressIndex[wallet.data.addressType]).to.deep.equal(
|
|
253
|
+
expectedAddressIndex
|
|
254
|
+
);
|
|
255
|
+
expect(wallet.network).to.equal(EAvailableNetworks.regtest);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('Should successfully switch from regtest to mainnet', async () => {
|
|
259
|
+
expect(wallet.network).to.equal(EAvailableNetworks.regtest);
|
|
260
|
+
await wallet.switchNetwork(EAvailableNetworks.mainnet);
|
|
261
|
+
it('Should successfully create a wallet for the new network.', () => {
|
|
262
|
+
expect(wallet).not.to.be.null;
|
|
263
|
+
});
|
|
264
|
+
const address = await wallet.getAddress({
|
|
265
|
+
addressType: EAddressType.p2wpkh,
|
|
266
|
+
changeAddress: false,
|
|
267
|
+
index: '0'
|
|
268
|
+
});
|
|
269
|
+
expect(address).to.equal('bc1qreygjcarrm68vjg4fkx04qj70g04c5ttjyfkpj');
|
|
270
|
+
expect(wallet.data.utxos.length).to.equal(0);
|
|
271
|
+
expect(wallet.data.balance).to.equal(0);
|
|
272
|
+
const expectedAddressIndex = {
|
|
273
|
+
address: 'bc1qreygjcarrm68vjg4fkx04qj70g04c5ttjyfkpj',
|
|
274
|
+
path: "m/84'/0'/0'/0/0",
|
|
275
|
+
publicKey:
|
|
276
|
+
'028b5c7c4c8650f229b5b89dfe4c9a7b37c1da8ecd75b38eb8a08e460c4ebf5e10',
|
|
277
|
+
index: 0,
|
|
278
|
+
scriptHash:
|
|
279
|
+
'28f2ce1db4fd99ead11e0f5d165247c40999f52a899f8c02f1476c8541bd2fc5'
|
|
280
|
+
};
|
|
281
|
+
expect(wallet.data.addressIndex[wallet.data.addressType]).to.deep.equal(
|
|
282
|
+
expectedAddressIndex
|
|
283
|
+
);
|
|
284
|
+
expect(wallet.network).to.equal(EAvailableNetworks.mainnet);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('Should successfully return the private mainnet key for a given path', async () => {
|
|
288
|
+
const addresses: IAddresses = wallet.data.addresses['p2wpkh'];
|
|
289
|
+
|
|
290
|
+
const addressData1 = Object.values(addresses).find(
|
|
291
|
+
(a: IAddress) => a.index === 0
|
|
292
|
+
);
|
|
293
|
+
expect(addressData1).to.not.be.undefined;
|
|
294
|
+
if (!addressData1) return;
|
|
295
|
+
const privateKey1: string = await wallet.getPrivateKey(addressData1.path);
|
|
296
|
+
expect(typeof privateKey1).to.equal('string');
|
|
297
|
+
expect(privateKey1).to.equal(
|
|
298
|
+
'L2iqFGgLkMzQossGaQ9B2tmhSsLq3vgunnHb8vnLavXUh54GSLnK'
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
const privateKey2: string = await wallet.getPrivateKey("m/84'/0'/0'/0/19");
|
|
302
|
+
expect(typeof privateKey2).to.equal('string');
|
|
303
|
+
expect(privateKey2).to.equal(
|
|
304
|
+
'L2cB657yFF88YEebxoad3YgeezYKAu61AhmnDHMFo7GjjpPqBZG1'
|
|
305
|
+
);
|
|
306
|
+
});
|
|
307
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"esModuleInterop": true,
|
|
5
|
+
"target": "es2017",
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"sourceMap": true,
|
|
8
|
+
"declarationDir": "./dist/types",
|
|
9
|
+
"outDir": "./dist",
|
|
10
|
+
"removeComments": true,
|
|
11
|
+
"allowSyntheticDefaultImports": true,
|
|
12
|
+
"isolatedModules": false,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
"noImplicitAny": false,
|
|
15
|
+
"declaration": true,
|
|
16
|
+
"strict": true,
|
|
17
|
+
"allowJs": true,
|
|
18
|
+
"strictNullChecks": true,
|
|
19
|
+
"strictFunctionTypes": true,
|
|
20
|
+
"strictPropertyInitialization": true,
|
|
21
|
+
"noImplicitThis": true,
|
|
22
|
+
"alwaysStrict": true,
|
|
23
|
+
"noUnusedLocals": true,
|
|
24
|
+
"skipLibCheck": true,
|
|
25
|
+
"useUnknownInCatchVariables": false
|
|
26
|
+
},
|
|
27
|
+
"lib": ["es2015.promise", "es5"],
|
|
28
|
+
"include": [
|
|
29
|
+
"src/**/*.ts"
|
|
30
|
+
],
|
|
31
|
+
"exclude": ["./tests/", "node_modules", "./dist/"]
|
|
32
|
+
}
|