Create HDNode from Seed Buffer
HDNode HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
RVNBOX.HDNode.fromSeed(seedBuffer);
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
RVNBOX.HDNode.fromSeed(seedBuffer);
Derive non hardened child HDNode
HDNode HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// derive unhardened child HDNode
RVNBOX.HDNode.derive(hdNode, 0);
Derive hardened child HDNode
HDNode HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// derive hardened child HDNode
RVNBOX.HDNode.deriveHardened(hdNode, 0);
Derive child HDNode from path
HDNode HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// derive hardened child HDNode
RVNBOX.HDNode.derivePath(hdNode, "m/44'/175'/0'");
Get legacy address of HDNode
legacyAddress string: legacy base58check encoded address of HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to legacy address
RVNBOX.HDNode.toLegacyAddress(hdNode);
// 14apxtw2LDQmXWsS5k4JEhG93Jzjswhvma
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to legacy address
RVNBOX.HDNode.toLegacyAddress(hdNode);
// 14mVsq3H5Ep2Jb6AqoKsmY1BFHKCBGPDLi
Get private key in wallet import format (WIF) of HDNode
privateKeyWIF string: private key in wallet import format (WIF) of HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to WIF
RVNBOX.HDNode.toWIF(hdNode);
// L5E8QjFnLukp8BuF4uu9gmvvSrbafioURGdBve5tA3Eq5ptzbMCJ
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to WIF
RVNBOX.HDNode.toWIF(hdNode);
// KwobPFhv3AuXc3ps6YtWfMVRpLBDBA7jnJddurfELTyTNcFhZYpJ
Get extended public key of HDNode
xpub string: extended public key of HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to extended public key
RVNBOX.HDNode.toXPub(hdNode);
// xpub661MyMwAqRbcG4CnhNYoK1r1TKLwQQ1UdC3LHoWFK61rsnzh7Hx35qQ9Z53ucYcE5WvA7GEDXhqqKjSY2e6Y8n7WNVLYHpXCuuX945VPuYn
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to extended public key
RVNBOX.HDNode.toXPub(hdNode);
// xpub661MyMwAqRbcFuMLeHkSbTNwNHG9MQyrAZqV1Q4MEAsmj9MYa5sxg8WC2LKqW6EHviHVucBjWi1n38juZpDDeX3U6YrsMeACdcNSTHkM8BQ
Get extended private key of HDNode
xpriv string: extended private key of HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to extended private key
RVNBOX.HDNode.toXPriv(hdNode);
// xprv9s21ZrQH143K2eMCcbT4qwwRhw6qZaPaEDWB792bnrxQZPoP2JUk4kfEx9eeV1uGTAWAfCqYr4wDWo52qALiukizKwQzvEyNR1fWZJi97Kv
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// to extended private key
RVNBOX.HDNode.toXPriv(hdNode);
// xprv9s21ZrQH143K2b5GPP6zHz22E6LeCgQXJtwNbC3MA3Kz7Se7tveKo96EhqwFtSkYWkyenVcMqM7uq35PcUNG8cUdpsJEgwKG3dvfP7TmL3v
Get the ECPair of an HDNode
keyPair ECPair: ECPair of an HDNode
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create root seed buffer from mnemonic
let rootSeed= RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from root seed
let hdNode = RVNBOX.HDNode.fromSeed(rootSeed);
// create public key buffer from HDNode
RVNBOX.HDNode.toKeyPair(hdNode);
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// create public key buffer from HDNode
RVNBOX.HDNode.toKeyPair(hdNode);
//
Get the public key of an HDNode as a buffer
publicKeyBuffer Buffer: public key of HDNode as a buffer
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create root seed buffer from mnemonic
let rootSeed= RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from root seed
let hdNode = RVNBOX.HDNode.fromSeed(rootSeed);
// create public key buffer from HDNode
RVNBOX.HDNode.toPublicKey(hdNode);
//
// generate entropy
let entropy = RVNBOX.Crypto.randomBytes(32);
// create mnemonic from entropy
let mnemonic = RVNBOX.Mnemonic.fromEntropy(entropy);
// create seed buffer from mnemonic
let seedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create HDNode from seed buffer
let hdNode = RVNBOX.HDNode.fromSeed(seedBuffer);
// create public key buffer from HDNode
RVNBOX.HDNode.toPublicKey(hdNode);
//
hash160 of Node’s public key. The same value you would see in a scriptPubKey.
identifier string
// mainnet
let xpub = 'xpub6DWfGUo4cjC8oWmgZdpyFMH6v3oeyADfdUPhsehzn5jX44zpazivha3JxUtkcCvBEB1c6DGaiUmpyz2m1DRfGDEVZ5VxLLW2UNEbZ5iTRvi';
let node = RVNBOX.HDNode.fromXPub(xpub);
RVNBOX.HDNode.toIdentifier(node);
//
// the same as if we hash160ed it's publicKey
let publicKeyBuffer = RVNBOX.HDNode.toPublicKey(node);
RVNBOX.Crypto.hash160(publicKeyBuffer);
//
// testnet
let xpub = 'tpubDCxmZ3qLVVphg6NpsnAjQFqDPwr9HYqSgoAcUYAfqSgo32dL6NA8QXqWsS6XTjoGggohZKvujsAv2F2ugej9qfUYau2jSUB4JaYnfMsx3MJ';
let node = RVNBOX.HDNode.fromXPub(xpub);
RVNBOX.HDNode.toIdentifier(node);
//
// the same as if we hash160ed it's publicKey
let publicKeyBuffer = RVNBOX.HDNode.toPublicKey(node);
RVNBOX.Crypto.hash160(publicKeyBuffer);
//
Generate HDNode from extended private key
hdNode HDNode
// mainnet xpriv
RVNBOX.HDNode.fromXPriv('xprv9s21ZrQH143K2b5GPP6zHz22E6LeCgQXJtwNbC3MA3Kz7Se7tveKo96EhqwFtSkYWkyenVcMqM7uq35PcUNG8cUdpsJEgwKG3dvfP7TmL3v');
// testnet xpriv
RVNBOX.HDNode.fromXPriv('tprv8gQ3zr1F5pRHMebqqhorrorYNvUG3XkcZjSWVs2cEtRwwJy1TRhgRx4XcF8dYHM2eyTbTCcdKYNhqgyBQphxwRoVyVKr9zuyoA8WxNDRvom');
Generate HDNode from extended public key
hdNode HDNode
// mainnet xpub
RVNBOX.HDNode.fromXPub('xpub661MyMwAqRbcFuMLeHkSbTNwNHG9MQyrAZqV1Q4MEAsmj9MYa5sxg8WC2LKqW6EHviHVucBjWi1n38juZpDDeX3U6YrsMeACdcNSTHkM8BQ');
// testnet xpub
RVNBOX.HDNode.fromXPub('tpubDD669G3VEC6xF7ddjMUTGDWewwzCCrwX933HnP4ufAELmoDn5pXGcSgPnLodjFvWQwRXkG94f77BatEDA8dfQ99yy97kRYynUpNLENEqTBo');
Check if an HDNode can only derive public keys and children
isPublic Boolean
// mainnet xpub
let xpub = 'xpub6DWfGUo4cjC8oWmgZdpyFMH6v3oeyADfdUPhsehzn5jX44zpazivha3JxUtkcCvBEB1c6DGaiUmpyz2m1DRfGDEVZ5VxLLW2UNEbZ5iTRvi';
let node = RVNBOX.HDNode.fromXPub(xpub);
RVNBOX.HDNode.isPublic(node);
// true
// mainnet xpriv
let xpriv = 'xprv9ys4cvcoU8RoxqkZ7Fgt33te4LPHgcsKwyoZYVorkzp9uonWxWgP9wiSQhPeBUqVHbdAyov4Yi55RywBkDfZKdJFRqA51Anz6v72zGaMGZp';
let node = RVNBOX.HDNode.fromXPriv(xpriv);
RVNBOX.HDNode.isPublic(node);
// false
// testnet xpub
let xpub = 'tpubDCxmZ3qLVVphg6NpsnAjQFqDPwr9HYqSgoAcUYAfqSgo32dL6NA8QXqWsS6XTjoGggohZKvujsAv2F2ugej9qfUYau2jSUB4JaYnfMsx3MJ';
let node = RVNBOX.HDNode.fromXPub(xpub);
RVNBOX.HDNode.isPublic(node);
// true
// testnet xpriv
let xpriv = 'tprv8ggxJ8SG5EdqakzVUeLa9Gr7sqCdEcJPUNDmtdJscNxfmxoXvU36ZguiUWukJVEWEixAUr8pJabJkCt33wzxFQA587gqN51Lxdxx97zAzuG';
let node = RVNBOX.HDNode.fromXPriv(xpriv);
RVNBOX.HDNode.isPublic(node);
// false
Check if an HDNode can derive both public and private keys and children
isPrivate Boolean
// mainnet xpub
let xpub = 'xpub6DWfGUo4cjC8oWmgZdpyFMH6v3oeyADfdUPhsehzn5jX44zpazivha3JxUtkcCvBEB1c6DGaiUmpyz2m1DRfGDEVZ5VxLLW2UNEbZ5iTRvi';
let node = RVNBOX.HDNode.fromXPub(xpub);
RVNBOX.HDNode.isPrivate(node);
// false
// mainnet xpriv
let xpriv = 'xprv9ys4cvcoU8RoxqkZ7Fgt33te4LPHgcsKwyoZYVorkzp9uonWxWgP9wiSQhPeBUqVHbdAyov4Yi55RywBkDfZKdJFRqA51Anz6v72zGaMGZp';
let node = RVNBOX.HDNode.fromXPriv(xpriv);
RVNBOX.HDNode.isPrivate(node);
// true
// testnet xpub
let xpub = 'tpubDCxmZ3qLVVphg6NpsnAjQFqDPwr9HYqSgoAcUYAfqSgo32dL6NA8QXqWsS6XTjoGggohZKvujsAv2F2ugej9qfUYau2jSUB4JaYnfMsx3MJ';
let node = RVNBOX.HDNode.fromXPub(xpub);
RVNBOX.HDNode.isPrivate(node);
// false
// testnet xpriv
let xpriv = 'tprv8ggxJ8SG5EdqakzVUeLa9Gr7sqCdEcJPUNDmtdJscNxfmxoXvU36ZguiUWukJVEWEixAUr8pJabJkCt33wzxFQA587gqN51Lxdxx97zAzuG';
let node = RVNBOX.HDNode.fromXPriv(xpriv);
RVNBOX.HDNode.isPrivate(node);
// true
Sign 32 byte hash encoded as a buffer
signature Object
// mainnet xpriv
let xpriv = 'xprv9z2uWrGjbYPxc728rvtMi4jt4SudRiSfYn6Tdif5XN17pJ1NTbHoHK6JePkPLY1NHXLaQcA6sWudpZDm7DwKhbsGQieAp9wx46Wbio4iXg9';
// hdnode from xpriv
let hdnode = RVNBOX.HDNode.fromXPriv(xpriv);
// 32 byte buffer
let buf = Buffer.from(RVNBOX.Crypto.sha256('EARTH'), 'hex');
// sign
RVNBOX.HDNode.sign(hdnode, buf);
// testnet xpriv
let xpriv = 'tprv8ggxJ8SG5EdqakzVUeLa9Gr7sqCdEcJPUNDmtdJscNxfmxoXvU36ZguiUWukJVEWEixAUr8pJabJkCt33wzxFQA587gqN51Lxdxx97zAzuG';
// hdnode from xpriv
let hdnode = RVNBOX.HDNode.fromXPriv(xpriv);
// 32 byte buffer
let buf = Buffer.from(RVNBOX.Crypto.sha256('EARTH'), 'hex');
// sign
RVNBOX.HDNode.sign(hdnode, buf);
Verify signed 32 byte hash encoded as a buffer
verified Boolean
// mainnet xprivs
let xpriv1 = 'xprv9ys4cvcoU8RoqvzxGj886r4Ey3w1WfVNYH8sMnVPVzyQtaPPM6Q8pHm3D9WPWvEupGEgcJ1xLaGaZDcvKfoAurE2AzHRRRup5FuHzDr8n15';
let xpriv2 = 'xprv9ys4cvcoU8RoxqkZ7Fgt33te4LPHgcsKwyoZYVorkzp9uonWxWgP9wiSQhPeBUqVHbdAyov4Yi55RywBkDfZKdJFRqA51Anz6v72zGaMGZp';
// hdnodes from xprivs
let hdnode1 = RVNBOX.HDNode.fromXPriv(xpriv1);
let hdnode2 = RVNBOX.HDNode.fromXPriv(xpriv2);
// 32 byte buffer
let buf = Buffer.from(RVNBOX.Crypto.sha256('EARTH'), 'hex');
// sign
let signature = RVNBOX.HDNode.sign(hdnode1, buf);
// verify
RVNBOX.HDNode.verify(hdnode1, buf, signature);
// true
RVNBOX.HDNode.verify(hdnode2, buf, signature);
// false
// testnet xprivs
let xpriv1 = 'tprv8ggxJ8SG5EdqakzVUeLa9Gr7sqCdEcJPUNDmtdJscNxfmxoXvU36ZguiUWukJVEWEixAUr8pJabJkCt33wzxFQA587gqN51Lxdxx97zAzuG';
let xpriv2 = 'tprv8ggxJ8SG5EdqiM6Dn63QwHScQ7HS5hXqUMxSD1NEbDyPw6VtoUMFZBAohpTMsPz9cYbpHELmA4Zm79NKRvEvFdhWRX2bSmu7V7PiNb364nv';
// hdnodes from xprivs
let hdnode1 = RVNBOX.HDNode.fromXPriv(xpriv1);
let hdnode2 = RVNBOX.HDNode.fromXPriv(xpriv2);
// 32 byte buffer
let buf = Buffer.from(RVNBOX.Crypto.sha256('EARTH'), 'hex');
// sign
let signature = RVNBOX.ECPair.sign(hdnode1, buf);
// verify
RVNBOX.HDNode.verify(hdnode1, buf, signature);
// true
RVNBOX.HDNode.verify(hdnode2, buf, signature);
// false
Create BIP32 account. Has getChainAddress and nextChainAddress helper methods.
account: Object
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create root seed buffer
let rootSeedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create master hd node
let masterHDNode = RVNBOX.HDNode.fromSeed(rootSeedBuffer);
// derive child node
let childNode = masterHDNode.derivePath("m/44'/175'/0'/0");
// create account
let account = RVNBOX.HDNode.createAccount([childNode]);
Returns the latest address from account
address: String
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create root seed buffer
let rootSeedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create master hd node
let masterHDNode = RVNBOX.HDNode.fromSeed(rootSeedBuffer);
// derive child node
let childNode = masterHDNode.derivePath("m/44'/175'/0'/0");
// create account
let account = RVNBOX.HDNode.createAccount([childNode]);
account.getChainAddress(0)
// 1EsibxXqzxzcor7eS34dSGrZp1kb3nQFFr
Moves the most recent address forward for account
address: String
// create mnemonic
let mnemonic = RVNBOX.Mnemonic.generate(128);
// create root seed buffer
let rootSeedBuffer = RVNBOX.Mnemonic.toSeed(mnemonic);
// create master hd node
let masterHDNode = RVNBOX.HDNode.fromSeed(rootSeedBuffer);
// derive child node
let childNode = masterHDNode.derivePath("m/44'/175'/0'/0");
// create account
let account = RVNBOX.HDNode.createAccount([childNode]);
account.getChainAddress(0)
// 1EsibxXqzxzcor7eS34dSGrZp1kb3nQFFr
account.nextChainAddress(0)
account.getChainAddress(0)
// 1JBApcAMD3riimPxABg2pNvwLumP9DEpxD