forked from cerc-io/laconic-wallet
* 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>
48 lines
1.4 KiB
TypeScript
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 };
|