wallet.getBalance(function(err, confirmed, unconfirmed) { if (err) { console.log(err); channel.send(err.message); } else if (confirmed >= value) { // EVERYTHING if (value == confirmed) { value -= blocktrail.toSatoshi(0.0002); // some random fee because we don't have a swipe function yet } var pay = {}; pay[address] = value; wallet.pay(pay, function(err, txHash) { if (err) { console.log(err); channel.send(err.message); return; } var url = self.tipbot.explorerBaseUrl + "/tx/" + txHash; channel.send("Withdrawl of " + blocktrail.toBTC(value) + " BTC to " + address + " transaction; " + url); }); } else if (confirmed + unconfirmed >= value) { channel.send("Sorry " + self.handle + " you have to wait for your previous transactions to be confirmed before you can do this ..."); } else { channel.send("Sorry " + self.handle + " you do not have enough balance to do this ..."); } });
TipBot.prototype.normalizeValue = function(value, unit) { if (unit.match(/satoshis?/i)) { value = parseInt(value); } else if (unit.match(/BTC/i)) { value = blocktrail.toSatoshi(value); } else { value = null; // @TODO: should give a proper error } return value; };
var _ = require('lodash'); var debug = require('debug')('tipbot:tipbot'); var async = require('async'); var request = require('request'); var blocktrail = require('blocktrail-sdk'); var User = require('./user'); var Trigger = require('./trigger'); var bitcoin = require('bitcoinjs-lib'); // MIN_TIP equal to BASE_FEE var MIN_TIP = blocktrail.toSatoshi(0.0001); var TipBot = function(slack, BLOCKTRAIL_APIKEY, BLOCKTRAIL_APISECRET, SECRET, TESTNET, OPTIONS) { var self = this; self.slack = slack; self.client = blocktrail({ apiKey: BLOCKTRAIL_APIKEY, apiSecret: BLOCKTRAIL_APISECRET, network: "BTC", testnet: TESTNET }); self.explorerBaseUrl = "https://www.blocktrail.com/" + (TESTNET ? "tBTC" : "BTC"); self.TESTNET = TESTNET; self.SECRET = SECRET; self.OPTIONS = _.defaults(OPTIONS, { ALL_BALANCES: false, DEMAND: false });