Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions main/app/handlers/addressGenerator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const {mnemonicToSeedSync} = require("bip39");
const {fromSeed} = require("bip32");
const {ECPair} = require("@bitcoin-dot-com/bitcoincashjs2-lib");
const {isMainThread, parentPort} = require("worker_threads");
if (isMainThread) {
throw new Error('Its not a worker');
}

parentPort.on("message", async (seedPhrase) => {
const seed = mnemonicToSeedSync(seedPhrase)
const node = fromSeed(seed)
for (let i = 0; i < 20; i++) {
const child = node.derivePath("m/44'/0'/0'/0/" + i)
parentPort.postMessage((child))
//parentPort.postMessage(ECPair.fromWIF(child.toWIF()).getAddress())
}
});

10 changes: 9 additions & 1 deletion main/app/handlers/wallet.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
const {ipcMain} = require("electron");
const path = require("path");
const {Handlers} = require("../../common/util");
const {Handlers, Listeners} = require("../../common/util");
const {GetWalletInfo} = require("../../data/tables");
const menu = require("../../menu");
const {SetWallet, GetWallet, SetMenu, GetWindow, CreateWindow, eConf} = require("../window");
const {Worker} = require("worker_threads");

const WalletHandlers = () => {
ipcMain.handle(Handlers.GetWallet, async (e) => GetWallet(e.sender.id))
ipcMain.handle(Handlers.GetWalletInfo, async (e, addresses) => GetWalletInfo(eConf(e), addresses))
ipcMain.on(Handlers.GenerateAddresses, (e, seedPhrase) => {
let w = new Worker(path.resolve(__dirname,"addressGenerator.js"))
w.postMessage(seedPhrase)
w.on("message", (event) => {
e.sender.send(Listeners.AddressGenerated, event.data)
})
})
ipcMain.on(Handlers.StoreWallet, (e, wallet, filename, password) => {
SetWallet(e.sender.id, {wallet, filename, password})
})
Expand Down
2 changes: 2 additions & 0 deletions main/common/util/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const Handlers = {
GetWallet: "get-wallet",
WalletLoaded: "wallet-loaded",
GetWalletInfo: "get-wallet-info",
GenerateAddresses: "generate-addresses",
GraphQL: "graphql",
GraphQLSubscribe: "graphql-subscribe",
GraphQLSubscribeClose: "graphql-subscribe-close",
Expand Down Expand Up @@ -57,6 +58,7 @@ const Listeners = {
GraphQLClosePrefix: "graphql-close-",
GraphQLDataPrefix: "graphql-data-",
GraphQLOpenPrefix: "graphql-open-",
AddressGenerated: "address-generated",
}

module.exports = {
Expand Down
14 changes: 13 additions & 1 deletion main/preload/wallet.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const fs = require("fs/promises")
const CryptoJS = require("crypto-js");
const {ipcRenderer} = require("electron");
const {Handlers, Dir} = require("../common/util");
const {Handlers, Dir, Listeners} = require("../common/util");
const {decryptWallet, getPathForWallet, fileExists} = require("./common");
const path = require("path");
const fsOriginal = require("fs");
Expand Down Expand Up @@ -83,6 +83,18 @@ module.exports = {
},
getPassword: async () => (await ipcRenderer.invoke(Handlers.GetWallet)).password,
getWalletInfo: async (addresses) => ipcRenderer.invoke(Handlers.GetWalletInfo, addresses),
getAddresses: (seedPhrase) => {
return new Promise((resolve, reject) => {
let addressList = []
ipcRenderer.on(Listeners.AddressGenerated, (evt, data) => {
addressList.push(data)
if (addressList.length === 20) {
resolve(addressList)
}
})
ipcRenderer.send(Handlers.GenerateAddresses, seedPhrase)
})
},
getWallet: async () => (await ipcRenderer.invoke(Handlers.GetWallet)).wallet,
getWalletFile: async (walletName) => await fs.readFile(getPathForWallet(walletName), {encoding: "utf8"}),
setWallet: async (wallet, filename, password) =>
Expand Down
4 changes: 2 additions & 2 deletions renderer/components/modal/modals/address.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const AddressModal = ({onClose, setLastUpdate}) => {
setError("Error, cannot add addresses directly to a wallet with keys")
return
} else if(wallet.keys.length > 0){
const convertedKeys = GetAddresses("", keys)
const convertedKeys = await GetAddresses("", keys)
await window.electron.addAddresses(convertedKeys)
await window.electron.addKeys(keys)
} else{
Expand All @@ -25,7 +25,7 @@ const AddressModal = ({onClose, setLastUpdate}) => {
setLastUpdate((new Date()).toISOString())
onClose()
}

return (
<Modal onClose={onClose}>
<div className={styles.root}>
Expand Down
12 changes: 5 additions & 7 deletions renderer/components/util/addresses.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import * as path from "path";

const {mnemonicToSeedSync} = require("bip39");
const {fromSeed} = require("bip32");
const {ECPair} = require("@bitcoin-dot-com/bitcoincashjs2-lib");

const GetAddresses = (seedPhrase, keyList) => {
const GetAddresses = async (seedPhrase, keyList) => {
let addressList = []
if (seedPhrase && seedPhrase.length) {
const seed = mnemonicToSeedSync(seedPhrase)
const node = fromSeed(seed)
for (let i = 0; i < 20; i++) {
const child = node.derivePath("m/44'/0'/0'/0/" + i)
addressList.push(ECPair.fromWIF(child.toWIF()).getAddress())
}
addressList = await window.electron.getAddresses(seedPhrase)
console.log(addressList)
}
if (keyList && keyList.length) {
for (let i = 0; i < keyList.length; i++) {
Expand Down
2 changes: 1 addition & 1 deletion renderer/components/util/wallet.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import GetAddresses from "./addresses";
const GetWallet = async () => {
let wallet = await window.electron.getWallet()
if (!wallet.addresses || !wallet.addresses.length) {
const addressList = GetAddresses(wallet.seed, wallet.keys)
const addressList = await GetAddresses(wallet.seed, wallet.keys)
await window.electron.addAddresses(addressList)
wallet = await window.electron.getWallet()
}
Expand Down