@samyan/hd-wallet 1.1.1 → 1.1.2
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/build/index.d.ts +11 -3
- package/build/index.js +8 -8
- package/package.json +2 -1
- package/test/hd-wallet.test.ts +13 -13
- package/tsconfig.json +1 -1
package/build/index.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
declare enum BLOCKCHAIN_NETWORK {
|
|
2
|
+
BITCOIN = "bitcoin",
|
|
3
|
+
BITCOIN_REGTEST = "bitcoinRegTest",
|
|
4
|
+
LITECOIN = "litecoin",
|
|
5
|
+
ETHEREUM = "ethereum",
|
|
6
|
+
RIPPLE = "ripple",
|
|
7
|
+
TRON = "tron"
|
|
8
|
+
}
|
|
1
9
|
declare class HDWallet {
|
|
2
10
|
private segwitParameters;
|
|
3
11
|
private rootKey;
|
|
@@ -10,13 +18,13 @@ declare class HDWallet {
|
|
|
10
18
|
/**
|
|
11
19
|
* Constructor
|
|
12
20
|
*
|
|
13
|
-
* @param {
|
|
21
|
+
* @param {BLOCKCHAIN_NETWORK} protocol
|
|
14
22
|
* @param {string} mnemonicWord
|
|
15
23
|
* @param {boolean} [includePrivateKey=false]
|
|
16
24
|
* @param {boolean} [log=false]
|
|
17
25
|
* @memberof HDWallet
|
|
18
26
|
*/
|
|
19
|
-
constructor(protocol:
|
|
27
|
+
constructor(protocol: BLOCKCHAIN_NETWORK, mnemonicWord: string, includePrivateKey?: boolean, log?: boolean);
|
|
20
28
|
/**
|
|
21
29
|
* Generate
|
|
22
30
|
*
|
|
@@ -60,4 +68,4 @@ declare class HDWallet {
|
|
|
60
68
|
*/
|
|
61
69
|
private printWallet;
|
|
62
70
|
}
|
|
63
|
-
export
|
|
71
|
+
export { BLOCKCHAIN_NETWORK, HDWallet };
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.
|
|
1
|
+
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.HDWallet=exports.BLOCKCHAIN_NETWORK=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty")),_util=require("@ethereumjs/util"),_baseX=_interopRequireDefault(require("base-x")),_bip=_interopRequireDefault(require("bip32")),_bip2=require("bip39"),_bitcoinjsLib=require("bitcoinjs-lib"),_hdkey=_interopRequireDefault(require("hdkey")),ecc=_interopRequireWildcard(require("tiny-secp256k1"));function _interopRequireWildcard(a,b){if("function"==typeof WeakMap)var c=new WeakMap,d=new WeakMap;return(_interopRequireWildcard=function(a,b){if(!b&&a&&a.__esModule)return a;var e,g,h={__proto__:null,default:a};if(null===a||"object"!=typeof a&&"function"!=typeof a)return h;if(e=b?d:c){if(e.has(a))return e.get(a);e.set(a,h)}for(const c in a)"default"!=c&&{}.hasOwnProperty.call(a,c)&&((g=(e=Object.defineProperty)&&Object.getOwnPropertyDescriptor(a,c))&&(g.get||g.set)?e(h,c,g):h[c]=a[c]);return h})(a,b)}var BLOCKCHAIN_NETWORK=exports.BLOCKCHAIN_NETWORK=/*#__PURE__*/function(a){return a.BITCOIN="bitcoin",a.BITCOIN_REGTEST="bitcoinRegTest",a.LITECOIN="litecoin",a.ETHEREUM="ethereum",a.RIPPLE="ripple",a.TRON="tron",a}(BLOCKCHAIN_NETWORK||{});class HDWallet{/**
|
|
2
2
|
* Constructor
|
|
3
3
|
*
|
|
4
|
-
* @param {
|
|
4
|
+
* @param {BLOCKCHAIN_NETWORK} protocol
|
|
5
5
|
* @param {string} mnemonicWord
|
|
6
6
|
* @param {boolean} [includePrivateKey=false]
|
|
7
7
|
* @param {boolean} [log=false]
|
|
@@ -19,17 +19,17 @@ const d=this.segwitParameters[this.protocol],e=(0,_bip.default)(ecc);// Instanci
|
|
|
19
19
|
// Obtenemos la root key
|
|
20
20
|
if(this.rootKey=e.fromSeed(this.seed,d),this.accountExtendedKey=this.calcBip32ExtendedKey(this.rootKey,c),this.log){// Obtenemos la clave privada y pública
|
|
21
21
|
const a=this.accountExtendedKey.toBase58(),b=this.accountExtendedKey.neutered().toBase58();console.log("Account Extended Private Key: %s \r\nAccount Extended Public Key: %s\r\n",a,b)}// Obtenemos el wallet
|
|
22
|
-
const f=this.accountExtendedKey.derive(b);switch(this.protocol){case
|
|
22
|
+
const f=this.accountExtendedKey.derive(b);switch(this.protocol){case BLOCKCHAIN_NETWORK.BITCOIN:case BLOCKCHAIN_NETWORK.BITCOIN_REGTEST:case BLOCKCHAIN_NETWORK.LITECOIN:{// Extraemos la dirección
|
|
23
23
|
const{address:a}=_bitcoinjsLib.payments.p2wpkh({pubkey:f.publicKey,network:d}),b=f.publicKey.toString();// Obtenemos la clave pública
|
|
24
|
-
return this.log&&this.printWallet(a,f.toWIF(),b),this.includePrivateKey?{address:a,publicKey:b,privateKey:f.toWIF()}:{address:a,publicKey:b}}case
|
|
24
|
+
return this.log&&this.printWallet(a,f.toWIF(),b),this.includePrivateKey?{address:a,publicKey:b,privateKey:f.toWIF()}:{address:a,publicKey:b}}case BLOCKCHAIN_NETWORK.ETHEREUM:{// Obtenemos el wallet
|
|
25
25
|
const a=_hdkey.default.fromMasterSeed(this.seed).derive(c).deriveChild(b),d="0x"+a.publicKey.toString("hex"),e="0x"+a.privateKey.toString("hex"),f=(0,_util.publicToAddress)(a.publicKey,!0),g=(0,_util.toChecksumAddress)("0x"+Buffer.from(f).toString("hex"));// Obtenemos la clave pública
|
|
26
26
|
// Obtenemos la clave privada
|
|
27
27
|
// Obtenemos la dirección
|
|
28
|
-
return this.log&&this.printWallet(g,e,d),this.includePrivateKey?{address:g,publicKey:d,privateKey:e}:{address:g,publicKey:d}}case
|
|
28
|
+
return this.log&&this.printWallet(g,e,d),this.includePrivateKey?{address:g,publicKey:d,privateKey:e}:{address:g,publicKey:d}}case BLOCKCHAIN_NETWORK.RIPPLE:{// Extraemos la dirección
|
|
29
29
|
const{address:a}=_bitcoinjsLib.payments.p2pkh({pubkey:f.publicKey}),b=f.publicKey.toString(),c=f.privateKey.toString(),d=this.convertRippleAdrr(a);// Obtenemos la clave pública
|
|
30
30
|
// Obtenemos la clave privada
|
|
31
31
|
// Obtenemos la dirección
|
|
32
|
-
return this.log&&this.printWallet(d,c,b),this.includePrivateKey?{address:d,publicKey:b,privateKey:c}:{address:d,publicKey:b}}case
|
|
32
|
+
return this.log&&this.printWallet(d,c,b),this.includePrivateKey?{address:d,publicKey:b,privateKey:c}:{address:d,publicKey:b}}case BLOCKCHAIN_NETWORK.TRON:{// Obtenemos la clave pública en formato de ethereum
|
|
33
33
|
const a=(0,_util.importPublic)(f.publicKey),b=f.publicKey.toString(),c=f.privateKey.toString(),d=(0,_util.publicToAddress)(a),e=_bitcoinjsLib.address.toBase58Check(d,65);// Obtenemos la clave pública
|
|
34
34
|
// Obtenemos la clave privada
|
|
35
35
|
// Clave pública a dirección
|
|
@@ -57,5 +57,5 @@ return this.log&&this.printWallet(e,c,b),this.includePrivateKey?{address:e,publi
|
|
|
57
57
|
* @param {string} prvKey
|
|
58
58
|
* @param {string} pubKey
|
|
59
59
|
* @memberof HDWallet
|
|
60
|
-
*/printWallet(a,b,c){console.log("Address: %s \r\nPrivate Key: %s \r\nPublic Key: %s \r\n=========================\r\n\r\n",a,b,c)}}
|
|
61
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIRFdhbGxldCIsImNvbnN0cnVjdG9yIiwicHJvdG9jb2wiLCJtbmVtb25pY1dvcmQiLCJpbmNsdWRlUHJpdmF0ZUtleSIsImxvZyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiYml0Y29pbiIsIm1lc3NhZ2VQcmVmaXgiLCJiZWNoMzIiLCJiaXAzMiIsInB1YmxpYyIsInByaXZhdGUiLCJwdWJLZXlIYXNoIiwic2NyaXB0SGFzaCIsIndpZiIsImJpdGNvaW5SZWdUZXN0IiwibGl0ZWNvaW4iLCJzZWVkIiwibW5lbW9uaWNUb1NlZWRTeW5jIiwiZ2VuZXJhdGUiLCJwYXRoIiwiaW5kZXgiLCJoZFBhdGgiLCJjb25zb2xlIiwibmV0d29yayIsInNlZ3dpdFBhcmFtZXRlcnMiLCJCSVAzMkZhY3RvcnkiLCJlY2MiLCJyb290S2V5IiwiZnJvbVNlZWQiLCJhY2NvdW50RXh0ZW5kZWRLZXkiLCJjYWxjQmlwMzJFeHRlbmRlZEtleSIsImFjY291bnRYcHJ2IiwidG9CYXNlNTgiLCJhY2NvdW50WHB1YiIsIm5ldXRlcmVkIiwia2V5UGFpciIsImRlcml2ZSIsImFkZHJlc3MiLCJwMndwa2hBZGRyZXNzIiwicGF5bWVudHMiLCJwMndwa2giLCJwdWJrZXkiLCJwdWJsaWNLZXkiLCJ0b1N0cmluZyIsInByaW50V2FsbGV0IiwidG9XSUYiLCJwcml2YXRlS2V5IiwiZXRoZXJldW1XYWxsZXQiLCJoZGtleSIsImZyb21NYXN0ZXJTZWVkIiwiZGVyaXZlQ2hpbGQiLCJhZGRyZXNzQnVmZmVyIiwicHVibGljVG9BZGRyZXNzIiwidG9DaGVja3N1bUFkZHJlc3MiLCJCdWZmZXIiLCJmcm9tIiwieHJwQWRkcmVzcyIsInAycGtoIiwiY29udmVydFJpcHBsZUFkcnIiLCJldGhQdWJLZXkiLCJpbXBvcnRQdWJsaWMiLCJiaXRjb2luanNBZGRyZXNzIiwidG9CYXNlNThDaGVjayIsImJpcDMyUm9vdEtleSIsImV4dGVuZGVkS2V5IiwicGF0aEJpdHMiLCJzcGxpdCIsImkiLCJsZW5ndGgiLCJiaXQiLCJwYXJzZUludCIsImlzTmFOIiwiaGFyZGVuZWQiLCJkZXJpdmVIYXJkZW5lZCIsImJhc2V4IiwiZW5jb2RlIiwiZGVjb2RlIiwicHJ2S2V5IiwicHViS2V5IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcG9ydFB1YmxpYywgcHVibGljVG9BZGRyZXNzLCB0b0NoZWNrc3VtQWRkcmVzcyB9IGZyb20gJ0BldGhlcmV1bWpzL3V0aWwnO1xuaW1wb3J0IGJhc2V4IGZyb20gJ2Jhc2UteCc7XG5pbXBvcnQgQklQMzJGYWN0b3J5LCB7IEJJUDMyQVBJLCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCB7IG1uZW1vbmljVG9TZWVkU3luYyB9IGZyb20gJ2JpcDM5JztcbmltcG9ydCB7IGFkZHJlc3MgYXMgYml0Y29pbmpzQWRkcmVzcywgcGF5bWVudHMgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCBoZGtleSBmcm9tICdoZGtleSc7XG5pbXBvcnQgKiBhcyBlY2MgZnJvbSAndGlueS1zZWNwMjU2azEnO1xuXG5jbGFzcyBIRFdhbGxldCB7XG5cdHByaXZhdGUgc2Vnd2l0UGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcblx0XHRiaXRjb2luOiB7XG5cdFx0XHRtZXNzYWdlUHJlZml4OiAnXFx4MThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG5cdFx0XHRiZWNoMzI6ICdiYycsXG5cdFx0XHRiaXAzMjoge1xuXHRcdFx0XHRwdWJsaWM6IDB4MDRiMjQ3NDYsXG5cdFx0XHRcdHByaXZhdGU6IDB4MDRiMjQzMGMsXG5cdFx0XHR9LFxuXHRcdFx0cHViS2V5SGFzaDogMHgwMCxcblx0XHRcdHNjcmlwdEhhc2g6IDB4MDUsXG5cdFx0XHR3aWY6IDB4ODAsXG5cdFx0fSxcblx0XHRiaXRjb2luUmVnVGVzdDoge1xuXHRcdFx0bWVzc2FnZVByZWZpeDogJ1xceDE4Qml0Y29pbiBTaWduZWQgTWVzc2FnZTpcXG4nLFxuXHRcdFx0YmVjaDMyOiAnYmNydCcsXG5cdFx0XHRiaXAzMjoge1xuXHRcdFx0XHRwdWJsaWM6IDB4MDQzNTg3Y2YsXG5cdFx0XHRcdHByaXZhdGU6IDB4MDQzNTgzOTQsXG5cdFx0XHR9LFxuXHRcdFx0cHViS2V5SGFzaDogMHg2Zixcblx0XHRcdHNjcmlwdEhhc2g6IDB4YzQsXG5cdFx0XHR3aWY6IDB4ZWYsXG5cdFx0fSxcblx0XHRsaXRlY29pbjoge1xuXHRcdFx0bWVzc2FnZVByZWZpeDogJ1xceDE5TGl0ZWNvaW4gU2lnbmVkIE1lc3NhZ2U6XFxuJyxcblx0XHRcdGJlY2gzMjogJ2x0YycsXG5cdFx0XHRiaXAzMjoge1xuXHRcdFx0XHRwdWJsaWM6IDB4MDRiMjQ3NDYsXG5cdFx0XHRcdHByaXZhdGU6IDB4MDRiMjQzMGMsXG5cdFx0XHR9LFxuXHRcdFx0cHViS2V5SGFzaDogMHgzMCxcblx0XHRcdHNjcmlwdEhhc2g6IDB4MzIsXG5cdFx0XHR3aWY6IDB4YjAsXG5cdFx0fSxcblx0fTtcblxuXHRwcml2YXRlIHJvb3RLZXk6IEJJUDMySW50ZXJmYWNlO1xuXHRwcml2YXRlIGFjY291bnRFeHRlbmRlZEtleTogQklQMzJJbnRlcmZhY2U7XG5cblx0cHJpdmF0ZSBwcm90b2NvbDogc3RyaW5nO1xuXHRwcml2YXRlIG1uZW1vbmljV29yZDogc3RyaW5nO1xuXHRwcml2YXRlIGluY2x1ZGVQcml2YXRlS2V5OiBib29sZWFuO1xuXHRwcml2YXRlIHNlZWQ6IEJ1ZmZlcjtcblxuXHRwcml2YXRlIGxvZzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3Jcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByb3RvY29sXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtbmVtb25pY1dvcmRcblx0ICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZVByaXZhdGVLZXk9ZmFsc2VdXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xvZz1mYWxzZV1cblx0ICogQG1lbWJlcm9mIEhEV2FsbGV0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcm90b2NvbDogc3RyaW5nLCBtbmVtb25pY1dvcmQ6IHN0cmluZywgaW5jbHVkZVByaXZhdGVLZXk6IGJvb2xlYW4gPSBmYWxzZSwgbG9nOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHR0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG5cdFx0dGhpcy5tbmVtb25pY1dvcmQgPSBtbmVtb25pY1dvcmQ7XG5cdFx0dGhpcy5pbmNsdWRlUHJpdmF0ZUtleSA9IGluY2x1ZGVQcml2YXRlS2V5O1xuXHRcdHRoaXMuc2VlZCA9IG1uZW1vbmljVG9TZWVkU3luYyh0aGlzLm1uZW1vbmljV29yZCk7XG5cdFx0dGhpcy5sb2cgPSBsb2c7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG5cdCAqIEByZXR1cm4geyp9ICB7c3RyaW5nfVxuXHQgKiBAbWVtYmVyb2YgSERXYWxsZXRcblx0ICovXG5cdHB1YmxpYyBnZW5lcmF0ZShwYXRoOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB7IGFkZHJlc3M6IHN0cmluZzsgcHVibGljS2V5OiBzdHJpbmc7IHByaXZhdGVLZXk/OiBzdHJpbmcgfSB7XG5cdFx0Ly8gQ29uY2F0ZW5hbW9zXG5cdFx0Y29uc3QgaGRQYXRoOiBzdHJpbmcgPSAnbS8nICsgcGF0aDtcblxuXHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0Y29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcblx0XHRcdGNvbnNvbGUubG9nKCdNbmVtb25pYzogJXMnLCB0aGlzLm1uZW1vbmljV29yZCk7XG5cdFx0XHRjb25zb2xlLmxvZygnSEQgUGF0aDogJXNcXHJcXG4nLCBoZFBhdGgpO1xuXHRcdH1cblxuXHRcdC8vIE9idGVuZW1vcyBsYSByZWQgc2kgZXMgZWwgY2Fzb1xuXHRcdGNvbnN0IG5ldHdvcms6IGFueSA9IHRoaXMuc2Vnd2l0UGFyYW1ldGVyc1t0aGlzLnByb3RvY29sXTtcblx0XHQvLyBJbnN0YW5jaWFtb3Ncblx0XHRjb25zdCBiaXAzMjogQklQMzJBUEkgPSBCSVAzMkZhY3RvcnkoZWNjKTtcblx0XHQvLyBPYnRlbmVtb3MgbGEgcm9vdCBrZXlcblx0XHR0aGlzLnJvb3RLZXkgPSBiaXAzMi5mcm9tU2VlZCh0aGlzLnNlZWQsIG5ldHdvcmspO1xuXHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBleHRlbmRpZGEgZGUgbGEgY3VlbnRhXG5cdFx0dGhpcy5hY2NvdW50RXh0ZW5kZWRLZXkgPSB0aGlzLmNhbGNCaXAzMkV4dGVuZGVkS2V5KHRoaXMucm9vdEtleSwgaGRQYXRoKTtcblxuXHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIHByaXZhZGEgeSBww7pibGljYVxuXHRcdFx0Y29uc3QgYWNjb3VudFhwcnY6IHN0cmluZyA9IHRoaXMuYWNjb3VudEV4dGVuZGVkS2V5LnRvQmFzZTU4KCk7XG5cdFx0XHRjb25zdCBhY2NvdW50WHB1Yjogc3RyaW5nID0gdGhpcy5hY2NvdW50RXh0ZW5kZWRLZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuXG5cdFx0XHRjb25zb2xlLmxvZygnQWNjb3VudCBFeHRlbmRlZCBQcml2YXRlIEtleTogJXMgXFxyXFxuQWNjb3VudCBFeHRlbmRlZCBQdWJsaWMgS2V5OiAlc1xcclxcbicsIGFjY291bnRYcHJ2LCBhY2NvdW50WHB1Yik7XG5cdFx0fVxuXG5cdFx0Ly8gT2J0ZW5lbW9zIGVsIHdhbGxldFxuXHRcdGNvbnN0IGtleVBhaXI6IEJJUDMySW50ZXJmYWNlID0gdGhpcy5hY2NvdW50RXh0ZW5kZWRLZXkuZGVyaXZlKGluZGV4KTtcblxuXHRcdHN3aXRjaCAodGhpcy5wcm90b2NvbCkge1xuXHRcdFx0Y2FzZSAnYml0Y29pbic6XG5cdFx0XHRjYXNlICdiaXRjb2luUmVnVGVzdCc6XG5cdFx0XHRjYXNlICdsaXRlY29pbic6IHtcblx0XHRcdFx0Ly8gRXh0cmFlbW9zIGxhIGRpcmVjY2nDs25cblx0XHRcdFx0Y29uc3QgeyBhZGRyZXNzOiBwMndwa2hBZGRyZXNzIH0gPSBwYXltZW50cy5wMndwa2goeyBwdWJrZXk6IGtleVBhaXIucHVibGljS2V5LCBuZXR3b3JrIH0pO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBww7pibGljYVxuXHRcdFx0XHRjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLnB1YmxpY0tleS50b1N0cmluZygpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0XHRcdHRoaXMucHJpbnRXYWxsZXQocDJ3cGtoQWRkcmVzcywga2V5UGFpci50b1dJRigpLCBwdWJsaWNLZXkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuaW5jbHVkZVByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRyZXR1cm4geyBhZGRyZXNzOiBwMndwa2hBZGRyZXNzLCBwdWJsaWNLZXksIHByaXZhdGVLZXk6IGtleVBhaXIudG9XSUYoKSB9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzczogcDJ3cGtoQWRkcmVzcywgcHVibGljS2V5IH07XG5cdFx0XHR9XG5cdFx0XHRjYXNlICdldGhlcmV1bSc6IHtcblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGVsIHdhbGxldFxuXHRcdFx0XHRjb25zdCBldGhlcmV1bVdhbGxldCA9IGhka2V5LmZyb21NYXN0ZXJTZWVkKHRoaXMuc2VlZCkuZGVyaXZlKGhkUGF0aCkuZGVyaXZlQ2hpbGQoaW5kZXgpO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBww7pibGljYVxuXHRcdFx0XHRjb25zdCBwdWJsaWNLZXkgPSAnMHgnICsgZXRoZXJldW1XYWxsZXQucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcblxuXHRcdFx0XHQvLyBPYnRlbmVtb3MgbGEgY2xhdmUgcHJpdmFkYVxuXHRcdFx0XHRjb25zdCBwcml2YXRlS2V5OiBzdHJpbmcgPSAnMHgnICsgZXRoZXJldW1XYWxsZXQucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG5cblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGRpcmVjY2nDs25cblx0XHRcdFx0Y29uc3QgYWRkcmVzc0J1ZmZlciA9IHB1YmxpY1RvQWRkcmVzcyhldGhlcmV1bVdhbGxldC5wdWJsaWNLZXksIHRydWUpO1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzOiBzdHJpbmcgPSB0b0NoZWNrc3VtQWRkcmVzcygnMHgnICsgQnVmZmVyLmZyb20oYWRkcmVzc0J1ZmZlcikudG9TdHJpbmcoJ2hleCcpKTtcblxuXHRcdFx0XHRpZiAodGhpcy5sb2cpIHtcblx0XHRcdFx0XHR0aGlzLnByaW50V2FsbGV0KGFkZHJlc3MsIHByaXZhdGVLZXksIHB1YmxpY0tleSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5pbmNsdWRlUHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdHJldHVybiB7IGFkZHJlc3MsIHB1YmxpY0tleSwgcHJpdmF0ZUtleSB9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzcywgcHVibGljS2V5IH07XG5cdFx0XHR9XG5cdFx0XHRjYXNlICdyaXBwbGUnOiB7XG5cdFx0XHRcdC8vIEV4dHJhZW1vcyBsYSBkaXJlY2Npw7NuXG5cdFx0XHRcdGNvbnN0IHsgYWRkcmVzczogeHJwQWRkcmVzcyB9ID0gcGF5bWVudHMucDJwa2goeyBwdWJrZXk6IGtleVBhaXIucHVibGljS2V5IH0pO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBww7pibGljYVxuXHRcdFx0XHRjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLnB1YmxpY0tleS50b1N0cmluZygpO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBwcml2YWRhXG5cdFx0XHRcdGNvbnN0IHByaXZhdGVLZXk6IHN0cmluZyA9IGtleVBhaXIucHJpdmF0ZUtleS50b1N0cmluZygpO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBkaXJlY2Npw7NuXG5cdFx0XHRcdGNvbnN0IGFkZHJlc3MgPSB0aGlzLmNvbnZlcnRSaXBwbGVBZHJyKHhycEFkZHJlc3MpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0XHRcdHRoaXMucHJpbnRXYWxsZXQoYWRkcmVzcywgcHJpdmF0ZUtleSwgcHVibGljS2V5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLmluY2x1ZGVQcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzcywgcHVibGljS2V5LCBwcml2YXRlS2V5IH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4geyBhZGRyZXNzLCBwdWJsaWNLZXkgfTtcblx0XHRcdH1cblx0XHRcdGNhc2UgJ3Ryb24nOiB7XG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBww7pibGljYSBlbiBmb3JtYXRvIGRlIGV0aGVyZXVtXG5cdFx0XHRcdGNvbnN0IGV0aFB1YktleSA9IGltcG9ydFB1YmxpYyhrZXlQYWlyLnB1YmxpY0tleSk7XG5cblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIHDDumJsaWNhXG5cdFx0XHRcdGNvbnN0IHB1YmxpY0tleSA9IGtleVBhaXIucHVibGljS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIHByaXZhZGFcblx0XHRcdFx0Y29uc3QgcHJpdmF0ZUtleTogc3RyaW5nID0ga2V5UGFpci5wcml2YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRcdFx0Ly8gQ2xhdmUgcMO6YmxpY2EgYSBkaXJlY2Npw7NuXG5cdFx0XHRcdGNvbnN0IGFkZHJlc3NCdWZmZXIgPSBwdWJsaWNUb0FkZHJlc3MoZXRoUHViS2V5KTtcblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGRpcmVjY2nDs25cblx0XHRcdFx0Y29uc3QgYWRkcmVzczogc3RyaW5nID0gYml0Y29pbmpzQWRkcmVzcy50b0Jhc2U1OENoZWNrKGFkZHJlc3NCdWZmZXIsIDB4NDEpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0XHRcdHRoaXMucHJpbnRXYWxsZXQoYWRkcmVzcywgcHJpdmF0ZUtleSwgcHVibGljS2V5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLmluY2x1ZGVQcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzcywgcHVibGljS2V5LCBwcml2YXRlS2V5IH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4geyBhZGRyZXNzLCBwdWJsaWNLZXkgfTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIGJpcDMyIGV4dGVuZGVkIGtleSBieSByb290IGtleVxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0JJUDMySW50ZXJmYWNlfSBiaXAzMlJvb3RLZXlcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHJldHVybiB7Kn0gIHtCSVAzMkludGVyZmFjZX1cblx0ICogQG1lbWJlcm9mIEhEV2FsbGV0XG5cdCAqL1xuXHRwcml2YXRlIGNhbGNCaXAzMkV4dGVuZGVkS2V5KGJpcDMyUm9vdEtleTogQklQMzJJbnRlcmZhY2UsIHBhdGg6IHN0cmluZyk6IEJJUDMySW50ZXJmYWNlIHtcblx0XHRsZXQgZXh0ZW5kZWRLZXk6IEJJUDMySW50ZXJmYWNlID0gYmlwMzJSb290S2V5O1xuXHRcdGNvbnN0IHBhdGhCaXRzOiBzdHJpbmdbXSA9IHBhdGguc3BsaXQoJy8nKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEJpdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGJpdDogc3RyaW5nID0gcGF0aEJpdHNbaV07XG5cdFx0XHRjb25zdCBpbmRleDogbnVtYmVyID0gcGFyc2VJbnQoYml0KTtcblxuXHRcdFx0aWYgKGlzTmFOKGluZGV4KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaGFyZGVuZWQ6IGJvb2xlYW4gPSBiaXRbYml0Lmxlbmd0aCAtIDFdID09PSBcIidcIjtcblxuXHRcdFx0aWYgKGhhcmRlbmVkKSB7XG5cdFx0XHRcdGV4dGVuZGVkS2V5ID0gZXh0ZW5kZWRLZXkuZGVyaXZlSGFyZGVuZWQoaW5kZXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0ZW5kZWRLZXkgPSBleHRlbmRlZEtleS5kZXJpdmUoaW5kZXgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBleHRlbmRlZEtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IGFkZHJlc3MgdG8gUmlwcGxlIGFkZHJlc3Ncblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3Ncblx0ICogQHJldHVybiB7Kn0gIHtzdHJpbmd9XG5cdCAqIEBtZW1iZXJvZiBIRFdhbGxldFxuXHQgKi9cblx0cHJpdmF0ZSBjb252ZXJ0UmlwcGxlQWRycihhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBiYXNleCgncnBzaG5hZjM5d0JVRE5FR0hKS0xNNFBRUlNUN1ZXWFlaMmJjZGVDZzY1amttOG9GcWkxdHV2QXh5eicpLmVuY29kZShcblx0XHRcdGJhc2V4KCcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6JykuZGVjb2RlKGFkZHJlc3MpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJpbnQgd2FsbGV0XG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcnZLZXlcblx0ICogQHBhcmFtIHtzdHJpbmd9IHB1YktleVxuXHQgKiBAbWVtYmVyb2YgSERXYWxsZXRcblx0ICovXG5cdHByaXZhdGUgcHJpbnRXYWxsZXQoYWRkcmVzczogc3RyaW5nLCBwcnZLZXk6IHN0cmluZywgcHViS2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zb2xlLmxvZygnQWRkcmVzczogJXMgXFxyXFxuUHJpdmF0ZSBLZXk6ICVzIFxcclxcblB1YmxpYyBLZXk6ICVzIFxcclxcbj09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4nLCBhZGRyZXNzLCBwcnZLZXksIHB1YktleSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSERXYWxsZXQ7XG4iXSwibWFwcGluZ3MiOiIraUNBUUEsS0FBTSxDQUFBQSxRQUFTLENBK0NkO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNDQyxXQUFXQSxDQUFDQyxDQUFnQixDQUFFQyxDQUFvQixDQUFFQyxDQUEwQixHQUFRLENBQUVDLENBQVksR0FBUSxDQUFFLElBQUFDLGdCQUFBLENBQUFDLE9BQUEsMEJBdkQzRCxDQUNsREMsT0FBTyxDQUFFLENBQ1JDLGFBQWEsQ0FBRSwrQkFBK0IsQ0FDOUNDLE1BQU0sQ0FBRSxJQUFJLENBQ1pDLEtBQUssQ0FBRSxDQUNOQyxNQUFNLENBQUUsUUFBVSxDQUNsQkMsT0FBTyxDQUFFLFFBQ1YsQ0FBQyxDQUNEQyxVQUFVLENBQUUsQ0FBSSxDQUNoQkMsVUFBVSxDQUFFLENBQUksQ0FDaEJDLEdBQUcsQ0FBRSxHQUNOLENBQUMsQ0FDREMsY0FBYyxDQUFFLENBQ2ZSLGFBQWEsQ0FBRSwrQkFBK0IsQ0FDOUNDLE1BQU0sQ0FBRSxNQUFNLENBQ2RDLEtBQUssQ0FBRSxDQUNOQyxNQUFNLENBQUUsUUFBVSxDQUNsQkMsT0FBTyxDQUFFLFFBQ1YsQ0FBQyxDQUNEQyxVQUFVLENBQUUsR0FBSSxDQUNoQkMsVUFBVSxDQUFFLEdBQUksQ0FDaEJDLEdBQUcsQ0FBRSxHQUNOLENBQUMsQ0FDREUsUUFBUSxDQUFFLENBQ1RULGFBQWEsQ0FBRSxnQ0FBZ0MsQ0FDL0NDLE1BQU0sQ0FBRSxLQUFLLENBQ2JDLEtBQUssQ0FBRSxDQUNOQyxNQUFNLENBQUUs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
|
|
60
|
+
*/printWallet(a,b,c){console.log("Address: %s \r\nPrivate Key: %s \r\nPublic Key: %s \r\n=========================\r\n\r\n",a,b,c)}}exports.HDWallet=HDWallet;
|
|
61
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCTE9DS0NIQUlOX05FVFdPUksiLCJleHBvcnRzIiwiQklUQ09JTiIsIkJJVENPSU5fUkVHVEVTVCIsIkxJVEVDT0lOIiwiRVRIRVJFVU0iLCJSSVBQTEUiLCJUUk9OIiwiSERXYWxsZXQiLCJjb25zdHJ1Y3RvciIsInByb3RvY29sIiwibW5lbW9uaWNXb3JkIiwiaW5jbHVkZVByaXZhdGVLZXkiLCJsb2ciLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImJpdGNvaW4iLCJtZXNzYWdlUHJlZml4IiwiYmVjaDMyIiwiYmlwMzIiLCJwdWJsaWMiLCJwcml2YXRlIiwicHViS2V5SGFzaCIsInNjcmlwdEhhc2giLCJ3aWYiLCJiaXRjb2luUmVnVGVzdCIsImxpdGVjb2luIiwic2VlZCIsIm1uZW1vbmljVG9TZWVkU3luYyIsImdlbmVyYXRlIiwicGF0aCIsImluZGV4IiwiaGRQYXRoIiwiY29uc29sZSIsIm5ldHdvcmsiLCJzZWd3aXRQYXJhbWV0ZXJzIiwiQklQMzJGYWN0b3J5IiwiZWNjIiwicm9vdEtleSIsImZyb21TZWVkIiwiYWNjb3VudEV4dGVuZGVkS2V5IiwiY2FsY0JpcDMyRXh0ZW5kZWRLZXkiLCJhY2NvdW50WHBydiIsInRvQmFzZTU4IiwiYWNjb3VudFhwdWIiLCJuZXV0ZXJlZCIsImtleVBhaXIiLCJkZXJpdmUiLCJhZGRyZXNzIiwicDJ3cGtoQWRkcmVzcyIsInBheW1lbnRzIiwicDJ3cGtoIiwicHVia2V5IiwicHVibGljS2V5IiwidG9TdHJpbmciLCJwcmludFdhbGxldCIsInRvV0lGIiwicHJpdmF0ZUtleSIsImV0aGVyZXVtV2FsbGV0IiwiaGRrZXkiLCJmcm9tTWFzdGVyU2VlZCIsImRlcml2ZUNoaWxkIiwiYWRkcmVzc0J1ZmZlciIsInB1YmxpY1RvQWRkcmVzcyIsInRvQ2hlY2tzdW1BZGRyZXNzIiwiQnVmZmVyIiwiZnJvbSIsInhycEFkZHJlc3MiLCJwMnBraCIsImNvbnZlcnRSaXBwbGVBZHJyIiwiZXRoUHViS2V5IiwiaW1wb3J0UHVibGljIiwiYml0Y29pbmpzQWRkcmVzcyIsInRvQmFzZTU4Q2hlY2siLCJiaXAzMlJvb3RLZXkiLCJleHRlbmRlZEtleSIsInBhdGhCaXRzIiwic3BsaXQiLCJpIiwibGVuZ3RoIiwiYml0IiwicGFyc2VJbnQiLCJpc05hTiIsImhhcmRlbmVkIiwiZGVyaXZlSGFyZGVuZWQiLCJiYXNleCIsImVuY29kZSIsImRlY29kZSIsInBydktleSIsInB1YktleSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbXBvcnRQdWJsaWMsIHB1YmxpY1RvQWRkcmVzcywgdG9DaGVja3N1bUFkZHJlc3MgfSBmcm9tICdAZXRoZXJldW1qcy91dGlsJztcbmltcG9ydCBiYXNleCBmcm9tICdiYXNlLXgnO1xuaW1wb3J0IEJJUDMyRmFjdG9yeSwgeyBCSVAzMkFQSSwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdiaXAzMic7XG5pbXBvcnQgeyBtbmVtb25pY1RvU2VlZFN5bmMgfSBmcm9tICdiaXAzOSc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIGJpdGNvaW5qc0FkZHJlc3MsIHBheW1lbnRzIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgaGRrZXkgZnJvbSAnaGRrZXknO1xuaW1wb3J0ICogYXMgZWNjIGZyb20gJ3Rpbnktc2VjcDI1NmsxJztcblxuZW51bSBCTE9DS0NIQUlOX05FVFdPUksge1xuXHRCSVRDT0lOID0gJ2JpdGNvaW4nLFxuXHRCSVRDT0lOX1JFR1RFU1QgPSAnYml0Y29pblJlZ1Rlc3QnLFxuXHRMSVRFQ09JTiA9ICdsaXRlY29pbicsXG5cdEVUSEVSRVVNID0gJ2V0aGVyZXVtJyxcblx0UklQUExFID0gJ3JpcHBsZScsXG5cdFRST04gPSAndHJvbicsXG59XG5cbmNsYXNzIEhEV2FsbGV0IHtcblx0cHJpdmF0ZSBzZWd3aXRQYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuXHRcdGJpdGNvaW46IHtcblx0XHRcdG1lc3NhZ2VQcmVmaXg6ICdcXHgxOEJpdGNvaW4gU2lnbmVkIE1lc3NhZ2U6XFxuJyxcblx0XHRcdGJlY2gzMjogJ2JjJyxcblx0XHRcdGJpcDMyOiB7XG5cdFx0XHRcdHB1YmxpYzogMHgwNGIyNDc0Nixcblx0XHRcdFx0cHJpdmF0ZTogMHgwNGIyNDMwYyxcblx0XHRcdH0sXG5cdFx0XHRwdWJLZXlIYXNoOiAweDAwLFxuXHRcdFx0c2NyaXB0SGFzaDogMHgwNSxcblx0XHRcdHdpZjogMHg4MCxcblx0XHR9LFxuXHRcdGJpdGNvaW5SZWdUZXN0OiB7XG5cdFx0XHRtZXNzYWdlUHJlZml4OiAnXFx4MThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG5cdFx0XHRiZWNoMzI6ICdiY3J0Jyxcblx0XHRcdGJpcDMyOiB7XG5cdFx0XHRcdHB1YmxpYzogMHgwNDM1ODdjZixcblx0XHRcdFx0cHJpdmF0ZTogMHgwNDM1ODM5NCxcblx0XHRcdH0sXG5cdFx0XHRwdWJLZXlIYXNoOiAweDZmLFxuXHRcdFx0c2NyaXB0SGFzaDogMHhjNCxcblx0XHRcdHdpZjogMHhlZixcblx0XHR9LFxuXHRcdGxpdGVjb2luOiB7XG5cdFx0XHRtZXNzYWdlUHJlZml4OiAnXFx4MTlMaXRlY29pbiBTaWduZWQgTWVzc2FnZTpcXG4nLFxuXHRcdFx0YmVjaDMyOiAnbHRjJyxcblx0XHRcdGJpcDMyOiB7XG5cdFx0XHRcdHB1YmxpYzogMHgwNGIyNDc0Nixcblx0XHRcdFx0cHJpdmF0ZTogMHgwNGIyNDMwYyxcblx0XHRcdH0sXG5cdFx0XHRwdWJLZXlIYXNoOiAweDMwLFxuXHRcdFx0c2NyaXB0SGFzaDogMHgzMixcblx0XHRcdHdpZjogMHhiMCxcblx0XHR9LFxuXHR9O1xuXG5cdHByaXZhdGUgcm9vdEtleTogQklQMzJJbnRlcmZhY2U7XG5cdHByaXZhdGUgYWNjb3VudEV4dGVuZGVkS2V5OiBCSVAzMkludGVyZmFjZTtcblxuXHRwcml2YXRlIHByb3RvY29sOiBCTE9DS0NIQUlOX05FVFdPUks7XG5cdHByaXZhdGUgbW5lbW9uaWNXb3JkOiBzdHJpbmc7XG5cdHByaXZhdGUgaW5jbHVkZVByaXZhdGVLZXk6IGJvb2xlYW47XG5cdHByaXZhdGUgc2VlZDogQnVmZmVyO1xuXG5cdHByaXZhdGUgbG9nOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0ge0JMT0NLQ0hBSU5fTkVUV09SS30gcHJvdG9jb2xcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1uZW1vbmljV29yZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUHJpdmF0ZUtleT1mYWxzZV1cblx0ICogQHBhcmFtIHtib29sZWFufSBbbG9nPWZhbHNlXVxuXHQgKiBAbWVtYmVyb2YgSERXYWxsZXRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByb3RvY29sOiBCTE9DS0NIQUlOX05FVFdPUkssIG1uZW1vbmljV29yZDogc3RyaW5nLCBpbmNsdWRlUHJpdmF0ZUtleTogYm9vbGVhbiA9IGZhbHNlLCBsb2c6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcblx0XHR0aGlzLm1uZW1vbmljV29yZCA9IG1uZW1vbmljV29yZDtcblx0XHR0aGlzLmluY2x1ZGVQcml2YXRlS2V5ID0gaW5jbHVkZVByaXZhdGVLZXk7XG5cdFx0dGhpcy5zZWVkID0gbW5lbW9uaWNUb1NlZWRTeW5jKHRoaXMubW5lbW9uaWNXb3JkKTtcblx0XHR0aGlzLmxvZyA9IGxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcblx0ICogQHJldHVybiB7Kn0gIHtzdHJpbmd9XG5cdCAqIEBtZW1iZXJvZiBIRFdhbGxldFxuXHQgKi9cblx0cHVibGljIGdlbmVyYXRlKHBhdGg6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHsgYWRkcmVzczogc3RyaW5nOyBwdWJsaWNLZXk6IHN0cmluZzsgcHJpdmF0ZUtleT86IHN0cmluZyB9IHtcblx0XHQvLyBDb25jYXRlbmFtb3Ncblx0XHRjb25zdCBoZFBhdGg6IHN0cmluZyA9ICdtLycgKyBwYXRoO1xuXG5cdFx0aWYgKHRoaXMubG9nKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuXHRcdFx0Y29uc29sZS5sb2coJ01uZW1vbmljOiAlcycsIHRoaXMubW5lbW9uaWNXb3JkKTtcblx0XHRcdGNvbnNvbGUubG9nKCdIRCBQYXRoOiAlc1xcclxcbicsIGhkUGF0aCk7XG5cdFx0fVxuXG5cdFx0Ly8gT2J0ZW5lbW9zIGxhIHJlZCBzaSBlcyBlbCBjYXNvXG5cdFx0Y29uc3QgbmV0d29yazogYW55ID0gdGhpcy5zZWd3aXRQYXJhbWV0ZXJzW3RoaXMucHJvdG9jb2xdO1xuXHRcdC8vIEluc3RhbmNpYW1vc1xuXHRcdGNvbnN0IGJpcDMyOiBCSVAzMkFQSSA9IEJJUDMyRmFjdG9yeShlY2MpO1xuXHRcdC8vIE9idGVuZW1vcyBsYSByb290IGtleVxuXHRcdHRoaXMucm9vdEtleSA9IGJpcDMyLmZyb21TZWVkKHRoaXMuc2VlZCwgbmV0d29yayk7XG5cdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIGV4dGVuZGlkYSBkZSBsYSBjdWVudGFcblx0XHR0aGlzLmFjY291bnRFeHRlbmRlZEtleSA9IHRoaXMuY2FsY0JpcDMyRXh0ZW5kZWRLZXkodGhpcy5yb290S2V5LCBoZFBhdGgpO1xuXG5cdFx0aWYgKHRoaXMubG9nKSB7XG5cdFx0XHQvLyBPYnRlbmVtb3MgbGEgY2xhdmUgcHJpdmFkYSB5IHDDumJsaWNhXG5cdFx0XHRjb25zdCBhY2NvdW50WHBydjogc3RyaW5nID0gdGhpcy5hY2NvdW50RXh0ZW5kZWRLZXkudG9CYXNlNTgoKTtcblx0XHRcdGNvbnN0IGFjY291bnRYcHViOiBzdHJpbmcgPSB0aGlzLmFjY291bnRFeHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG5cblx0XHRcdGNvbnNvbGUubG9nKCdBY2NvdW50IEV4dGVuZGVkIFByaXZhdGUgS2V5OiAlcyBcXHJcXG5BY2NvdW50IEV4dGVuZGVkIFB1YmxpYyBLZXk6ICVzXFxyXFxuJywgYWNjb3VudFhwcnYsIGFjY291bnRYcHViKTtcblx0XHR9XG5cblx0XHQvLyBPYnRlbmVtb3MgZWwgd2FsbGV0XG5cdFx0Y29uc3Qga2V5UGFpcjogQklQMzJJbnRlcmZhY2UgPSB0aGlzLmFjY291bnRFeHRlbmRlZEtleS5kZXJpdmUoaW5kZXgpO1xuXG5cdFx0c3dpdGNoICh0aGlzLnByb3RvY29sKSB7XG5cdFx0XHRjYXNlIEJMT0NLQ0hBSU5fTkVUV09SSy5CSVRDT0lOOlxuXHRcdFx0Y2FzZSBCTE9DS0NIQUlOX05FVFdPUksuQklUQ09JTl9SRUdURVNUOlxuXHRcdFx0Y2FzZSBCTE9DS0NIQUlOX05FVFdPUksuTElURUNPSU46IHtcblx0XHRcdFx0Ly8gRXh0cmFlbW9zIGxhIGRpcmVjY2nDs25cblx0XHRcdFx0Y29uc3QgeyBhZGRyZXNzOiBwMndwa2hBZGRyZXNzIH0gPSBwYXltZW50cy5wMndwa2goeyBwdWJrZXk6IGtleVBhaXIucHVibGljS2V5LCBuZXR3b3JrIH0pO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBww7pibGljYVxuXHRcdFx0XHRjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLnB1YmxpY0tleS50b1N0cmluZygpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0XHRcdHRoaXMucHJpbnRXYWxsZXQocDJ3cGtoQWRkcmVzcywga2V5UGFpci50b1dJRigpLCBwdWJsaWNLZXkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuaW5jbHVkZVByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRyZXR1cm4geyBhZGRyZXNzOiBwMndwa2hBZGRyZXNzLCBwdWJsaWNLZXksIHByaXZhdGVLZXk6IGtleVBhaXIudG9XSUYoKSB9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzczogcDJ3cGtoQWRkcmVzcywgcHVibGljS2V5IH07XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEJMT0NLQ0hBSU5fTkVUV09SSy5FVEhFUkVVTToge1xuXHRcdFx0XHQvLyBPYnRlbmVtb3MgZWwgd2FsbGV0XG5cdFx0XHRcdGNvbnN0IGV0aGVyZXVtV2FsbGV0ID0gaGRrZXkuZnJvbU1hc3RlclNlZWQodGhpcy5zZWVkKS5kZXJpdmUoaGRQYXRoKS5kZXJpdmVDaGlsZChpbmRleCk7XG5cblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIHDDumJsaWNhXG5cdFx0XHRcdGNvbnN0IHB1YmxpY0tleSA9ICcweCcgKyBldGhlcmV1bVdhbGxldC5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuXG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBwcml2YWRhXG5cdFx0XHRcdGNvbnN0IHByaXZhdGVLZXk6IHN0cmluZyA9ICcweCcgKyBldGhlcmV1bVdhbGxldC5wcml2YXRlS2V5LnRvU3RyaW5nKCdoZXgnKTtcblxuXHRcdFx0XHQvLyBPYnRlbmVtb3MgbGEgZGlyZWNjacOzblxuXHRcdFx0XHRjb25zdCBhZGRyZXNzQnVmZmVyID0gcHVibGljVG9BZGRyZXNzKGV0aGVyZXVtV2FsbGV0LnB1YmxpY0tleSwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGFkZHJlc3M6IHN0cmluZyA9IHRvQ2hlY2tzdW1BZGRyZXNzKCcweCcgKyBCdWZmZXIuZnJvbShhZGRyZXNzQnVmZmVyKS50b1N0cmluZygnaGV4JykpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0XHRcdHRoaXMucHJpbnRXYWxsZXQoYWRkcmVzcywgcHJpdmF0ZUtleSwgcHVibGljS2V5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLmluY2x1ZGVQcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzcywgcHVibGljS2V5LCBwcml2YXRlS2V5IH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4geyBhZGRyZXNzLCBwdWJsaWNLZXkgfTtcblx0XHRcdH1cblx0XHRcdGNhc2UgQkxPQ0tDSEFJTl9ORVRXT1JLLlJJUFBMRToge1xuXHRcdFx0XHQvLyBFeHRyYWVtb3MgbGEgZGlyZWNjacOzblxuXHRcdFx0XHRjb25zdCB7IGFkZHJlc3M6IHhycEFkZHJlc3MgfSA9IHBheW1lbnRzLnAycGtoKHsgcHVia2V5OiBrZXlQYWlyLnB1YmxpY0tleSB9KTtcblxuXHRcdFx0XHQvLyBPYnRlbmVtb3MgbGEgY2xhdmUgcMO6YmxpY2Fcblx0XHRcdFx0Y29uc3QgcHVibGljS2V5ID0ga2V5UGFpci5wdWJsaWNLZXkudG9TdHJpbmcoKTtcblxuXHRcdFx0XHQvLyBPYnRlbmVtb3MgbGEgY2xhdmUgcHJpdmFkYVxuXHRcdFx0XHRjb25zdCBwcml2YXRlS2V5OiBzdHJpbmcgPSBrZXlQYWlyLnByaXZhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdFx0XHQvLyBPYnRlbmVtb3MgbGEgZGlyZWNjacOzblxuXHRcdFx0XHRjb25zdCBhZGRyZXNzID0gdGhpcy5jb252ZXJ0UmlwcGxlQWRycih4cnBBZGRyZXNzKTtcblxuXHRcdFx0XHRpZiAodGhpcy5sb2cpIHtcblx0XHRcdFx0XHR0aGlzLnByaW50V2FsbGV0KGFkZHJlc3MsIHByaXZhdGVLZXksIHB1YmxpY0tleSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5pbmNsdWRlUHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdHJldHVybiB7IGFkZHJlc3MsIHB1YmxpY0tleSwgcHJpdmF0ZUtleSB9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzcywgcHVibGljS2V5IH07XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEJMT0NLQ0hBSU5fTkVUV09SSy5UUk9OOiB7XG5cdFx0XHRcdC8vIE9idGVuZW1vcyBsYSBjbGF2ZSBww7pibGljYSBlbiBmb3JtYXRvIGRlIGV0aGVyZXVtXG5cdFx0XHRcdGNvbnN0IGV0aFB1YktleSA9IGltcG9ydFB1YmxpYyhrZXlQYWlyLnB1YmxpY0tleSk7XG5cblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIHDDumJsaWNhXG5cdFx0XHRcdGNvbnN0IHB1YmxpY0tleSA9IGtleVBhaXIucHVibGljS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGNsYXZlIHByaXZhZGFcblx0XHRcdFx0Y29uc3QgcHJpdmF0ZUtleTogc3RyaW5nID0ga2V5UGFpci5wcml2YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRcdFx0Ly8gQ2xhdmUgcMO6YmxpY2EgYSBkaXJlY2Npw7NuXG5cdFx0XHRcdGNvbnN0IGFkZHJlc3NCdWZmZXIgPSBwdWJsaWNUb0FkZHJlc3MoZXRoUHViS2V5KTtcblx0XHRcdFx0Ly8gT2J0ZW5lbW9zIGxhIGRpcmVjY2nDs25cblx0XHRcdFx0Y29uc3QgYWRkcmVzczogc3RyaW5nID0gYml0Y29pbmpzQWRkcmVzcy50b0Jhc2U1OENoZWNrKGFkZHJlc3NCdWZmZXIsIDB4NDEpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmxvZykge1xuXHRcdFx0XHRcdHRoaXMucHJpbnRXYWxsZXQoYWRkcmVzcywgcHJpdmF0ZUtleSwgcHVibGljS2V5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLmluY2x1ZGVQcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgYWRkcmVzcywgcHVibGljS2V5LCBwcml2YXRlS2V5IH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4geyBhZGRyZXNzLCBwdWJsaWNLZXkgfTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIGJpcDMyIGV4dGVuZGVkIGtleSBieSByb290IGtleVxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0JJUDMySW50ZXJmYWNlfSBiaXAzMlJvb3RLZXlcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHJldHVybiB7Kn0gIHtCSVAzMkludGVyZmFjZX1cblx0ICogQG1lbWJlcm9mIEhEV2FsbGV0XG5cdCAqL1xuXHRwcml2YXRlIGNhbGNCaXAzMkV4dGVuZGVkS2V5KGJpcDMyUm9vdEtleTogQklQMzJJbnRlcmZhY2UsIHBhdGg6IHN0cmluZyk6IEJJUDMySW50ZXJmYWNlIHtcblx0XHRsZXQgZXh0ZW5kZWRLZXk6IEJJUDMySW50ZXJmYWNlID0gYmlwMzJSb290S2V5O1xuXHRcdGNvbnN0IHBhdGhCaXRzOiBzdHJpbmdbXSA9IHBhdGguc3BsaXQoJy8nKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEJpdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGJpdDogc3RyaW5nID0gcGF0aEJpdHNbaV07XG5cdFx0XHRjb25zdCBpbmRleDogbnVtYmVyID0gcGFyc2VJbnQoYml0KTtcblxuXHRcdFx0aWYgKGlzTmFOKGluZGV4KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaGFyZGVuZWQ6IGJvb2xlYW4gPSBiaXRbYml0Lmxlbmd0aCAtIDFdID09PSBcIidcIjtcblxuXHRcdFx0aWYgKGhhcmRlbmVkKSB7XG5cdFx0XHRcdGV4dGVuZGVkS2V5ID0gZXh0ZW5kZWRLZXkuZGVyaXZlSGFyZGVuZWQoaW5kZXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0ZW5kZWRLZXkgPSBleHRlbmRlZEtleS5kZXJpdmUoaW5kZXgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBleHRlbmRlZEtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IGFkZHJlc3MgdG8gUmlwcGxlIGFkZHJlc3Ncblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3Ncblx0ICogQHJldHVybiB7Kn0gIHtzdHJpbmd9XG5cdCAqIEBtZW1iZXJvZiBIRFdhbGxldFxuXHQgKi9cblx0cHJpdmF0ZSBjb252ZXJ0UmlwcGxlQWRycihhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBiYXNleCgncnBzaG5hZjM5d0JVRE5FR0hKS0xNNFBRUlNUN1ZXWFlaMmJjZGVDZzY1amttOG9GcWkxdHV2QXh5eicpLmVuY29kZShcblx0XHRcdGJhc2V4KCcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6JykuZGVjb2RlKGFkZHJlc3MpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJpbnQgd2FsbGV0XG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcnZLZXlcblx0ICogQHBhcmFtIHtzdHJpbmd9IHB1YktleVxuXHQgKiBAbWVtYmVyb2YgSERXYWxsZXRcblx0ICovXG5cdHByaXZhdGUgcHJpbnRXYWxsZXQoYWRkcmVzczogc3RyaW5nLCBwcnZLZXk6IHN0cmluZywgcHViS2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zb2xlLmxvZygnQWRkcmVzczogJXMgXFxyXFxuUHJpdmF0ZSBLZXk6ICVzIFxcclxcblB1YmxpYyBLZXk6ICVzIFxcclxcbj09PT09PT09PT09PT09PT09PT09PT09PT1cXHJcXG5cXHJcXG4nLCBhZGRyZXNzLCBwcnZLZXksIHB1YktleSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQkxPQ0tDSEFJTl9ORVRXT1JLLCBIRFdhbGxldCB9O1xuIl0sIm1hcHBpbmdzIjoiOGtDQVFLLENBQUFBLGtCQUFrQixDQUFBQyxPQUFBLENBQUFELGtCQUFBLHVCQUFsQkEsQ0FBa0IsUUFBbEIsQ0FBQUEsQ0FBa0IsQ0FBQUUsT0FBQSxXQUFsQkYsQ0FBa0IsQ0FBQUcsZUFBQSxrQkFBbEJILENBQWtCLENBQUFJLFFBQUEsWUFBbEJKLENBQWtCLENBQUFLLFFBQUEsWUFBbEJMLENBQWtCLENBQUFNLE1BQUEsVUFBbEJOLENBQWtCLENBQUFPLElBQUEsUUFBbEJQLENBQWtCLEVBQWxCQSxrQkFBa0IsTUFTdkIs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QUFPLENBQVBBLENBQU8sQ0FBRUssU0FBUyxDQUFUQSxDQUFTLENBQUVJLFVBQVUsQ0FBVkEsQ0FBVyxDQUFDLENBR25DLENBQUVULE9BQU8sQ0FBUEEsQ0FBTyxDQUFFSyxTQUFTLENBQVRBLENBQVUsQ0FDN0IsQ0FDRCxDQUNELENBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ1NaLG9CQUFvQkEsQ0FBQ2lDLENBQTRCLENBQUU1QyxDQUFZLENBQWtCLENBQ3hGLEdBQUksQ0FBQTZDLENBQTJCLENBQUdELENBQVksQ0FDOUMsS0FBTSxDQUFBRSxDQUFrQixDQUFHOUMsQ0FBSSxDQUFDK0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUUxQyxJQUFLLEdBQUksQ0FBQUMsQ0FBQyxDQUFHLENBQUMsQ0FBRUEsQ0FBQyxDQUFHRixDQUFRLENBQUNHLE1BQU0sQ0FBRUQsQ0FBQyxFQUFFLENBQUUsTUFDbkMsQ0FBQUUsQ0FBVyxDQUFHSixDQUFRLENBQUNFLENBQUMsQ0FBQyxDQUN6Qi9DLENBQWEsQ0FBR2tELFFBQVEsQ0FBQ0QsQ0FBRyxDQUFDLENBRW5DLEdBQUlFLEtBQUssQ0FBQ25ELENBQUssQ0FBQyxDQUNmLFNBR0QsS0FBTSxDQUFBb0QsQ0FBaUIsQ0FBMkIsR0FBRyxHQUEzQkgsQ0FBRyxDQUFDQSxDQUFHLENBQUNELE1BQU0sQ0FBRyxDQUFDLENBQVMsQ0FHcERKLENBQVcsQ0FEUlEsQ0FBUSxDQUNHUixDQUFXLENBQUNTLGNBQWMsQ0FBQ3JELENBQUssQ0FBQyxDQUVqQzRDLENBQVcsQ0FBQzVCLE1BQU0sQ0FBQ2hCLENBQUssQ0FFeEMsQ0FFQSxNQUFPLENBQUE0QyxDQUFXLENBQ25CLENBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNTTixpQkFBaUJBLENBQUNyQixDQUFlLENBQVUsQ0FDbEQsTUFBTyxHQUFBcUMsY0FBSyxFQUFDLDREQUE0RCxDQUFDLENBQUNDLE1BQU0sQ0FDaEYsR0FBQUQsY0FBSyxFQUFDLDREQUE0RCxDQUFDLENBQUNFLE1BQU0sQ0FBQ3ZDLENBQU8sQ0FDbkYsQ0FBQyxDQUNGLENBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ1NPLFdBQVdBLENBQUNQLENBQWUsQ0FBRXdDLENBQWMsQ0FBRUMsQ0FBYyxDQUFRLENBQzFFeEQsT0FBTyxDQUFDcEIsR0FBRyxDQUFDLDBGQUEwRixDQUFFbUMsQ0FBTyxDQUFFd0MsQ0FBTSxDQUFFQyxDQUFNLENBQ2hJLENBQ0QsQ0FBQ3hGLE9BQUEsQ0FBQU8sUUFBQSxDQUFBQSxRQUFBIiwiaWdub3JlTGlzdCI6W119
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@samyan/hd-wallet",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"vitest": "^4.1.2"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
+
"@babel/runtime": "^7.29.2",
|
|
34
35
|
"@ethereumjs/util": "^10.1.1",
|
|
35
36
|
"base-x": "^5.0.1",
|
|
36
37
|
"bip32": "^5.0.1",
|
package/test/hd-wallet.test.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import HDWallet from '../src/index';
|
|
2
|
+
import { BLOCKCHAIN_NETWORK, HDWallet } from '../src/index';
|
|
3
3
|
|
|
4
4
|
const MNEMONIC = 'test test test test test test test test test test test junk';
|
|
5
5
|
|
|
6
6
|
describe('HDWallet', () => {
|
|
7
7
|
describe('Ethereum', () => {
|
|
8
8
|
it('deriva siempre la misma direccion (determinismo)', () => {
|
|
9
|
-
const wallet1 = new HDWallet(
|
|
9
|
+
const wallet1 = new HDWallet(BLOCKCHAIN_NETWORK.ETHEREUM, MNEMONIC);
|
|
10
10
|
|
|
11
11
|
const result1 = wallet1.generate("44'/60'/0'/0", 0);
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@ describe('HDWallet', () => {
|
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
it('genera direccion valida (formato 0x)', () => {
|
|
17
|
-
const wallet = new HDWallet(
|
|
17
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.ETHEREUM, MNEMONIC);
|
|
18
18
|
|
|
19
19
|
const { address } = wallet.generate("44'/60'/0'/0", 0);
|
|
20
20
|
|
|
@@ -23,7 +23,7 @@ describe('HDWallet', () => {
|
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
it('incluye privateKey cuando includePrivateKey=true', () => {
|
|
26
|
-
const wallet = new HDWallet(
|
|
26
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.ETHEREUM, MNEMONIC, true, true);
|
|
27
27
|
|
|
28
28
|
const result = wallet.generate("44'/60'/0'/0", 0);
|
|
29
29
|
|
|
@@ -32,7 +32,7 @@ describe('HDWallet', () => {
|
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
it('genera publicKey válida', () => {
|
|
35
|
-
const wallet = new HDWallet(
|
|
35
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.ETHEREUM, MNEMONIC);
|
|
36
36
|
|
|
37
37
|
const { publicKey } = wallet.generate("44'/60'/0'/0", 0);
|
|
38
38
|
|
|
@@ -42,7 +42,7 @@ describe('HDWallet', () => {
|
|
|
42
42
|
|
|
43
43
|
describe('Bitcoin (SegWit)', () => {
|
|
44
44
|
it('genera direccion bech32 valida', () => {
|
|
45
|
-
const wallet = new HDWallet(
|
|
45
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.BITCOIN, MNEMONIC);
|
|
46
46
|
|
|
47
47
|
const { address } = wallet.generate("84'/0'/0'/0", 0);
|
|
48
48
|
|
|
@@ -50,7 +50,7 @@ describe('HDWallet', () => {
|
|
|
50
50
|
});
|
|
51
51
|
|
|
52
52
|
it('determinismo bitcoin', () => {
|
|
53
|
-
const wallet = new HDWallet(
|
|
53
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.BITCOIN, MNEMONIC);
|
|
54
54
|
|
|
55
55
|
const a = wallet.generate("84'/0'/0'/0", 0);
|
|
56
56
|
const b = wallet.generate("84'/0'/0'/0", 0);
|
|
@@ -61,7 +61,7 @@ describe('HDWallet', () => {
|
|
|
61
61
|
|
|
62
62
|
describe('Litecoin', () => {
|
|
63
63
|
it('genera direccion valida', () => {
|
|
64
|
-
const wallet = new HDWallet(
|
|
64
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.LITECOIN, MNEMONIC);
|
|
65
65
|
|
|
66
66
|
const { address } = wallet.generate("84'/2'/0'/0", 0);
|
|
67
67
|
|
|
@@ -72,7 +72,7 @@ describe('HDWallet', () => {
|
|
|
72
72
|
|
|
73
73
|
describe('Tron', () => {
|
|
74
74
|
it('genera direccion valida (Base58 tron)', () => {
|
|
75
|
-
const wallet = new HDWallet(
|
|
75
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.TRON, MNEMONIC);
|
|
76
76
|
|
|
77
77
|
const { address } = wallet.generate("44'/195'/0'/0", 0);
|
|
78
78
|
|
|
@@ -80,7 +80,7 @@ describe('HDWallet', () => {
|
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
it('deriva siempre la misma direccion (determinismo)', () => {
|
|
83
|
-
const wallet1 = new HDWallet(
|
|
83
|
+
const wallet1 = new HDWallet(BLOCKCHAIN_NETWORK.TRON, MNEMONIC);
|
|
84
84
|
|
|
85
85
|
const result1 = wallet1.generate("44'/195'/0'/0", 0);
|
|
86
86
|
|
|
@@ -90,7 +90,7 @@ describe('HDWallet', () => {
|
|
|
90
90
|
|
|
91
91
|
describe('Ripple', () => {
|
|
92
92
|
it('genera direccion ripple valida', () => {
|
|
93
|
-
const wallet = new HDWallet(
|
|
93
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.RIPPLE, MNEMONIC);
|
|
94
94
|
|
|
95
95
|
const { address } = wallet.generate("44'/144'/0'/0", 0);
|
|
96
96
|
|
|
@@ -100,7 +100,7 @@ describe('HDWallet', () => {
|
|
|
100
100
|
|
|
101
101
|
describe('Edge cases', () => {
|
|
102
102
|
it('indices distintos generan direcciones distintas', () => {
|
|
103
|
-
const wallet = new HDWallet(
|
|
103
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.ETHEREUM, MNEMONIC);
|
|
104
104
|
|
|
105
105
|
const a = wallet.generate("44'/60'/0'/0", 0);
|
|
106
106
|
const b = wallet.generate("44'/60'/0'/0", 1);
|
|
@@ -109,7 +109,7 @@ describe('HDWallet', () => {
|
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
it('paths distintos generan direcciones distintas', () => {
|
|
112
|
-
const wallet = new HDWallet(
|
|
112
|
+
const wallet = new HDWallet(BLOCKCHAIN_NETWORK.ETHEREUM, MNEMONIC);
|
|
113
113
|
|
|
114
114
|
const a = wallet.generate("44'/60'/0'/0", 0);
|
|
115
115
|
const b = wallet.generate("44'/60'/1'/0", 0);
|