Skip to content

Latest commit

 

History

History
101 lines (77 loc) · 3.3 KB

README.md

File metadata and controls

101 lines (77 loc) · 3.3 KB

SpringWallet

About

SpringWallet - A simple wallet for flexible identity management for your frontend application

Basic Usage

  1. Install springwallet with npm.

    npm install @springrole/springwallet --save or yarn add @springrole/springwallet

  2. Import springwallet into your project.

    import { SpringWallet } from '@springrole/springwallet';
  3. Generate 12 words random mnemonic

    const mnemonic = SpringWallet.generateMnemonic();
  4. Create a new wallet using plain text mnemonic and encrypt it with password

    async function createWallet(plainTextMnemonic, password) {
        const encryptedMnemonic = await SpringWallet.encryptMnemonic(plainTextMnemonic, password); // encrypting mnemonic
        const wallet = await SpringWallet.initializeWalletFromMnemonic(plainTextMnemonic); // initializing wallet 
        const address = wallet.getChecksumAddressString(); // wallet address
        const key = wallet.getPrivateKey().toString('hex'); // private key
        await SpringWallet.setWalletSession(address, encryptedMnemonic); // saving wallet session in localStorage
        sessionStorage.setItem('wallet-session', key); // persist wallet private key in sessionStorage
        return true;
    }

    Note: encrypted mnemonic and address of the wallet will be store in localStorage at key 'wallet-session'

  5. Fetch wallet's address and encrypted mnemonic

    const { address, encryptedMnemonic } = SpringWallet.getWalletSession();
  6. Decrypt encryptedMnemonic and unlock wallet

    async function unlockWallet(encryptedMnemonic, password) {
      let plainTextMnemonic;
      try {
        plainTextMnemonic = await SpringWallet.decryptMnemonic(encryptedMnemonic, password);
      } catch {
        return false;
      }
      return SpringWallet.unlockWallet(plainTextMnemonic);
    }
  7. Use SpringWallet provider with web3.js

    const springwallet = new SpringWallet({
        rpcUrl: "http://localhost:8545",
        chainId: "1337"
      });
    
    const web3 = new Web3(springwallet.provider);
    return web3;

    NOTE SpringWallet needs to be unlocked before performing any web3 actions, like getAccounts(), getBalance()

Advance Usage

  1. Change SpringWallet password

    async function changeWalletPassword(address, encryptedMnemonic, oldPassword, newPassword) {
      const mnemonicPhrase = await SpringWallet.decryptMnemonic(encryptedMnemonic, oldPassword);
      const newEncryptedMnemonic = await SpringWallet.encryptMnemonic(mnemonicPhrase, newPassword);
      return true;
    }

    NOTE This will decrypt mnemonic with old password and reencrypts it using new password which will create new encrypted mnemonic

  2. Reset SpringWallet password, needs the plaintext mnemonic

    async function resetWalletPassword(plainTextMnemonic, newPassword) {
      const newEncryptedMnemonic = await SpringWallet.encryptMnemonic(plainTextMnemonic, newPassword);
      const wallet = await SpringWallet.initializeWalletFromMnemonic(plainTextMnemonic);
      const walletAddress = wallet.getChecksumAddressString();
      return true;
    }

Contributing

TODO