function getSignatureBytes(signature) { var bb = new ByteBuffer(32, true); var publicKeyBuffer = new Buffer(signature.publicKey, "hex"); for (var i = 0; i < publicKeyBuffer.length; i++) { bb.writeByte(publicKeyBuffer[i]); } bb.flip(); return new Uint8Array(bb.toArrayBuffer()); }
function getBytes(transaction) { var assetSize = 0, assetBytes = null; switch (transaction.type) { case 1: // Signature assetSize = 32; assetBytes = getSignatureBytes(transaction.asset.signature); break; case 2: // Delegate assetBytes = new Buffer(transaction.asset.delegate.username, "utf8"); assetSize = assetBytes.length; break; case 3: // Vote if (transaction.asset.votes !== null) { assetBytes = new Buffer(transaction.asset.votes.join(""), "utf8"); assetSize = assetBytes.length; } break; case 4: // Multi-Signature var keysgroupBuffer = new Buffer(transaction.asset.multisignature.keysgroup.join(""), "utf8"); var bb = new ByteBuffer(1 + 1 + keysgroupBuffer.length, true); bb.writeByte(transaction.asset.multisignature.min); bb.writeByte(transaction.asset.multisignature.lifetime); for (var i = 0; i < keysgroupBuffer.length; i++) { bb.writeByte(keysgroupBuffer[i]); } bb.flip(); assetBytes = bb.toBuffer(); assetSize = assetBytes.length; break; case 5: // Dapp assetBytes = getDAppBytes(transaction.asset.dapp); assetSize = assetBytes.length; break; case 6: // In Transfer (Dapp Deposit) assetBytes = getTransferBytes(transaction.asset.dapptransfer); assetSize = assetBytes.length; break; } if (transaction.requesterPublicKey) { assetSize += 32; } var bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true); bb.writeByte(transaction.type); bb.writeInt(transaction.timestamp); var senderPublicKeyBuffer = new Buffer(transaction.senderPublicKey, "hex"); for (var i = 0; i < senderPublicKeyBuffer.length; i++) { bb.writeByte(senderPublicKeyBuffer[i]); } if (transaction.requesterPublicKey) { var requesterPublicKey = new Buffer(transaction.requesterPublicKey, "hex"); for (var i = 0; i < requesterPublicKey.length; i++) { bb.writeByte(requesterPublicKey[i]); } } if (transaction.recipientId) { var recipient = transaction.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(transaction.amount); if (assetSize > 0) { for (var i = 0; i < assetSize; i++) { bb.writeByte(assetBytes[i]); } } if (transaction.signature) { var signatureBuffer = new Buffer(transaction.signature, "hex"); for (var i = 0; i < signatureBuffer.length; i++) { bb.writeByte(signatureBuffer[i]); } } if (transaction.signSignature) { var signSignatureBuffer = new Buffer(transaction.signSignature, "hex"); for (var i = 0; i < signSignatureBuffer.length; i++) { bb.writeByte(signSignatureBuffer[i]); } } bb.flip(); var arrayBuffer = new Uint8Array(bb.toArrayBuffer()); var buffer = []; for (var i = 0; i < arrayBuffer.length; i++) { buffer[i] = arrayBuffer[i]; } return new Buffer(buffer); }