100 lines
3.7 KiB
JavaScript
100 lines
3.7 KiB
JavaScript
// Copyright (c)2020, The Arqma Network
|
|
// Copyright (c)2020, Gary Rusher
|
|
// Portions of this software are available under BSD-3 license. Please see ORIGINAL-LICENSE for details
|
|
|
|
// All rights reserved.
|
|
|
|
// Authors and copyright holders give permission for following:
|
|
|
|
// 1. Redistribution and use in source and binary forms WITHOUT modification.
|
|
|
|
// 2. Modification of the source form for your own personal use.
|
|
|
|
// As long as the following conditions are met:
|
|
|
|
// 3. You must not distribute modified copies of the work to third parties. This includes
|
|
// posting the work online, or hosting copies of the modified work for download.
|
|
|
|
// 4. Any derivative version of this work is also covered by this license, including point 8.
|
|
|
|
// 5. Neither the name of the copyright holders nor the names of the authors may be
|
|
// used to endorse or promote products derived from this software without specific
|
|
// prior written permission.
|
|
|
|
// 6. You agree that this licence is governed by and shall be construed in accordance
|
|
// with the laws of England and Wales.
|
|
|
|
// 7. You agree to submit all disputes arising out of or in connection with this licence
|
|
// to the exclusive jurisdiction of the Courts of England and Wales.
|
|
|
|
// Authors and copyright holders agree that:
|
|
|
|
// 8. This licence expires and the work covered by it is released into the
|
|
// public domain on 1st of March 2021
|
|
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
let logSystem = "ZMQ"
|
|
require('./exceptionWriter.js')(logSystem);
|
|
let zmq = require("zeromq"),
|
|
dealer = zmq.socket("dealer");
|
|
const { fromEvent } = require('rxjs');
|
|
|
|
function randomBetween(min, max) {
|
|
return Math.floor(Math.random() * (max - min) + min);
|
|
}
|
|
|
|
function randomString() {
|
|
var source = 'abcdefghijklmnopqrstuvwxyz'
|
|
var target = [];
|
|
for (var i = 0; i < 20; i++) {
|
|
target.push(source[randomBetween(0, source.length)]);
|
|
}
|
|
return target.join('');
|
|
}
|
|
|
|
|
|
function startZMQ() {
|
|
dealer.identity = randomString();
|
|
dealer.connect(`tcp://${config.zmq.host}:${config.zmq.port}`);
|
|
log('info', logSystem, 'Dealer connected to port %s:%s', [config.zmq.host, config.zmq.port]);
|
|
return fromEvent(dealer, "message");
|
|
}
|
|
|
|
exports.startZMQ = startZMQ
|
|
|
|
function sendMessage(type, address) {
|
|
if (type === 'getinfo') {
|
|
let getinfo = {"jsonrpc": "2.0",
|
|
"id": "1",
|
|
"method": "get_info",
|
|
"params": {}}
|
|
dealer.send(["", JSON.stringify(getinfo)]);
|
|
}
|
|
if (type === 'get_block_template') {
|
|
let getblocktemplate = {"jsonrpc":"2.0",
|
|
"id":"0",
|
|
"method":"get_block_template",
|
|
"params":{"reserve_size":17,
|
|
"wallet_address":address} }
|
|
|
|
dealer.send(["", JSON.stringify(getblocktemplate)]);
|
|
}
|
|
|
|
}
|
|
|
|
exports.sendMessage = sendMessage
|
|
|
|
process.on('SIGINT', () => {
|
|
dealer.send(["", "EVICT"]);
|
|
dealer.close()
|
|
console.log('\nClosed')
|
|
})
|