@ravenrebels/ravencoin-key
Version:
Generate Ravencoin addresses from mnemonic code. BIP32, BIP39, BIP44
144 lines (130 loc) • 6.41 kB
JavaScript
var $g5Y9E$buffer = require("buffer");
var $g5Y9E$hyperbitjschains = require("@hyperbitjs/chains");
var $g5Y9E$bip39 = require("bip39");
var $g5Y9E$coinkey = require("coinkey");
var $g5Y9E$hdkey = require("hdkey");
function $parcel$interopDefault(a) {
return a && a.__esModule ? a.default : a;
}
function $parcel$defineInteropFlag(a) {
Object.defineProperty(a, '__esModule', {value: true, configurable: true});
}
function $parcel$export(e, n, v, s) {
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}
$parcel$defineInteropFlag(module.exports);
$parcel$export(module.exports, "getCoinType", () => $80bd448eb6ea085b$export$23109f16a8a07245);
$parcel$export(module.exports, "getAddressPair", () => $80bd448eb6ea085b$export$6e3ac79f8c0a2892);
$parcel$export(module.exports, "getHDKey", () => $80bd448eb6ea085b$export$6c78ccde21ad48f6);
$parcel$export(module.exports, "getAddressByPath", () => $80bd448eb6ea085b$export$6fc951b76952b95e);
$parcel$export(module.exports, "generateMnemonic", () => $80bd448eb6ea085b$export$9f993213e5806bf0);
$parcel$export(module.exports, "isMnemonicValid", () => $80bd448eb6ea085b$export$2b99b9ff149202f3);
$parcel$export(module.exports, "getAddressByWIF", () => $80bd448eb6ea085b$export$f43d70cb4ddd5664);
$parcel$export(module.exports, "entropyToMnemonic", () => $80bd448eb6ea085b$export$4becd65eb23312e6);
$parcel$export(module.exports, "generateAddressObject", () => $80bd448eb6ea085b$export$de190b37be25f71b);
$parcel$export(module.exports, "generateAddress", () => $80bd448eb6ea085b$export$e2e336010351d8a8);
$parcel$export(module.exports, "default", () => $80bd448eb6ea085b$export$2e2bcd8739ae039);
//Gives us meta data about coins/chains
var $80bd448eb6ea085b$require$Buffer = $g5Y9E$buffer.Buffer;
function $80bd448eb6ea085b$var$getNetwork(name) {
const c = name.toLowerCase(); //Just to be sure
const map = {
rvn: (0, $g5Y9E$hyperbitjschains.chains).rvn.mainnet.versions,
"rvn-test": (0, $g5Y9E$hyperbitjschains.chains).rvn.testnet?.versions,
evr: (0, $g5Y9E$hyperbitjschains.chains).evr.mainnet.versions,
"evr-test": (0, $g5Y9E$hyperbitjschains.chains).evr.testnet?.versions
};
const network = map[c];
if (!network) throw new Error("network must be of value " + Object.keys(map).toString());
return network;
}
function $80bd448eb6ea085b$export$23109f16a8a07245(network) {
const chain = $80bd448eb6ea085b$var$getNetwork(network);
return chain.bip44;
}
function $80bd448eb6ea085b$export$6e3ac79f8c0a2892(network, mnemonic, account, position) {
const hdKey = $80bd448eb6ea085b$export$6c78ccde21ad48f6(network, mnemonic);
const coin_type = $80bd448eb6ea085b$export$23109f16a8a07245(network);
//https://github.com/satoshilabs/slips/blob/master/slip-0044.md
//Syntax of BIP44
//m / purpose' / coin_type' / account' / change / address_index
const externalPath = `m/44'/${coin_type}'/${account}'/0/${position}`;
const externalAddress = $80bd448eb6ea085b$export$6fc951b76952b95e(network, hdKey, externalPath);
//change address
const internalPath = `m/44'/${coin_type}'/${account}'/1/${position}`;
const internalAddress = $80bd448eb6ea085b$export$6fc951b76952b95e(network, hdKey, internalPath);
return {
internal: internalAddress,
external: externalAddress,
position: position
};
}
function $80bd448eb6ea085b$export$6c78ccde21ad48f6(network, mnemonic) {
const chain = $80bd448eb6ea085b$var$getNetwork(network);
const seed = $g5Y9E$bip39.mnemonicToSeedSync(mnemonic).toString("hex");
//From the seed, get a hdKey, can we use CoinKey instead?
const hdKey = (0, ($parcel$interopDefault($g5Y9E$hdkey))).fromMasterSeed($80bd448eb6ea085b$require$Buffer.from(seed, "hex"), chain.bip32);
return hdKey;
}
function $80bd448eb6ea085b$export$6fc951b76952b95e(network, hdKey, path) {
const chain = $80bd448eb6ea085b$var$getNetwork(network);
const derived = hdKey.derive(path);
var ck2 = new $g5Y9E$coinkey(derived.privateKey, chain);
return {
address: ck2.publicAddress,
path: path,
privateKey: ck2.privateKey.toString("hex"),
WIF: ck2.privateWif
};
}
function $80bd448eb6ea085b$export$9f993213e5806bf0() {
return $g5Y9E$bip39.generateMnemonic();
}
function $80bd448eb6ea085b$export$2b99b9ff149202f3(mnemonic) {
//Check all languages
const wordlists = Object.values($g5Y9E$bip39.wordlists);
//If mnemonic is valid in any language, return true, otherwise false
for (const wordlist of wordlists){
const v = $g5Y9E$bip39.validateMnemonic(mnemonic, wordlist);
if (v === true) return true;
}
return false;
}
function $80bd448eb6ea085b$export$f43d70cb4ddd5664(network, privateKeyWIF) {
const coinKey = $g5Y9E$coinkey.fromWif(privateKeyWIF);
coinKey.versions = $80bd448eb6ea085b$var$getNetwork(network);
return {
address: coinKey.publicAddress,
privateKey: coinKey.privateKey.toString("hex"),
WIF: coinKey.privateWif
};
}
const $80bd448eb6ea085b$export$4becd65eb23312e6 = $g5Y9E$bip39.entropyToMnemonic;
function $80bd448eb6ea085b$export$de190b37be25f71b(network = "rvn") {
const mnemonic = $80bd448eb6ea085b$export$9f993213e5806bf0();
const account = 0;
const position = 0;
const addressPair = $80bd448eb6ea085b$export$6e3ac79f8c0a2892(network, mnemonic, account, position);
const addressObject = addressPair.external;
const result = {
...addressObject,
mnemonic: mnemonic,
network: network
};
return result;
}
function $80bd448eb6ea085b$export$e2e336010351d8a8(network = "rvn") {
return $80bd448eb6ea085b$export$de190b37be25f71b(network);
}
var $80bd448eb6ea085b$export$2e2bcd8739ae039 = {
entropyToMnemonic: $80bd448eb6ea085b$export$4becd65eb23312e6,
generateAddress: $80bd448eb6ea085b$export$e2e336010351d8a8,
generateMnemonic: $80bd448eb6ea085b$export$9f993213e5806bf0,
getAddressByPath: $80bd448eb6ea085b$export$6fc951b76952b95e,
getAddressByWIF: $80bd448eb6ea085b$export$f43d70cb4ddd5664,
getAddressPair: $80bd448eb6ea085b$export$6e3ac79f8c0a2892,
getCoinType: $80bd448eb6ea085b$export$23109f16a8a07245,
getHDKey: $80bd448eb6ea085b$export$6c78ccde21ad48f6,
isMnemonicValid: $80bd448eb6ea085b$export$2b99b9ff149202f3
};
//# sourceMappingURL=main.js.map