laconic-wallet/utils.ts
shreerang6921 cab9ec6e91
Add react-native-paper ui library (#7)
* Add ui library

* Replace alert with dialog on wallet creation

* Add review changes

* Add semicolon

* Remove comment

---------

Co-authored-by: Adw8 <adwait@deepstacksoft.com>
2024-02-12 18:51:03 +05:30

51 lines
1.7 KiB
TypeScript

/* Importing this library provides react native with a secure random source.
For more information, "visit https://docs.ethers.org/v5/cookbook/react-native/#cookbook-reactnative-security" */
import 'react-native-get-random-values';
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);
const ethNode = hdNode.derivePath("m/44'/60'/0'/0/0");
await setInternetCredentials('keyServer', 'key', ethNode.privateKey);
await setInternetCredentials('mnemonicServer', 'mnemonic', mnemonic);
return ethNode;
} 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 };