@pooltogether/bnc-onboard
Version:
Onboard users to web3 by allowing them to select a wallet, get that wallet ready to transact and have access to synced wallet state.
77 lines (59 loc) • 1.75 kB
JavaScript
import * as ethUtil from 'ethereumjs-util';
import HDKey from 'hdkey';
import { Buffer } from 'buffer';
var publicToAddress = ethUtil.publicToAddress,
toChecksumAddress = ethUtil.toChecksumAddress;
var numberToGet = 5;
function generateAddresses(account, offset) {
var publicKey = account.publicKey,
chainCode = account.chainCode,
path = account.path;
var hdk = new HDKey();
hdk.publicKey = new Buffer(publicKey, 'hex');
hdk.chainCode = new Buffer(chainCode, 'hex');
var addresses = [];
for (var i = offset; i < numberToGet + offset; i++) {
var dkey = hdk.deriveChild(i);
var address = publicToAddress(dkey.publicKey, true).toString('hex');
addresses.push({
dPath: "".concat(path, "/").concat(i),
address: toChecksumAddress("0x".concat(address))
});
}
return addresses;
}
function isValidPath(path) {
var parts = path.split('/');
if (parts[0] !== 'm') {
return false;
}
if (parts[1] !== "44'") {
return false;
}
if (!["60'", "1'", "73799'", "246'"].includes(parts[2])) {
return false;
}
if (parts[3] === undefined || parts[3] === "0'") {
return true;
}
var accountFieldNumber = Number(parts[3].slice(0, -1));
if (isNaN(accountFieldNumber) || accountFieldNumber < 0 || parts[3].slice(-1) !== "'") {
return false;
}
if (parts[4] === undefined) {
return true;
}
var changeFieldNumber = Number(parts[4]);
if (isNaN(changeFieldNumber) || changeFieldNumber < 0) {
return false;
}
if (parts[5] === undefined) {
return true;
}
var addressFieldNumber = Number(parts[5]);
if (isNaN(addressFieldNumber) || addressFieldNumber < 0) {
return false;
}
return true;
}
export { generateAddresses, isValidPath };