Created
November 4, 2018 20:39
-
-
Save nakov/2e91d1c131356379714aaec43bc6cede to your computer and use it in GitHub Desktop.
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018) - JavaScript Code Examples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
npm install ethers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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