crypti-cli
Version:
Crypti DApps Command Line Interface
111 lines (88 loc) • 2.42 kB
JavaScript
var util = require('util');
var ByteBuffer = require('bytebuffer');
var crypto = require('./crypto.js');
var bignum = require('browserify-bignum');
var bytesTypes = {
2: function (trs) {
try {
var buf = new Buffer(trs.asset.delegate.username, 'utf8');
} catch (e) {
throw Error(e.toString());
}
return buf;
},
3: function (trs) {
try {
var buf = trs.asset.votes ? new Buffer(trs.asset.votes.join(''), 'utf8') : null;
} catch (e) {
throw Error(e.toString());
}
return buf;
},
9: function (trs) {
try {
var buf = new Buffer([]);
var nameBuf = new Buffer(trs.asset.dapp.name, 'utf8');
buf = Buffer.concat([buf, nameBuf]);
if (trs.asset.dapp.description) {
var descriptionBuf = new Buffer(trs.asset.dapp.description, 'utf8');
buf = Buffer.concat([buf, descriptionBuf]);
}
if (trs.asset.dapp.git) {
buf = Buffer.concat([buf, new Buffer(trs.asset.dapp.git, 'utf8')]);
}
var bb = new ByteBuffer(4 + 4, true);
bb.writeInt(trs.asset.dapp.type);
bb.writeInt(trs.asset.dapp.category);
bb.flip();
buf = Buffer.concat([buf, bb.toBuffer()]);
} catch (e) {
throw Error(e.toString());
}
return buf;
}
}
function getTransactionBytes(trs, skipSignature) {
var assetBytes, assetSize;
if (trs.type > 0) {
assetBytes = bytesTypes[trs.type](trs);
assetSize = assetBytes ? assetBytes.length : 0;
} else {
assetSize = 0;
}
var bb = new ByteBuffer(1 + 4 + 32 + 32 + 8 + 8 + 64 + 64 + assetSize, true);
bb.writeByte(trs.type);
bb.writeInt(trs.timestamp);
var senderPublicKeyBuffer = new Buffer(trs.senderPublicKey, 'hex');
for (var i = 0; i < senderPublicKeyBuffer.length; i++) {
bb.writeByte(senderPublicKeyBuffer[i]);
}
if (trs.recipientId) {
var recipient = trs.recipientId.slice(0, -1);
recipient = bignum(recipient).toBuffer({size: 8});
for (var i = 0; i < 8; i++) {
bb.writeByte(recipient[i] || 0);
}
} else {
for (var i = 0; i < 8; i++) {
bb.writeByte(0);
}
}
bb.writeLong(trs.amount);
if (assetSize > 0) {
for (var i = 0; i < assetSize; i++) {
bb.writeByte(assetBytes[i]);
}
}
if (!skipSignature && trs.signature) {
var signatureBuffer = new Buffer(trs.signature, 'hex');
for (var i = 0; i < signatureBuffer.length; i++) {
bb.writeByte(signatureBuffer[i]);
}
}
bb.flip();
return bb.toBuffer();
}
module.exports = {
getTransactionBytes: getTransactionBytes
}