jcc_wallet 3.0.2 → 4.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/dist/jcc-wallet.min.js +24 -45
- package/lib/{constant/index.js → constant.js} +8 -8
- package/lib/constant.js.map +1 -0
- package/lib/hd/constant.js +4 -4
- package/lib/hd/constant.js.map +1 -1
- package/lib/hd/eos.plugin.js +36 -39
- package/lib/hd/eos.plugin.js.map +1 -1
- package/lib/hd/ethereum.plugin.d.ts +1 -0
- package/lib/hd/ethereum.plugin.js +86 -67
- package/lib/hd/ethereum.plugin.js.map +1 -1
- package/lib/hd/index.d.ts +1 -1
- package/lib/hd/index.js +167 -179
- package/lib/hd/index.js.map +1 -1
- package/lib/hd/plugins.d.ts +9 -0
- package/lib/hd/plugins.js +26 -22
- package/lib/hd/plugins.js.map +1 -1
- package/lib/hd/swtc.plugin.d.ts +1 -5
- package/lib/hd/swtc.plugin.js +74 -60
- package/lib/hd/swtc.plugin.js.map +1 -1
- package/lib/hd/tron.plugin.js +28 -33
- package/lib/hd/tron.plugin.js.map +1 -1
- package/lib/index.d.ts +3 -4
- package/lib/index.js +5 -8
- package/lib/index.js.map +1 -1
- package/lib/{jingchangWallet/index.d.ts → jingchangWallet.d.ts} +1 -1
- package/lib/jingchangWallet.js +531 -0
- package/lib/jingchangWallet.js.map +1 -0
- package/lib/minify-ethereumjs-util/account.d.ts +1 -0
- package/lib/minify-ethereumjs-util/account.js +22 -0
- package/lib/minify-ethereumjs-util/account.js.map +1 -0
- package/lib/minify-ethereumjs-util/bytes.d.ts +7 -0
- package/lib/minify-ethereumjs-util/bytes.js +100 -0
- package/lib/minify-ethereumjs-util/bytes.js.map +1 -0
- package/lib/minify-ethereumjs-util/constants.d.ts +4 -0
- package/lib/minify-ethereumjs-util/constants.js +9 -0
- package/lib/minify-ethereumjs-util/constants.js.map +1 -0
- package/lib/minify-ethereumjs-util/helper.d.ts +5 -0
- package/lib/minify-ethereumjs-util/helper.js +16 -0
- package/lib/minify-ethereumjs-util/helper.js.map +1 -0
- package/lib/minify-ethereumjs-util/internal.d.ts +8 -0
- package/lib/minify-ethereumjs-util/internal.js +33 -0
- package/lib/minify-ethereumjs-util/internal.js.map +1 -0
- package/lib/minify-ethereumjs-util/signature.d.ts +13 -0
- package/lib/minify-ethereumjs-util/signature.js +45 -0
- package/lib/minify-ethereumjs-util/signature.js.map +1 -0
- package/lib/minify-swtc-keypair/address-codec.d.ts +16 -0
- package/lib/minify-swtc-keypair/address-codec.js +166 -0
- package/lib/minify-swtc-keypair/address-codec.js.map +1 -0
- package/lib/minify-swtc-keypair/index.d.ts +25 -0
- package/lib/minify-swtc-keypair/index.js +178 -0
- package/lib/minify-swtc-keypair/index.js.map +1 -0
- package/lib/minify-swtc-keypair/sha512.d.ts +9 -0
- package/lib/minify-swtc-keypair/sha512.js +33 -0
- package/lib/minify-swtc-keypair/sha512.js.map +1 -0
- package/lib/minify-swtc-keypair/utils.d.ts +13 -0
- package/lib/minify-swtc-keypair/utils.js +63 -0
- package/lib/minify-swtc-keypair/utils.js.map +1 -0
- package/lib/minify-tron/address.d.ts +6 -0
- package/lib/minify-tron/address.js +11 -0
- package/lib/minify-tron/address.js.map +1 -0
- package/lib/minify-tron/base58.d.ts +2 -0
- package/lib/minify-tron/base58.js +67 -0
- package/lib/minify-tron/base58.js.map +1 -0
- package/lib/minify-tron/bytes.d.ts +2 -0
- package/lib/minify-tron/bytes.js +23 -0
- package/lib/minify-tron/bytes.js.map +1 -0
- package/lib/minify-tron/code.d.ts +3 -0
- package/lib/minify-tron/code.js +56 -0
- package/lib/minify-tron/code.js.map +1 -0
- package/lib/minify-tron/crypto.d.ts +7 -0
- package/lib/minify-tron/crypto.js +83 -0
- package/lib/minify-tron/crypto.js.map +1 -0
- package/lib/minify-tron/message.d.ts +4 -0
- package/lib/minify-tron/message.js +42 -0
- package/lib/minify-tron/message.js.map +1 -0
- package/lib/{types/index.d.ts → types.d.ts} +16 -3
- package/lib/types.js +16 -0
- package/lib/types.js.map +1 -0
- package/lib/util/index.js +40 -30
- package/lib/util/index.js.map +1 -1
- package/package.json +21 -16
- package/lib/constant/index.js.map +0 -1
- package/lib/eth/index.d.ts +0 -37
- package/lib/eth/index.js +0 -98
- package/lib/eth/index.js.map +0 -1
- package/lib/jingchangWallet/index.js +0 -713
- package/lib/jingchangWallet/index.js.map +0 -1
- package/lib/moac/index.d.ts +0 -29
- package/lib/moac/index.js +0 -58
- package/lib/moac/index.js.map +0 -1
- package/lib/types/index.js +0 -3
- package/lib/types/index.js.map +0 -1
- package/lib/x-wallet/index.d.ts +0 -22
- package/lib/x-wallet/index.js +0 -86
- package/lib/x-wallet/index.js.map +0 -1
- /package/lib/{constant/index.d.ts → constant.d.ts} +0 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const clone_deep_1 = __importDefault(require("clone-deep"));
|
|
8
|
+
const sha256_1 = require("@noble/hashes/sha256");
|
|
9
|
+
const eccrypto_1 = __importDefault(require("eccrypto"));
|
|
10
|
+
const jcc_common_1 = require("jcc_common");
|
|
11
|
+
const lockr_1 = __importDefault(require("lockr"));
|
|
12
|
+
const minify_swtc_keypair_1 = require("./minify-swtc-keypair");
|
|
13
|
+
const constant_1 = require("./constant");
|
|
14
|
+
const plugins_1 = require("./hd/plugins");
|
|
15
|
+
const util_1 = require("./util");
|
|
16
|
+
const types_1 = require("./types");
|
|
17
|
+
lockr_1.default.prefix = "jingchang_";
|
|
18
|
+
/**
|
|
19
|
+
* api of jingchang wallet
|
|
20
|
+
*
|
|
21
|
+
* @export
|
|
22
|
+
* @class JingchangWallet
|
|
23
|
+
*/
|
|
24
|
+
class JingchangWallet {
|
|
25
|
+
/**
|
|
26
|
+
* Creates an instance of JingchangWallet.
|
|
27
|
+
* @param {IJingchangWalletModel} wallet
|
|
28
|
+
* @param {boolean} [multiple=false] if the value is true, support save multiple wallet keystore for each type, otherwise only support one.
|
|
29
|
+
* @param {boolean} [samePassword=true] if the value is true, use the default swt keystore's password which be generated
|
|
30
|
+
* in the beginning as password for other type.
|
|
31
|
+
* @memberof JingchangWallet
|
|
32
|
+
*/
|
|
33
|
+
constructor(wallet, multiple = false, samePassword = true) {
|
|
34
|
+
this._multiple = multiple;
|
|
35
|
+
this._jingchangWallet = wallet;
|
|
36
|
+
this._samePassword = samePassword;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* check jingchang wallet is valid or not
|
|
40
|
+
*
|
|
41
|
+
* @static
|
|
42
|
+
* @param {*} wallet
|
|
43
|
+
* @returns {boolean} return true if valid.
|
|
44
|
+
* @memberof JingchangWallet
|
|
45
|
+
*/
|
|
46
|
+
static isValid(wallet) {
|
|
47
|
+
try {
|
|
48
|
+
if (typeof wallet === "string") {
|
|
49
|
+
wallet = JSON.parse(wallet);
|
|
50
|
+
}
|
|
51
|
+
const walletsNotEmpty = !(0, jcc_common_1.isEmptyObject)(wallet) && Array.isArray(wallet.wallets) && wallet.wallets.length > 0;
|
|
52
|
+
return Boolean(walletsNotEmpty && wallet.contact && wallet.id && wallet.version);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* create a jingchang wallet
|
|
60
|
+
*
|
|
61
|
+
* @static
|
|
62
|
+
* @param {string} password password for keystore
|
|
63
|
+
* @param {string} [secret] swtc chain's secret
|
|
64
|
+
* @param {string} [alias] wallet name
|
|
65
|
+
* @returns {Promise<IJingchangWalletModel>} resolve jingchang wallet if success.
|
|
66
|
+
* @memberof JingchangWallet
|
|
67
|
+
*/
|
|
68
|
+
static generate(password, secret, alias) {
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
const keypairs = {};
|
|
71
|
+
if (secret === undefined) {
|
|
72
|
+
const wallet = plugins_1.jtWallet.createWallet();
|
|
73
|
+
secret = wallet.secret;
|
|
74
|
+
keypairs.address = wallet.address;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
if (!plugins_1.jtWallet.isValidSecret(secret)) {
|
|
78
|
+
return reject(new Error(constant_1.SECRET_IS_INVALID));
|
|
79
|
+
}
|
|
80
|
+
keypairs.address = plugins_1.jtWallet.getAddress(secret);
|
|
81
|
+
}
|
|
82
|
+
keypairs.secret = secret;
|
|
83
|
+
keypairs.type = "swt";
|
|
84
|
+
keypairs.default = true;
|
|
85
|
+
keypairs.alias = alias || "swt wallet";
|
|
86
|
+
const jcWallet = {};
|
|
87
|
+
const walletObj = (0, util_1.encryptWallet)(password, keypairs);
|
|
88
|
+
jcWallet.version = JingchangWallet.version;
|
|
89
|
+
jcWallet.id = JingchangWallet._walletID;
|
|
90
|
+
jcWallet.contact = {};
|
|
91
|
+
jcWallet.wallets = [];
|
|
92
|
+
jcWallet.wallets.push(walletObj);
|
|
93
|
+
return resolve(jcWallet);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* get jingchang wallet from local storage
|
|
98
|
+
*
|
|
99
|
+
* @static
|
|
100
|
+
* @returns {(IJingchangWalletModel | null)} return jingchang wallet or null
|
|
101
|
+
* @memberof JingchangWallet
|
|
102
|
+
*/
|
|
103
|
+
static get() {
|
|
104
|
+
const jcWallet = lockr_1.default.get(JingchangWallet._walletID);
|
|
105
|
+
if (!JingchangWallet.isValid(jcWallet)) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
return jcWallet;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* clear jingchang wallet from local storage
|
|
112
|
+
*
|
|
113
|
+
* @static
|
|
114
|
+
* @memberof JingchangWallet
|
|
115
|
+
*/
|
|
116
|
+
static clear() {
|
|
117
|
+
lockr_1.default.set(JingchangWallet._walletID, {});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* save jingchang wallet to local storage.
|
|
121
|
+
*
|
|
122
|
+
* @static
|
|
123
|
+
* @param {IJingchangWalletModel} wallet
|
|
124
|
+
* @memberof JingchangWallet
|
|
125
|
+
*/
|
|
126
|
+
static save(wallet) {
|
|
127
|
+
lockr_1.default.set(JingchangWallet._walletID, wallet);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* derive key pair with secret
|
|
131
|
+
*
|
|
132
|
+
* @static
|
|
133
|
+
* @param {string} secret
|
|
134
|
+
* @param {string} [chain="swt"]
|
|
135
|
+
* @returns {IKeyPair} for privateKey, it's length should be 64 when call `decryptWithPrivateKey`, but the origin derived
|
|
136
|
+
* privateKey's length is 66 that contains prefix `00` for `secp256k1` or `ED` for `ed25519`, so removed it.
|
|
137
|
+
* @memberof JingchangWallet
|
|
138
|
+
*/
|
|
139
|
+
static deriveKeyPair(secret, chain = "swt") {
|
|
140
|
+
const alphabet = types_1.Alphabet[chain === null || chain === void 0 ? void 0 : chain.toUpperCase()];
|
|
141
|
+
const keyPair = (0, minify_swtc_keypair_1.Factory)(alphabet);
|
|
142
|
+
const pair = keyPair.deriveKeyPair(secret);
|
|
143
|
+
return {
|
|
144
|
+
privateKey: pair.privateKey.substring(2),
|
|
145
|
+
publicKey: pair.publicKey
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* encrypt data with public key
|
|
150
|
+
*
|
|
151
|
+
* @static
|
|
152
|
+
* @param {string} message
|
|
153
|
+
* @param {string} publicKey
|
|
154
|
+
* @returns {Promise<IEncrypt>}
|
|
155
|
+
* @memberof JingchangWallet
|
|
156
|
+
*/
|
|
157
|
+
static async encryptWithPublicKey(message, publicKey) {
|
|
158
|
+
const encode = await eccrypto_1.default.encrypt(Buffer.from(publicKey, "hex"), Buffer.from(message));
|
|
159
|
+
return {
|
|
160
|
+
ciphertext: encode.ciphertext.toString("hex"),
|
|
161
|
+
ephemPublicKey: encode.ephemPublicKey.toString("hex"),
|
|
162
|
+
iv: encode.iv.toString("hex"),
|
|
163
|
+
mac: encode.mac.toString("hex")
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* decrypt data with private key
|
|
168
|
+
*
|
|
169
|
+
* @static
|
|
170
|
+
* @param {IEncrypt} message
|
|
171
|
+
* @param {string} privateKey the privateKey's length should be 64
|
|
172
|
+
* @returns {Promise<string>}
|
|
173
|
+
* @memberof JingchangWallet
|
|
174
|
+
*/
|
|
175
|
+
static async decryptWithPrivateKey(message, privateKey) {
|
|
176
|
+
const encode = {
|
|
177
|
+
ciphertext: Buffer.from(message.ciphertext, "hex"),
|
|
178
|
+
ephemPublicKey: Buffer.from(message.ephemPublicKey, "hex"),
|
|
179
|
+
iv: Buffer.from(message.iv, "hex"),
|
|
180
|
+
mac: Buffer.from(message.mac, "hex")
|
|
181
|
+
};
|
|
182
|
+
const decode = await eccrypto_1.default.decrypt(Buffer.from(privateKey, "hex"), encode);
|
|
183
|
+
return decode.toString();
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* get wallets from jingchang wallet
|
|
187
|
+
*
|
|
188
|
+
* @static
|
|
189
|
+
* @param {IJingchangWalletModel} jcWallet
|
|
190
|
+
* @returns {Array<IKeystoreModel>} return wallets if valid, otherwise return empty array.
|
|
191
|
+
* @memberof JingchangWallet
|
|
192
|
+
*/
|
|
193
|
+
static getWallets(keystore) {
|
|
194
|
+
let wallets;
|
|
195
|
+
if (JingchangWallet.isValid(keystore)) {
|
|
196
|
+
wallets = keystore.wallets;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
wallets = [];
|
|
200
|
+
}
|
|
201
|
+
return wallets;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* set property of _jingchangWallet
|
|
205
|
+
*
|
|
206
|
+
* @param {IJingchangWalletModel} wallet
|
|
207
|
+
* @memberof JingchangWallet
|
|
208
|
+
*/
|
|
209
|
+
setJingchangWallet(wallet) {
|
|
210
|
+
this._jingchangWallet = wallet;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* get default wallet's keystore address for each type
|
|
214
|
+
*
|
|
215
|
+
* @param {string} [type="swt"]
|
|
216
|
+
* @returns {Promise<string>} resolve address if success
|
|
217
|
+
* @memberof JingchangWallet
|
|
218
|
+
*/
|
|
219
|
+
async getAddress(type = "swt") {
|
|
220
|
+
const wallet = await this.getWalletWithType(type);
|
|
221
|
+
return wallet.address;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* get default wallet keystore with type
|
|
225
|
+
*
|
|
226
|
+
* @param {string} [type="swt"]
|
|
227
|
+
* @returns {Promise<IKeystoreModel>} resolve default wallet keystore if success.
|
|
228
|
+
* @memberof JingchangWallet
|
|
229
|
+
*/
|
|
230
|
+
async getWalletWithType(type = "swt") {
|
|
231
|
+
const wallet = this.findWallet((w) => w.type.toLowerCase() === type.toLowerCase() && w.default);
|
|
232
|
+
return wallet;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* get wallet keystore with address
|
|
236
|
+
*
|
|
237
|
+
* @param {string} address
|
|
238
|
+
* @returns {Promise<IKeystoreModel>} resolve wallet keystore if success.
|
|
239
|
+
* @memberof JingchangWallet
|
|
240
|
+
*/
|
|
241
|
+
async getWalletWithAddress(address) {
|
|
242
|
+
const wallet = await this.findWallet((w) => w.address === address);
|
|
243
|
+
return wallet;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* check if has default wallet for each type
|
|
247
|
+
*
|
|
248
|
+
* @param {string} [type="swt"]
|
|
249
|
+
* @returns {boolean} return true if has default
|
|
250
|
+
* @memberof JingchangWallet
|
|
251
|
+
*/
|
|
252
|
+
hasDefault(type = "swt") {
|
|
253
|
+
try {
|
|
254
|
+
const wallet = this.findWallet((w) => w.type === type && w.default);
|
|
255
|
+
return !(0, jcc_common_1.isEmptyObject)(wallet);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* get the default wallet keystore's secret with type.
|
|
263
|
+
*
|
|
264
|
+
* @param {string} password
|
|
265
|
+
* @param {string} [type="swt"]
|
|
266
|
+
* @returns {Promise<string>}
|
|
267
|
+
* @memberof JingchangWallet
|
|
268
|
+
*/
|
|
269
|
+
async getSecretWithType(password, type = "swt") {
|
|
270
|
+
const wallet = await this.findWallet((w) => w.type === type && w.default);
|
|
271
|
+
const secret = (0, util_1.decrypt)(password, wallet);
|
|
272
|
+
return secret;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* get the wallet keystore's secret with address.
|
|
276
|
+
*
|
|
277
|
+
* @param {string} password
|
|
278
|
+
* @param {string} address
|
|
279
|
+
* @returns {Promise<string>}
|
|
280
|
+
* @memberof JingchangWallet resolve secret if success.
|
|
281
|
+
*/
|
|
282
|
+
async getSecretWithAddress(password, address) {
|
|
283
|
+
const wallet = await this.findWallet((w) => w.address === address);
|
|
284
|
+
const secret = (0, util_1.decrypt)(password, wallet);
|
|
285
|
+
return secret;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* change the whole jingchang wallet password, if you set property of _samePassword is false, will throw an error
|
|
289
|
+
*
|
|
290
|
+
* @param {string} oldPassword
|
|
291
|
+
* @param {string} newPassword
|
|
292
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
293
|
+
* @memberof JingchangWallet
|
|
294
|
+
*/
|
|
295
|
+
async changeWholePassword(oldPassword, newPassword) {
|
|
296
|
+
if (!this._samePassword) {
|
|
297
|
+
throw new Error("the property of _samePassword is false, so please don't call this function!");
|
|
298
|
+
}
|
|
299
|
+
const jcWallet = (0, clone_deep_1.default)(this._jingchangWallet);
|
|
300
|
+
assert_1.default.notEqual(jcWallet, this._jingchangWallet);
|
|
301
|
+
const wallets = JingchangWallet.getWallets(jcWallet);
|
|
302
|
+
const arr = [];
|
|
303
|
+
for (const wallet of wallets) {
|
|
304
|
+
const address = wallet.address;
|
|
305
|
+
const secret = await this.getSecretWithAddress(oldPassword, address);
|
|
306
|
+
const keypairs = {
|
|
307
|
+
address: wallet.address,
|
|
308
|
+
alias: wallet.alias,
|
|
309
|
+
default: wallet.default,
|
|
310
|
+
secret,
|
|
311
|
+
type: wallet.type
|
|
312
|
+
};
|
|
313
|
+
const newWallet = this.getEncryptData(newPassword, keypairs);
|
|
314
|
+
arr.push(newWallet);
|
|
315
|
+
}
|
|
316
|
+
jcWallet.wallets = arr;
|
|
317
|
+
this.setJingchangWallet(jcWallet);
|
|
318
|
+
return jcWallet;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* change the keystore password with address, if you set the property of _samePassword is true, will throw an error
|
|
322
|
+
*
|
|
323
|
+
* @param {string} address
|
|
324
|
+
* @param {string} oldPassword
|
|
325
|
+
* @param {string} newPassword
|
|
326
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
327
|
+
* @memberof JingchangWallet
|
|
328
|
+
*/
|
|
329
|
+
async changePasswordWithAddress(address, oldPassword, newPassword) {
|
|
330
|
+
if (this._samePassword) {
|
|
331
|
+
throw new Error("the property of _samePassword is true, so please don't call this function!");
|
|
332
|
+
}
|
|
333
|
+
const wallet = this.findWallet((w) => w.address === address);
|
|
334
|
+
const secret = await this.getSecretWithAddress(oldPassword, address);
|
|
335
|
+
const keypairs = {
|
|
336
|
+
address: wallet.address,
|
|
337
|
+
alias: wallet.alias,
|
|
338
|
+
default: wallet.default,
|
|
339
|
+
secret,
|
|
340
|
+
type: wallet.type
|
|
341
|
+
};
|
|
342
|
+
const newWallet = this.getEncryptData(newPassword, keypairs);
|
|
343
|
+
// shadow copy
|
|
344
|
+
wallet.ciphertext = newWallet.ciphertext;
|
|
345
|
+
wallet.crypto = newWallet.crypto;
|
|
346
|
+
wallet.mac = newWallet.mac;
|
|
347
|
+
return this._jingchangWallet;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* replace keystore, if forget password
|
|
351
|
+
*
|
|
352
|
+
* @param {string} secret
|
|
353
|
+
* @param {string} password
|
|
354
|
+
* @param {(secret: string) => string} retriveSecret
|
|
355
|
+
* @returns {Promise<IJingchangWalletModel>}
|
|
356
|
+
* @memberof JingchangWallet
|
|
357
|
+
*/
|
|
358
|
+
async replaceKeystore(secret, password, retriveSecret) {
|
|
359
|
+
const address = retriveSecret(secret);
|
|
360
|
+
const wallet = this.findWallet((w) => w.address === address);
|
|
361
|
+
const keypairs = {
|
|
362
|
+
address: wallet.address,
|
|
363
|
+
alias: wallet.alias,
|
|
364
|
+
default: wallet.default,
|
|
365
|
+
secret,
|
|
366
|
+
type: wallet.type
|
|
367
|
+
};
|
|
368
|
+
const newWallet = this.getEncryptData(password, keypairs);
|
|
369
|
+
// shadow copy
|
|
370
|
+
wallet.ciphertext = newWallet.ciphertext;
|
|
371
|
+
wallet.crypto = newWallet.crypto;
|
|
372
|
+
wallet.mac = newWallet.mac;
|
|
373
|
+
return this._jingchangWallet;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* remove default wallet keystore of the given type
|
|
377
|
+
*
|
|
378
|
+
* @param {string} [type="swt"]
|
|
379
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
380
|
+
* @memberof JingchangWallet
|
|
381
|
+
*/
|
|
382
|
+
async removeWalletWithType(type = "swt") {
|
|
383
|
+
const address = await this.getAddress(type);
|
|
384
|
+
const wallet = await this.removeWalletWithAddress(address);
|
|
385
|
+
return wallet;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* remove wallet keystore of the given address
|
|
389
|
+
*
|
|
390
|
+
* @param {string} address
|
|
391
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
392
|
+
* @memberof JingchangWallet
|
|
393
|
+
*/
|
|
394
|
+
async removeWalletWithAddress(address) {
|
|
395
|
+
const jcWallet = (0, clone_deep_1.default)(this._jingchangWallet);
|
|
396
|
+
assert_1.default.notEqual(this._jingchangWallet, jcWallet);
|
|
397
|
+
const wallets = JingchangWallet.getWallets(jcWallet);
|
|
398
|
+
const wallet = this.findWallet((w) => w.address === address);
|
|
399
|
+
const index = wallets.findIndex((w) => w.address === wallet.address);
|
|
400
|
+
wallets.splice(index, 1);
|
|
401
|
+
const next = wallets.find((w) => w.type === wallet.type);
|
|
402
|
+
if (next) {
|
|
403
|
+
next.default = true;
|
|
404
|
+
}
|
|
405
|
+
this.setJingchangWallet(jcWallet);
|
|
406
|
+
return jcWallet;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* set defalut wallet keystore for each type
|
|
410
|
+
*
|
|
411
|
+
* @param {string} address
|
|
412
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
413
|
+
* @memberof JingchangWallet
|
|
414
|
+
*/
|
|
415
|
+
async setDefaultWallet(address) {
|
|
416
|
+
const wallet = await this.getWalletWithAddress(address);
|
|
417
|
+
if (wallet.default) {
|
|
418
|
+
return this._jingchangWallet;
|
|
419
|
+
}
|
|
420
|
+
const defaultWallet = await this.getWalletWithType(wallet.type);
|
|
421
|
+
defaultWallet.default = false;
|
|
422
|
+
wallet.default = true;
|
|
423
|
+
return this._jingchangWallet;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* import secret
|
|
427
|
+
*
|
|
428
|
+
* @param {string} secret
|
|
429
|
+
* @param {string} password
|
|
430
|
+
* @param {string} type
|
|
431
|
+
* @param {(secret: string) => string} retriveSecret
|
|
432
|
+
* @param {string} [alias] wallet name
|
|
433
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
434
|
+
* @memberof JingchangWallet
|
|
435
|
+
*/
|
|
436
|
+
async importSecret(secret, password, type, retriveSecret, alias) {
|
|
437
|
+
if (this._samePassword) {
|
|
438
|
+
// validate default password of swt keystore is right or not
|
|
439
|
+
await this.getSecretWithType(password);
|
|
440
|
+
}
|
|
441
|
+
const address = retriveSecret(secret);
|
|
442
|
+
if (!address) {
|
|
443
|
+
throw new Error(constant_1.SECRET_IS_INVALID);
|
|
444
|
+
}
|
|
445
|
+
const wallets = JingchangWallet.getWallets(this._jingchangWallet);
|
|
446
|
+
const wallet = wallets.find((w) => w.address === address && w.type === type);
|
|
447
|
+
if (wallet) {
|
|
448
|
+
throw new Error(constant_1.ADDRESS_IS_EXISTENT);
|
|
449
|
+
}
|
|
450
|
+
const keypairs = {
|
|
451
|
+
address,
|
|
452
|
+
alias: alias || `${type} wallet`,
|
|
453
|
+
secret,
|
|
454
|
+
type
|
|
455
|
+
};
|
|
456
|
+
const w = await this.saveWallet(password, keypairs);
|
|
457
|
+
return w;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* find wallet keystore according to filter function
|
|
461
|
+
*
|
|
462
|
+
* @protected
|
|
463
|
+
* @param {(wallet: IKeystoreModel) => boolean} filter
|
|
464
|
+
* @returns {IKeystoreModel} return wallet keystore if existent, otherwise throw `keystore is invalid` if the jingchang wallet is invalid
|
|
465
|
+
* or throw `wallet is empty` if the wallet isn't existent
|
|
466
|
+
* @memberof JingchangWallet
|
|
467
|
+
*/
|
|
468
|
+
findWallet(filter) {
|
|
469
|
+
const jingchangWallet = this._jingchangWallet;
|
|
470
|
+
if (!JingchangWallet.isValid(jingchangWallet)) {
|
|
471
|
+
throw new Error(constant_1.KEYSTORE_IS_INVALID);
|
|
472
|
+
}
|
|
473
|
+
const { wallets } = jingchangWallet;
|
|
474
|
+
const wallet = wallets.find(filter);
|
|
475
|
+
if ((0, jcc_common_1.isEmptyObject)(wallet)) {
|
|
476
|
+
throw new Error(constant_1.WALLET_IS_EMPTY);
|
|
477
|
+
}
|
|
478
|
+
return wallet;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* encrypt data
|
|
482
|
+
*
|
|
483
|
+
* @protected
|
|
484
|
+
* @param {string} password
|
|
485
|
+
* @param {IKeypairsModel} keypairs
|
|
486
|
+
* @returns {IKeystoreModel}
|
|
487
|
+
* @memberof JingchangWallet
|
|
488
|
+
*/
|
|
489
|
+
getEncryptData(password, keypairs) {
|
|
490
|
+
const encryptData = (0, util_1.encryptWallet)(password, keypairs, {});
|
|
491
|
+
return encryptData;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* save wallet keystore to jingchang wallet
|
|
495
|
+
*
|
|
496
|
+
* @private
|
|
497
|
+
* @param {string} password
|
|
498
|
+
* @param {IKeypairsModel} keypairs
|
|
499
|
+
* @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
|
|
500
|
+
* @memberof JingchangWallet
|
|
501
|
+
*/
|
|
502
|
+
async saveWallet(password, keypairs) {
|
|
503
|
+
// support type: ethereum, stream, jingtum, call and moac
|
|
504
|
+
keypairs.default = this._multiple ? !this.hasDefault(keypairs.type) : true;
|
|
505
|
+
const encryptData = this.getEncryptData(password, keypairs);
|
|
506
|
+
const jcWallet = (0, clone_deep_1.default)(this._jingchangWallet);
|
|
507
|
+
assert_1.default.notEqual(this._jingchangWallet, jcWallet);
|
|
508
|
+
const wallets = jcWallet.wallets;
|
|
509
|
+
const pre = wallets.findIndex((w) => w.type.toLowerCase() === keypairs.type.toLowerCase());
|
|
510
|
+
if (this._multiple) {
|
|
511
|
+
wallets.push(encryptData);
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
/* istanbul ignore else */
|
|
515
|
+
if (pre >= 0) {
|
|
516
|
+
wallets.splice(pre, 1);
|
|
517
|
+
}
|
|
518
|
+
wallets.push(encryptData);
|
|
519
|
+
}
|
|
520
|
+
this.setJingchangWallet(jcWallet);
|
|
521
|
+
return jcWallet;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
JingchangWallet.version = "1.0";
|
|
525
|
+
JingchangWallet._name = "wallets";
|
|
526
|
+
JingchangWallet._walletID = Buffer.from(sha256_1.sha256
|
|
527
|
+
.create()
|
|
528
|
+
.update(JingchangWallet._name.toLowerCase())
|
|
529
|
+
.digest()).toString("hex");
|
|
530
|
+
exports.default = JingchangWallet;
|
|
531
|
+
//# sourceMappingURL=jingchangWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jingchangWallet.js","sourceRoot":"","sources":["../src/jingchangWallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const pubToAddress: (pubKey: Uint8Array, sanitize?: boolean) => Uint8Array;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// forked from https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/util/src/account.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.pubToAddress = void 0;
|
|
5
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
6
|
+
const keccak_js_1 = require("ethereum-cryptography/keccak.js");
|
|
7
|
+
const helper_1 = require("./helper");
|
|
8
|
+
const pubToAddress = function (pubKey, sanitize = false) {
|
|
9
|
+
(0, helper_1.assertIsBytes)(pubKey);
|
|
10
|
+
if (sanitize && pubKey.length !== 64) {
|
|
11
|
+
pubKey = secp256k1_1.secp256k1.ProjectivePoint.fromHex(pubKey)
|
|
12
|
+
.toRawBytes(false)
|
|
13
|
+
.slice(1);
|
|
14
|
+
}
|
|
15
|
+
if (pubKey.length !== 64) {
|
|
16
|
+
throw new Error("Expected pubKey to be of length 64");
|
|
17
|
+
}
|
|
18
|
+
// Only take the lower 160bits of the hash
|
|
19
|
+
return (0, keccak_js_1.keccak256)(pubKey).subarray(-20);
|
|
20
|
+
};
|
|
21
|
+
exports.pubToAddress = pubToAddress;
|
|
22
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/minify-ethereumjs-util/account.ts"],"names":[],"mappings":";AAAA,yGAAyG;;;AAEzG,uDAAoD;AACpD,+DAA4D;AAC5D,qCAAyC;AAElC,MAAM,YAAY,GAAG,UAAS,MAAkB,EAAE,WAAoB,KAAK;IAChF,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;IACtB,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,qBAAS,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;aAC/C,UAAU,CAAC,KAAK,CAAC;aACjB,KAAK,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,0CAA0C;IAC1C,OAAO,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC;AAZW,QAAA,YAAY,gBAYvB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const zeros: (bytes: number) => Uint8Array;
|
|
2
|
+
export declare const concatBytes: (...arrays: Uint8Array[]) => Uint8Array;
|
|
3
|
+
export declare const setLengthLeft: (msg: Uint8Array, length: number) => Uint8Array;
|
|
4
|
+
export declare const setLengthRight: (msg: Uint8Array, length: number) => Uint8Array;
|
|
5
|
+
export declare const bytesToHex: (bytes: Uint8Array) => string;
|
|
6
|
+
export declare const hexToBytes: (hex: string) => Uint8Array;
|
|
7
|
+
export declare const bytesToBigInt: (bytes: Uint8Array) => bigint;
|