123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Wallet = void 0;
- const index_js_1 = require("../crypto/index.js");
- const index_js_2 = require("../utils/index.js");
- const base_wallet_js_1 = require("./base-wallet.js");
- const hdwallet_js_1 = require("./hdwallet.js");
- const json_crowdsale_js_1 = require("./json-crowdsale.js");
- const json_keystore_js_1 = require("./json-keystore.js");
- const mnemonic_js_1 = require("./mnemonic.js");
- function stall(duration) {
- return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });
- }
- /**
- * A **Wallet** manages a single private key which is used to sign
- * transactions, messages and other common payloads.
- *
- * This class is generally the main entry point for developers
- * that wish to use a private key directly, as it can create
- * instances from a large variety of common sources, including
- * raw private key, [[link-bip-39]] mnemonics and encrypte JSON
- * wallets.
- */
- class Wallet extends base_wallet_js_1.BaseWallet {
- /**
- * Create a new wallet for the private %%key%%, optionally connected
- * to %%provider%%.
- */
- constructor(key, provider) {
- if (typeof (key) === "string" && !key.startsWith("0x")) {
- key = "0x" + key;
- }
- let signingKey = (typeof (key) === "string") ? new index_js_1.SigningKey(key) : key;
- super(signingKey, provider);
- }
- connect(provider) {
- return new Wallet(this.signingKey, provider);
- }
- /**
- * Resolves to a [JSON Keystore Wallet](json-wallets) encrypted with
- * %%password%%.
- *
- * If %%progressCallback%% is specified, it will receive periodic
- * updates as the encryption process progreses.
- */
- async encrypt(password, progressCallback) {
- const account = { address: this.address, privateKey: this.privateKey };
- return await (0, json_keystore_js_1.encryptKeystoreJson)(account, password, { progressCallback });
- }
- /**
- * Returns a [JSON Keystore Wallet](json-wallets) encryped with
- * %%password%%.
- *
- * It is preferred to use the [async version](encrypt) instead,
- * which allows a [[ProgressCallback]] to keep the user informed.
- *
- * This method will block the event loop (freezing all UI) until
- * it is complete, which may be a non-trivial duration.
- */
- encryptSync(password) {
- const account = { address: this.address, privateKey: this.privateKey };
- return (0, json_keystore_js_1.encryptKeystoreJsonSync)(account, password);
- }
- static #fromAccount(account) {
- (0, index_js_2.assertArgument)(account, "invalid JSON wallet", "json", "[ REDACTED ]");
- if ("mnemonic" in account && account.mnemonic && account.mnemonic.locale === "en") {
- const mnemonic = mnemonic_js_1.Mnemonic.fromEntropy(account.mnemonic.entropy);
- const wallet = hdwallet_js_1.HDNodeWallet.fromMnemonic(mnemonic, account.mnemonic.path);
- if (wallet.address === account.address && wallet.privateKey === account.privateKey) {
- return wallet;
- }
- console.log("WARNING: JSON mismatch address/privateKey != mnemonic; fallback onto private key");
- }
- const wallet = new Wallet(account.privateKey);
- (0, index_js_2.assertArgument)(wallet.address === account.address, "address/privateKey mismatch", "json", "[ REDACTED ]");
- return wallet;
- }
- /**
- * Creates (asynchronously) a **Wallet** by decrypting the %%json%%
- * with %%password%%.
- *
- * If %%progress%% is provided, it is called periodically during
- * decryption so that any UI can be updated.
- */
- static async fromEncryptedJson(json, password, progress) {
- let account = null;
- if ((0, json_keystore_js_1.isKeystoreJson)(json)) {
- account = await (0, json_keystore_js_1.decryptKeystoreJson)(json, password, progress);
- }
- else if ((0, json_crowdsale_js_1.isCrowdsaleJson)(json)) {
- if (progress) {
- progress(0);
- await stall(0);
- }
- account = (0, json_crowdsale_js_1.decryptCrowdsaleJson)(json, password);
- if (progress) {
- progress(1);
- await stall(0);
- }
- }
- return Wallet.#fromAccount(account);
- }
- /**
- * Creates a **Wallet** by decrypting the %%json%% with %%password%%.
- *
- * The [[fromEncryptedJson]] method is preferred, as this method
- * will lock up and freeze the UI during decryption, which may take
- * some time.
- */
- static fromEncryptedJsonSync(json, password) {
- let account = null;
- if ((0, json_keystore_js_1.isKeystoreJson)(json)) {
- account = (0, json_keystore_js_1.decryptKeystoreJsonSync)(json, password);
- }
- else if ((0, json_crowdsale_js_1.isCrowdsaleJson)(json)) {
- account = (0, json_crowdsale_js_1.decryptCrowdsaleJson)(json, password);
- }
- else {
- (0, index_js_2.assertArgument)(false, "invalid JSON wallet", "json", "[ REDACTED ]");
- }
- return Wallet.#fromAccount(account);
- }
- /**
- * Creates a new random [[HDNodeWallet]] using the available
- * [cryptographic random source](randomBytes).
- *
- * If there is no crytographic random source, this will throw.
- */
- static createRandom(provider) {
- const wallet = hdwallet_js_1.HDNodeWallet.createRandom();
- if (provider) {
- return wallet.connect(provider);
- }
- return wallet;
- }
- /**
- * Creates a [[HDNodeWallet]] for %%phrase%%.
- */
- static fromPhrase(phrase, provider) {
- const wallet = hdwallet_js_1.HDNodeWallet.fromPhrase(phrase);
- if (provider) {
- return wallet.connect(provider);
- }
- return wallet;
- }
- }
- exports.Wallet = Wallet;
- //# sourceMappingURL=wallet.js.map
|