blockchain-link
Version:
Link - The Blockchain File Sharing Protocol
89 lines (79 loc) • 2.97 kB
JavaScript
// Generated by CoffeeScript 1.6.3
(function() {
var LinkPublisher, LinkSequenceBuilder;
LinkSequenceBuilder = require("./link").LinkSequenceBuilder;
LinkPublisher = (function() {
function LinkPublisher(client) {
this.client = client;
}
LinkPublisher.prototype.encodeAddresses = function(message) {
var sequence;
sequence = new LinkSequenceBuilder(this.client.version);
if (message.payloadInline != null) {
sequence.addPayloadInline(message.payloadInline);
}
if (message.name != null) {
sequence.addName(message.name);
}
if (message.keywords != null) {
sequence.addKeywords(message.keywords);
}
if (message.description != null) {
sequence.addDescription(message.description);
}
if (message.originalCreationDate != null) {
sequence.addOriginalCreationDate(message.originalCreationDate);
}
if (message.lastModifiedDate != null) {
sequence.addLastModifiedDate(message.lastModifiedDate);
}
if (message.license != null) {
sequence.addLicense(message.license);
}
return sequence.getAddresses();
};
LinkPublisher.prototype.getMessageCost = function(addresses) {
return parseFloat(((addresses.length * 0.02) + (addresses.length * 0.00000001)).toFixed(8));
};
LinkPublisher.prototype.publish = function(message, callback) {
var addresses, client, outs, total, x, _i, _len;
addresses = this.encodeAddresses(message);
total = this.getMessageCost(addresses);
client = this.client;
outs = {};
for (_i = 0, _len = addresses.length; _i < _len; _i++) {
x = addresses[_i];
outs[x] = 0.00000001;
}
return client.listUnspent(0, function(err, unspent) {
var tx, useable, _j, _len1;
useable = void 0;
for (_j = 0, _len1 = unspent.length; _j < _len1; _j++) {
tx = unspent[_j];
if (parseFloat(tx.amount.toFixed(8)) >= total && ((useable == null) || parseFloat(useable.amount.toFixed(8)) > parseFloat(tx.amount.toFixed(8)))) {
useable = tx;
}
}
if (useable == null) {
return callback("No unspent");
}
if (useable.amount > total) {
outs[useable.address] = useable.amount - total;
}
return client.createRawTransaction([useable], outs, function(err, rawtx) {
return client.decodeRawTransaction(rawtx, function(error, decoded) {
return client.signRawTransaction(rawtx, [useable], function(error, decoded) {
return client.sendRawTransaction(decoded.hex, function(error, result) {
if (callback != null) {
return callback(result);
}
});
});
});
});
});
};
return LinkPublisher;
})();
exports.LinkPublisher = LinkPublisher;
}).call(this);