UNPKG

bot18

Version:

A high-frequency cryptocurrency trading bot by Zenbot creator @carlos8f

69 lines (66 loc) 1.94 kB
var pempal = require('pempal') , nacl = require('tweetnacl') , assert = require('assert') , libPubkey = require('./pubkey') , a = require('../utils/a') , crypto = require('crypto') function parseWallet (buf) { try { assert.equal(buf.length, 96) } catch (e) { throw new Error('invalid wallet') } return { signSk: buf.slice(0, 64), decryptSk: buf.slice(64), sign: function (signBuf, detach) { if (detach) { //console.log('signed', crypto.createHash('sha1').update(signBuf).digest('hex')) var sig = Buffer.from(nacl.sign.detached(a(signBuf), a(this.signSk))) //console.log('sig', crypto.createHash('sha1').update(sig).digest('hex')) return sig } return Buffer(nacl.sign(a(signBuf), a(this.signSk))) }, regen: function () { if (!this.pubkey) throw new Error('wallet must have pubkey prop to regen') var boxKey = nacl.box.keyPair() this.decryptSk = boxKey.secretKey buf = Buffer.concat([ Buffer.from(this.signSk), Buffer.from(this.decryptSk) ]) var pubkeyBuf = Buffer.concat([ Buffer.from(this.pubkey.verifyPk), Buffer.from(boxKey.publicKey) ]) this.pubkey = libPubkey.parse(pubkeyBuf) }, toBuffer: function () { return buf }, toPEM: function (passphrase) { return pempal.encode(this.toBuffer(), {tag: 'SALTY WALLET', passphrase: passphrase}) } } } function createWallet () { var boxKey = nacl.box.keyPair() var signKey = nacl.sign.keyPair() var walletBuf = Buffer.concat([ Buffer.from(signKey.secretKey), Buffer.from(boxKey.secretKey) ]) var wallet = parseWallet(walletBuf) var pubkeyBuf = Buffer.concat([ Buffer.from(signKey.publicKey), Buffer.from(boxKey.publicKey) ]) wallet.pubkey = libPubkey.parse(pubkeyBuf) return wallet } module.exports = { parse: parseWallet, create: createWallet }