bot18
Version:
A high-frequency cryptocurrency trading bot by Zenbot creator @carlos8f
69 lines (66 loc) • 1.94 kB
JavaScript
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
}