forked from cerc-io/laconic-wallet
* Add ui library * Replace alert with dialog on wallet creation * Add review changes * Add semicolon * Remove comment --------- Co-authored-by: Adw8 <adwait@deepstacksoft.com>
51 lines
1.7 KiB
TypeScript
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 };
|