Skip to content

Instantly share code, notes, and snippets.

@nakov
Created November 4, 2018 20:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nakov/2e91d1c131356379714aaec43bc6cede to your computer and use it in GitHub Desktop.
Save nakov/2e91d1c131356379714aaec43bc6cede to your computer and use it in GitHub Desktop.
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018) - JavaScript Code Examples
let ethers = require('ethers');
let rnd256Bits = ethers.utils.randomBytes(256 / 8);
let mnemonics = ethers.HDNode.entropyToMnemonic(rnd256Bits);
let hdWallet = ethers.HDNode.fromMnemonic(mnemonics);
console.log("Wallet mnemonics:", mnemonics);
for (let index=0; index<5; index++) {
let key = hdWallet.derivePath(`m/44'/60'/0'/0/${index}'`);
console.log(`Private key #${index}: ${key.privateKey}`);
}
// Sample output:
// Wallet mnemonics: cliff sorry armor mail victory old cupboard inhale jar old jelly anxiety genius feel tissue outdoor modify gadget boring rough school devote view arctic
// Private key #0: 0x2113b54ed1c1f2cb8edeb1653091c31d37e5573b413bb0422862d6dff290e8bf
// Private key #1: 0x58d076025f3221cccd1c89bc3988db7cb8ddde0810e4944d7b139a3e33ee470a
// Private key #2: 0xc6734187daaa1ac100df3831f71b9d018deb4c2b02d4e6935fe4d45ec24d938c
// Private key #3: 0x455b91d33bfe5d85cc1d064ee13b65f6ac86300bbbcf440bab7ee411ba3e6aed
// Private key #4: 0x6ddda4f763fbae4913c483430124c0404a22bc98ceee676ce1dc658a497c2bfd
let ethers = require('ethers');
let mnemonics = "summer silent settle explain cigar print drift genius quarter smart subway humble";
let hdWallet = ethers.HDNode.fromMnemonic(mnemonics);
for (let index=0; index<5; index++) {
let key = hdWallet.derivePath(`m/44'/60'/0'/0/${index}`);
console.log(`Private key #${index}: ${key.privateKey}`);
}
// Output:
// Private key #0: 0x2762fd31a988d97937017b64a443b290423ca4b83f614d0acad6d4b002e8b4e1
// Private key #1: 0x6a7ebb54b19db308ef030c03bfabbba95310a61202b18fcb71134a598c6c57b9
// Private key #2: 0x783edd9c09f61d566629013a8195de370ec9b9f3c38e9977e5382e2fefd41828
// Private key #3: 0x8dc19991256a2a6f4b7cffde071473965a6a8aa966f2b79580e58b026a87d691
// Private key #4: 0xcf0cd9a8342bd04efcfa057135fa8ab8fd205d563cda681ec261acc2102b2606
let ethers = require('ethers');
let privKey = "0x0e210eff4fc77ff086d81d646c94af42ec5b1bbaf3f1d525f5bf5b82af7056da";
let existingWallet = new ethers.Wallet(privKey);
console.log("Address: " + existingWallet.address);
// Address: 0x1C68340bb2810BF5B0BEd3EDE256335cb51C53C7
const provider = ethers.providers.getDefaultProvider('ropsten');
provider.getBalance(existingWallet.address).then(balance =>
console.log('Balance:', ethers.utils.formatEther(balance)));
// Sample output:
// Address: 0xe25ACB5AaE29c38DABdc13Ea41177Aba1191D323
// Balance: 0.84220241844444422
let ethers = require('ethers');
let newWallet = ethers.Wallet.createRandom();
console.log("Address: " + newWallet.address);
console.log("Private key: " + newWallet.privateKey);
newWallet.encrypt('P@ss~12345').then(walletJSON => {
console.log("Encrypted wallet JSON:", walletJSON);
});
// Sample output:
// Address: 0xC936471553617d2Ca127dD3AC12e645377DfE1F0
// Private key: 0x6f9b4e3bbc01eb8ceb06a30cd2d60a68af7400455a2d32c7f719defec7e59d2d
// Encrypted wallet JSON: {"address":"c936471553617d2ca127dd3ac12e645377dfe1f0","id":"2e635dda-1051-497d-835a-56cbfdfd2a3c","version":3,"Crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":"586d56cff7ae3dfaaf9e781ee6a3a390"},"ciphertext":"28ebd6d95c67c4223b552ecd994aba9890bf040f2d3c02a1eb55a19598db7e4d","kdf":"scrypt","kdfparams":{"salt":"63e8cb7bf9fc6889778ac951a61b60c7bf82d5c5383255d7c68f8f51378926e2","n":131072,"dklen":32,"p":1,"r":8},"mac":"4f60bea6a2fdf2e0f601a9449e8822c81ea0e986a821a4d78b2f43cc5b7cfc93"},"x-ethers":{"client":"ethers.js","gethFilename":"UTC--2018-11-04T20-36-37.0Z--c936471553617d2ca127dd3ac12e645377dfe1f0","mnemonicCounter":"c4ffc924484c5fe64735352de50455b0","mnemonicCiphertext":"1d60d606aa9369c16373f15b901247ce","version":"0.1"}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment