diff --git a/CHANGELOG.md b/CHANGELOG.md
index 93f349e..1b19fa4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
##### BEVM Keyring Implementation
-- Implemented Keyring functionality to manage accounts
+- Implemented Keyring functionality to manage accounts
- Implemented functions to add account, export accounts & import accounts
- Implemented functionality to sign a message
- Implemented functionality to get coin balance for a wallet
@@ -13,4 +13,13 @@
- Added test suite
### 1.0.1 (2024-08-2)
+
- Updated package name
+
+### 1.0.2 (2024-08-3)
+
+- Updated documentation
+
+### 1.0.3 (2024-08-20)
+
+- Update Sign transaction functionality
diff --git a/README.md b/README.md
index fb86dbc..4a2d5ec 100644
--- a/README.md
+++ b/README.md
@@ -1,113 +1,223 @@
-# vault-bevm-controller
-[![npm version](https://badge.fury.io/js/@getsafle%2Fvault-bevm-controller.svg)](https://badge.fury.io/js/@getsafle%2Fvault-bevm-controller) [![Discussions][discussions-badge]][discussions-link]
-
+# vault-bevm-controller
+
+
+
+[![npm version](https://badge.fury.io/js/@getsafle%2Fvault-bevm-controller.svg)](https://badge.fury.io/js/@getsafle%2Fvault-bevm-controller) [![Discussions][discussions-badge]][discussions-link]
+
+
+
+
A Module written in javascript for managing various keyrings of BEVM accounts, encrypting them, and using them. This repository contains `BEVMHdKeyring` class to create **BEVM wallet** from **Safle Vault**.
+
+
- [Installation](#installation)
+
- [Initialize the BEVM Controller class](#initialize-the-bevm-controller-class)
+
- [Methods](#methods)
- - [Generate Keyring with 1 account and encrypt](#generate-keyring-with-1-account-and-encrypt)
- - [Restore a keyring with the first account using a mnemonic](#restore-a-keyring-with-the-first-account-using-a-mnemonic)
- - [Add a new account to the keyring object](#add-a-new-account-to-the-keyring-object)
- - [Export the private key of an address present in the keyring](#export-the-private-key-of-an-address-present-in-the-keyring)
- - [Sign a transaction](#sign-a-transaction)
- - [Sign a message](#sign-a-message)
- - [Get balance](#get-balance)
+- [Generate Keyring with 1 account and encrypt](#generate-keyring-with-1-account-and-encrypt)
+
+- [Restore a keyring with the first account using a mnemonic](#restore-a-keyring-with-the-first-account-using-a-mnemonic)
+
+- [Add a new account to the keyring object](#add-a-new-account-to-the-keyring-object)
+
+- [Export the private key of an address present in the keyring](#export-the-private-key-of-an-address-present-in-the-keyring)
+
+- [Sign a transaction](#sign-a-transaction)
+- [Sign a message](#sign-a-message)
+
+- [Get balance](#get-balance)
+
+
+
+
## Installation
+
+
`npm install --save @getsafle/vault-bevm-controller`
+
+
## Initialize the BEVM Controller class
+
+
```
+
const { KeyringController, getBalance } = require('@getsafle/vault-bevm-controller');
+
+
const bevmController = new KeyringController({
- encryptor: {
- // An optional object for defining encryption schemes:
- // Defaults to Browser-native SubtleCrypto.
- encrypt(password, object) {
- return new Promise('encrypted!');
- },
- decrypt(password, encryptedString) {
- return new Promise({ foo: 'bar' });
- },
- },
+
+encryptor: {
+
+// An optional object for defining encryption schemes:
+
+// Defaults to Browser-native SubtleCrypto.
+
+encrypt(password, object) {
+
+return new Promise('encrypted!');
+
+},
+
+decrypt(password, encryptedString) {
+
+return new Promise({ foo: 'bar' });
+
+},
+
+},
+
});
+
```
+
+
## Methods
+
+
### Generate Keyring with 1 account and encrypt
+
+
```
+
const keyringState = await bevmController.createNewVaultAndKeychain(password);
+
```
+
+
### Restore a keyring with the first account using a mnemonic
+
+
```
+
const keyringState = await bevmController.createNewVaultAndRestore(password, mnemonic);
+
```
+
+
### Add a new account to the keyring object
+
+
```
+
const keyringState = await bevmController.addNewAccount(keyringObject);
+
```
+
+
### Export the private key of an address present in the keyring
+
+
```
+
const privateKey = await bevmController.exportAccount(address);
+
```
+
+
### Sign a transaction
+
+
```
+
const signedTx = await bevmController.signTransaction(bevmTx, _fromAddress);
+
```
+
+
### Sign a message
+
+
```
+
const signedMsg = await bevmController.signMessage(msgParams);
+
```
+
+
### Sign a message
+
+
```
+
const signedObj = await bevmController.sign(msgParams, pvtKey, web3Obj);
+
```
+
+
### Sign Typed Data (EIP-712)
+
+
```
+
const signedData = await bevmController.signTypedMessage(msgParams);
+
```
+
+
### Get balance
+
+
```
+
const balance = await bevmController.getBalance(address, web3);
+
```
+
+
### Send Transaction
+
+
```
+
const receipt = await bevmController.sendTransaction(signedTx, web3);
+
```
+
+
### Calculate Tx Fees
+
+
```
+
const fees = await bevmController.getFees(rawTx, web3);
+
```
+
[discussions-badge]: https://img.shields.io/badge/Code_Quality-passing-rgba
-[discussions-link]: https://github.com/getsafle/vault-bevm-controller/actions
+
+[discussions-link]: https://github.com/getsafle/vault-bevm-controller/actions
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index f7a767c..d18bd9b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "@getsafle/vault-bevm-controller",
- "version": "1.0.1",
+ "version": "1.0.3",
"lockfileVersion": 2,
"requires": true,
"packages": {
diff --git a/package.json b/package.json
index a2fed4d..9ad0d31 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@getsafle/vault-bevm-controller",
- "version": "1.0.1",
+ "version": "1.0.3",
"description": "BEVM controller for safle vault",
"main": "src/index.js",
"scripts": {
diff --git a/src/index.js b/src/index.js
index 0b5e30c..21e608a 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,538 +1,538 @@
+const { EventEmitter } = require("events");
+const log = require("loglevel");
+const ethUtil = require("ethereumjs-util");
+const Tx = require("ethereumjs-tx");
-const { EventEmitter } = require('events')
-const log = require('loglevel')
-const ethUtil = require('ethereumjs-util')
-const Tx = require('ethereumjs-tx');
+const bip39 = require("bip39");
+const ObservableStore = require("obs-store");
+const encryptor = require("browser-passworder");
+const { normalize: normalizeAddress } = require("eth-sig-util");
-const bip39 = require('bip39')
-const ObservableStore = require('obs-store')
-const encryptor = require('browser-passworder')
-const { normalize: normalizeAddress } = require('eth-sig-util')
+const SimpleKeyring = require("eth-simple-keyring");
+const HdKeyring = require("eth-hd-keyring");
-const SimpleKeyring = require('eth-simple-keyring')
-const HdKeyring = require('eth-hd-keyring')
-
-const keyringTypes = [
- SimpleKeyring,
- HdKeyring,
-]
+const keyringTypes = [SimpleKeyring, HdKeyring];
class KeyringController extends EventEmitter {
-
- //
- // PUBLIC METHODS
- //
-
- constructor(opts) {
- super()
- const initState = opts.initState || {}
- this.keyringTypes = opts.keyringTypes ? keyringTypes.concat(opts.keyringTypes) : keyringTypes
- this.store = new ObservableStore(initState)
- this.memStore = new ObservableStore({
- isUnlocked: false,
- keyringTypes: this.keyringTypes.map((krt) => krt.type),
- keyrings: [],
- })
-
- this.encryptor = opts.encryptor || encryptor
- this.keyrings = []
- this.getNetwork = opts.getNetwork
- this.importedWallets = []
- }
-
- /**
- * Full Update
- *
- * Emits the `update` event and @returns a Promise that resolves to
- * the current state.
- *
- * Frequently used to end asynchronous chains in this class,
- * indicating consumers can often either listen for updates,
- * or accept a state-resolving promise to consume their results.
- *
- * @returns {Object} The controller state.
- */
- fullUpdate() {
- this.emit('update', this.memStore.getState())
- return this.memStore.getState()
+ //
+ // PUBLIC METHODS
+ //
+
+ constructor(opts) {
+ super();
+ const initState = opts.initState || {};
+ this.keyringTypes = opts.keyringTypes
+ ? keyringTypes.concat(opts.keyringTypes)
+ : keyringTypes;
+ this.store = new ObservableStore(initState);
+ this.memStore = new ObservableStore({
+ isUnlocked: false,
+ keyringTypes: this.keyringTypes.map((krt) => krt.type),
+ keyrings: [],
+ });
+
+ this.encryptor = opts.encryptor || encryptor;
+ this.keyrings = [];
+ this.getNetwork = opts.getNetwork;
+ this.importedWallets = [];
+ }
+
+ /**
+ * Full Update
+ *
+ * Emits the `update` event and @returns a Promise that resolves to
+ * the current state.
+ *
+ * Frequently used to end asynchronous chains in this class,
+ * indicating consumers can often either listen for updates,
+ * or accept a state-resolving promise to consume their results.
+ *
+ * @returns {Object} The controller state.
+ */
+ fullUpdate() {
+ this.emit("update", this.memStore.getState());
+ return this.memStore.getState();
+ }
+
+ /**
+ * Create New Vault And Keychain
+ *
+ * Destroys any old encrypted storage,
+ * creates a new encrypted store with the given password,
+ * randomly creates a new HD wallet with 1 account,
+ * faucets that account on the testnet.
+ *
+ * @emits KeyringController#unlock
+ * @param {string} password - The password to encrypt the vault with.
+ * @returns {Promise