Skip to content

SpringRole/springwallet

Repository files navigation

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

About

Wallet for SpringRole users

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published