Service now responds to availability requests
This commit is contained in:
parent
c6b3c226c4
commit
34cc2eca89
|
@ -59,50 +59,30 @@ events.on('setup:complete', async (settings) => {
|
||||||
// Verifying relayer balance
|
// Verifying relayer balance
|
||||||
await verifyBalance();
|
await verifyBalance();
|
||||||
|
|
||||||
shhOptions.symKeyId = await web3.shh.addSymKey(config.node.whisper.symKey);
|
|
||||||
shhOptions.kId = await web3.shh.newKeyPair();
|
shhOptions.kId = await web3.shh.newKeyPair();
|
||||||
|
|
||||||
|
const symKeyID = await web3.shh.addSymKey(config.node.whisper.symKey);
|
||||||
|
const pubKey = await web3.shh.getPublicKey(shhOptions.kId);
|
||||||
|
|
||||||
// Listening to whisper
|
// Listening to whisper
|
||||||
|
// Individual subscriptions due to https://github.com/ethereum/web3.js/issues/1361
|
||||||
|
// once this is fixed, we'll be able to use an array of topics and a single subs for symkey and a single subs for privKey
|
||||||
console.info(`Sym Key: ${config.node.whisper.symKey}`);
|
console.info(`Sym Key: ${config.node.whisper.symKey}`);
|
||||||
|
console.info(`Relayer Public Key: ${pubKey}`);
|
||||||
console.info("Topics Available:");
|
console.info("Topics Available:");
|
||||||
for(let contract in settings.contracts) {
|
for(let contract in settings.contracts) {
|
||||||
console.info("- %s: %s [%s]", settings.getContractByTopic(contract).name, contract, Object.keys(settings.getContractByTopic(contract).allowedFunctions).join(', '));
|
console.info("- %s: %s [%s]", settings.getContractByTopic(contract).name, contract, Object.keys(settings.getContractByTopic(contract).allowedFunctions).join(', '));
|
||||||
shhOptions.topics = [contract];
|
shhOptions.topics = [contract];
|
||||||
events.emit('server:listen', shhOptions, settings);
|
|
||||||
|
// Listen to public channel - Used for reporting availability
|
||||||
|
events.emit('server:listen', Object.assign({symKeyID}, shhOptions), settings);
|
||||||
|
|
||||||
|
// Listen to private channel - Individual transactions
|
||||||
|
events.emit('server:listen', Object.assign({privateKeyID: shhOptions.kId}, shhOptions), settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
if(config.heartbeat.enabled){
|
|
||||||
|
|
||||||
web3.shh.addSymKey(config.heartbeat.symKey)
|
|
||||||
.then(heartbeatSymKeyId => {
|
|
||||||
|
|
||||||
for(let tokenAddress in settings.getTokens()){
|
|
||||||
|
|
||||||
let heartbeatPayload = settings.getToken(tokenAddress);
|
|
||||||
heartbeatPayload.address = tokenAddress;
|
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
web3.shh.post({
|
|
||||||
symKeyID: heartbeatSymKeyId,
|
|
||||||
sig: keyId,
|
|
||||||
ttl: config.node.whisper.ttl,
|
|
||||||
powTarget:config.node.whisper.minPow,
|
|
||||||
powTime: config.node.whisper.powTime,
|
|
||||||
topic: web3.utils.toHex("relay-heartbeat-" + heartbeatPayload.symbol).slice(0, 10),
|
|
||||||
payload: web3.utils.toHex(JSON.stringify(heartbeatPayload))
|
|
||||||
}).catch((err) => {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(-1);
|
|
||||||
});
|
|
||||||
}, 60000);
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}*/
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const reply = (message) => (text, receipt) => {
|
const replyFunction = (message) => (text, receipt) => {
|
||||||
if(message.sig !== undefined){
|
if(message.sig !== undefined){
|
||||||
console.log(text);
|
console.log(text);
|
||||||
web3.shh.post({
|
web3.shh.post({
|
||||||
|
@ -121,9 +101,7 @@ const extractInput = (message) => {
|
||||||
let obj = {
|
let obj = {
|
||||||
contract: null,
|
contract: null,
|
||||||
address: null,
|
address: null,
|
||||||
functionName: null,
|
action: null
|
||||||
functionParameters: null,
|
|
||||||
payload: null
|
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -131,9 +109,15 @@ const extractInput = (message) => {
|
||||||
let parsedObj = JSON.parse(msg);
|
let parsedObj = JSON.parse(msg);
|
||||||
obj.contract = parsedObj.contract;
|
obj.contract = parsedObj.contract;
|
||||||
obj.address = parsedObj.address;
|
obj.address = parsedObj.address;
|
||||||
obj.functionName = parsedObj.encodedFunctionCall.slice(0, 10);
|
obj.action = parsedObj.action;
|
||||||
obj.functionParameters = "0x" + parsedObj.encodedFunctionCall.slice(10);
|
if(obj.action == 'transaction'){
|
||||||
obj.payload = parsedObj.encodedFunctionCall;
|
obj.functionName = parsedObj.encodedFunctionCall.slice(0, 10);
|
||||||
|
obj.functionParameters = "0x" + parsedObj.encodedFunctionCall.slice(10);
|
||||||
|
obj.payload = parsedObj.encodedFunctionCall;
|
||||||
|
} else if(obj.action == 'availability') {
|
||||||
|
obj.token = parsedObj.token;
|
||||||
|
obj.gasPrice = parsedObj.gasPrice;
|
||||||
|
}
|
||||||
} catch(err){
|
} catch(err){
|
||||||
console.error("Couldn't parse " + message);
|
console.error("Couldn't parse " + message);
|
||||||
}
|
}
|
||||||
|
@ -152,9 +136,23 @@ events.on('server:listen', (shhOptions, settings) => {
|
||||||
|
|
||||||
verifyBalance(true);
|
verifyBalance(true);
|
||||||
|
|
||||||
processor.process(settings.getContractByTopic(message.topic),
|
const input = extractInput(message);
|
||||||
extractInput(message),
|
const reply = replyFunction(message);
|
||||||
reply(message));
|
|
||||||
|
switch(input.action){
|
||||||
|
case 'transaction':
|
||||||
|
processor.process(settings.getContractByTopic(message.topic),
|
||||||
|
input,
|
||||||
|
reply);
|
||||||
|
break;
|
||||||
|
case 'availability':
|
||||||
|
reply("available");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reply("unknown-action");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue