Adding heartbeat message andrequired functions for price plugins

This commit is contained in:
Richard Ramos 2018-05-31 08:46:31 -04:00
parent 65a55cede0
commit 9df77d5b30
4 changed files with 70 additions and 7 deletions

View File

@ -22,14 +22,28 @@
} }
}, },
"heartbeat": {
"enabled": true,
"symKey": "0xd0d905c1c62b810b787141430417caf2b3f54cffadb395b7bb39fdeb8f17266b"
},
"tokens": { "tokens": {
"0x0000000000000000000000000000000000000000": { "0x0000000000000000000000000000000000000000": {
"name": "Ethereum", "name": "Ethereum",
"symbol": "ETH" "symbol": "ETH",
"minAccepted":{
"value": 1,
"currency": "USD"
}
}, },
"0xD10e6dAe987Dcc0B3ADaA375C9f59690a4C97a27": { "0xD10e6dAe987Dcc0B3ADaA375C9f59690a4C97a27": {
"name": "Status Network Token", "name": "Status Network Token",
"symbol": "SNT" "symbol": "SNT",
"minAccepted":{
"value": 1,
"currency": "USD"
},
"pricePlugin": "../plugins/token-utils.js"
} }
}, },

View File

@ -12,9 +12,19 @@ class ContractSettings {
} }
process(){ process(){
this._setTokenPricePlugin();
this._processContracts(); this._processContracts();
} }
_setTokenPricePlugin(){
for(let token in this.tokens){
if(this.tokens[token].pricePlugin !== undefined){
let PricePlugin = require(this.tokens[token].pricePlugin);
this.tokens[token].pricePlugin = new PricePlugin(this.tokens[token]);
}
}
}
getToken(token){ getToken(token){
return this.tokens[token]; return this.tokens[token];
} }

View File

@ -96,6 +96,14 @@ class MessageProcessor {
} }
} }
_getFactor(input, contract, gasToken){
if(contract.allowedFunctions[input.functionName].isToken){
return this.web3.utils.toBN(this.settings.getToken(gasToken).pricePlugin.getFactor());
} else {
return this.web3.utils.toBN(1);
}
}
async getBalance(token, input, gasToken){ async getBalance(token, input, gasToken){
// Determining balances of token used // Determining balances of token used
if(token.symbol == "ETH"){ if(token.symbol == "ETH"){

View File

@ -31,12 +31,14 @@ events.on('web3:connected', connURL => {
}); });
events.on('setup:complete', (settings) => { // Setting up Whisper options
// Setting up Whisper options const shhOptions = {
const shhOptions = {
ttl: config.node.whisper.ttl, ttl: config.node.whisper.ttl,
minPow: config.node.whisper.minPow, minPow: config.node.whisper.minPow,
}; };
events.on('setup:complete', (settings) => {
let kId; let kId;
let symKId; let symKId;
@ -58,6 +60,35 @@ events.on('setup:complete', (settings) => {
shhOptions.topics = [contract]; shhOptions.topics = [contract];
events.emit('server:listen', shhOptions, settings); events.emit('server:listen', shhOptions, settings);
} }
if(config.heartbeat.enabled){
let heartbeatSymKeyId;
web3.shh.addSymKey(config.heartbeat.symKey)
.then(heartbeatSymKeyId => {
// TODO: define minPriceAccepted
let heartbeatPayload = {
'minPriceAccepted': 0
}
setInterval(() => {
web3.shh.post({
symKeyID: heartbeatSymKeyId,
sig: keyId,
ttl: config.node.whisper.ttl,
powTarget:config.node.whisper.minPow,
powTime: config.node.whisper.powTime,
// TODO: topic must be a combination of heartbeat + token
topic: web3.utils.toHex("relay-heartbeat").slice(0, 10),
payload: web3.utils.toHex(JSON.stringify(heartbeatPayload))
}).catch(console.error);
}, 1000);
});
}
}); });
}); });