laconic-wallet/utils.ts
shreerang6921 3d40de966d
Generate wallet and sign message (#4)
* Store mnemonic and private key seperately

* Change variable names

* Refactor code in seperate components

* Display wallet details

* Remove unnecessary imports

* Make review changes

* Add method to reset wallet

* Make component self closing

* separate imports

---------

Co-authored-by: Adw8 <adwait@deepstacksoft.com>
2024-02-08 18:42:30 +05:30

48 lines
1.4 KiB
TypeScript

import '@ethersproject/shims';
import { Wallet, utils } from 'ethers';
import { HDNode } from 'ethers/lib/utils';
import { Alert } from 'react-native';
import {
setInternetCredentials,
getInternetCredentials,
resetInternetCredentials,
} from 'react-native-keychain';
const generateWallet = async (): Promise<HDNode | undefined> => {
try {
const mnemonic = utils.entropyToMnemonic(utils.randomBytes(32));
const hdNode = HDNode.fromMnemonic(mnemonic);
await setInternetCredentials('keyServer', 'key', hdNode.privateKey);
await setInternetCredentials('mnemonicServer', 'mnemonic', mnemonic);
Alert.alert('Wallet created successfully ');
return hdNode;
} catch (error) {
console.error('Error creating wallet ', error);
}
};
const signMessage = async (message: string) => {
try {
const keyCred = await getInternetCredentials('keyServer');
const wallet = keyCred && new Wallet(keyCred.password);
const signature = wallet && (await wallet.signMessage(message));
if (typeof signature === 'string') {
Alert.alert('Message signature: ', signature);
} else {
Alert.alert('Message signing failed. Please try again.');
}
} catch (error) {
console.error('Error signing transaction ', error);
}
};
const resetWallet = async () => {
await resetInternetCredentials('keyServer');
await resetInternetCredentials('mnemonicServer');
};
export { generateWallet, signMessage, resetWallet };